登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

请教AT93c46与AT89C52的通讯程序

作者:yujun223 栏目:通信技术
请教93C46.html">AT93C46AT89C52的通讯程序
朋友们帮个忙,帮我看看这段程序
93C46.html">AT93C46AT89C52的通讯程序
93C46的ORG接地,采用八位方式

#include <reg52.h>
sbit CS=P3^4;
sbit SK=P3^3;
sbit DI=P3^1;
sbit DO=P3^0;
void Ewen(void) {
    unsigned CHAR TEMP,InData;
    CS=0;    
    SK=0;
    CS=1;
    InData=0x98;    // 10011XXXX
    for(TEMP=9;TEMP!=0;TEMP--) {    // 9
        DI=InData&0x80;
        SK=1;    SK=0;
        InData<<=1;
    }
    CS=0;
}
// Disables all PROGRAMMING instructions.
void Ewds(void) {
    unsigned CHAR TEMP,InData;
    CS=0;
    SK=0;
    CS=1;
    InData=0x80;    // 10000XXXX
    for(TEMP=9;TEMP!=0;TEMP--) {    // 9
        DI=InData&0x80;
        SK=1;    SK=0;
        InData<<=1;
    }
    CS=0;
}
// Reads data stored in MEMORY, at specified address.
unsigned int Read(unsigned CHAR address) {
    unsigned CHAR TEMP;
    unsigned CHAR result;
    Ewen();
    SK=0;    
    DI=1;    // 110 A6-A0
    CS=0;    
    CS=1;
    SK=1;    
    SK=0;
    DI=1;
    SK=1;    
    SK=0;
            // 1
    address=address&0x7f;
    for(TEMP=8;TEMP!=0;TEMP--) {    // 8
        DI=address&0x80;
        SK=1;    
        SK=0;
        address<<=1;
    }
    DO=1;
    for(TEMP=8;TEMP!=0;TEMP--) {    // 八位数据
        SK=1;
        result=(result<<1)|DO;
        SK=0;
    }
    CS=0;
    Ewds();
    return(result);
}
// Writes MEMORY location An - A0.
void Write(unsigned CHAR address,unsigned CHAR InData)
{
    unsigned CHAR TEMP;
    Ewen();
    SK=0;    
    DI=1;    // 101 A6-A0
    CS=0;    
    CS=1;
    SK=1;    
    SK=0;    
    DI=0;
    SK=1;    
    SK=0;        // 1
    address=address|0x80;
    for(TEMP=8;TEMP!=0;TEMP--) {    // 8
        DI=address&0x80;
        SK=1;    
        SK=0;
        address<<=1;

    }
    for(TEMP=8;TEMP!=0;TEMP--) {    // 8位数据
        DI=InData&0x80;
        SK=1;    
        SK=0;
        InData<<=1;
    }
    CS=0;    DO=1;
    CS=1;    SK=1;
    while(DO==0) {            // busy TEST
        SK=0;    SK=1;
    }
    SK=0;    CS=0;
    Ewds();
}

void delay(unsigned int x)
{
  unsigned CHAR j;
  while (x-->0)
  {
    for (j=0;j<125;j++)
       {;}
  }
}


main()
{
  unsigned CHAR trans_data[16]={0xc0,0xf9,0xa4,0xb0,0x99,
  0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc5,0xa1,0x86,0x8e};//bcd码0-F,共阳极
  unsigned CHAR maddress
  unsigned CHAR i=0;
  maddress=0x00;
  for(;i<16;i++)
  {
  Write(maddress++,trans_data[i]);
  }
  while(1)
  {     
        maddress=0;
        while(maddress<0x10)
       {
           P1=Read(maddress);
          delay(300);
          P1=0xFF;
          delay(300);
          maddress++;
        }
          
  }
}
  
结果只出来6。为什么??




参与讨论
昵称:
讨论内容:
 
 
相关帖子
电话线上的信号
请问手机中ESD器件是如何选择,主要看那几个参数?谢谢
cdma模块的发数据管脚一直为低!
数传电台
请教关于蓝牙接收数据率过低的可能原因
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号