永发信息网

AT24C02读写

答案:2  悬赏:50  手机版
解决时间 2021-04-30 13:06
  • 提问者网友:喧嚣尘世
  • 2021-04-29 16:52

用下面的程序读写24C02,总是读不出来。不知道什么原因,高手指点一下

#include<reg52.h>
sbit SDA=P1^7;
sbit SCL=P1^6;
sbit WP=P1^5;

void Delay(char delay_cycle)
{
char m=0;
char j=0;
for(j=0;j<delay_cycle;j++)
{m++;m++;m++;m++;}
}

void Start()
{
 SDA=1;
 Delay(50);
 SCL=1;                           
 Delay(51);
 SDA=0;
 Delay(52);
}

void Stop()
{
SDA=0;
Delay(50);
SCL=1;
Delay(61);
SDA=1;
Delay(52);
}

void ACK()
{
SDA=0;
Delay(60);
SCL=1;
Delay(50);
SCL=0;
}

void Write(char Byte)
{
 char m;
 char temp;
 char Counter=7;
 SDA=0;
 temp=Byte;
 for(m=0;m<=Counter;m++)
 {
  SCL=0;
  if((temp&0x80)==0x80)
  SDA=1;
  else
  SDA=0;
  Delay(50);
  SCL=1;
  Delay(5000);
  Byte=Byte<<1;
  }
 SCL=0;
}

char Read()
{
char i=1;
char temp=0;
char counter=7;
SDA=0;
for(i=0;i<=counter;i++)
{
SCL=0;
Delay(50);
SCL=1;
Delay(50);
if(SDA==1)
temp=temp|0x01;
else
temp=temp&0xFE;
temp=temp<<1;
}
return(temp);
}

char W_ROM(char Byte,char addr)
{
Start();
Write(0xa0);
ACK();
Write(addr);
ACK();
Write(Byte);
Stop();
Delay(20);
}

char R_ROM(char addr)
{
char Byte=0;
Start();
Write(0xa1);
ACK();
Write(addr);
ACK();
Byte=Read();
SCL=0;
Stop();
return(Byte);
}

main()
{
char LED_P[10]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
char Store[10];
char i;
char addr=0x00;
WP=0;
for(i=0;i<=9;i++)
 {
 W_ROM(LED_P[i],addr);
 Store[i]=R_ROM(addr);
 addr++;
 }
}

最佳答案
  • 五星知识达人网友:街头电车
  • 2021-04-29 17:59
你好哦楼主~很高兴看到你的问题。但是又很遗憾到现在还没有人回答你的问题。也可能你现在已经在别的地方找到了答案,那就得恭喜你啦。对于你的问题我爱莫能助!可能是你问的问题有些专业了,或者别人没有遇到或者接触过你的问题,所以帮不了你。建议你去问题的相关论坛去求助,那里的人通常比较多,也会比较热心,能快点帮你解决问题。快过年了,最后祝您全家幸福健康快乐每一天!
全部回答
  • 1楼网友:上分大魔王
  • 2021-04-29 18:59
多半是由于读写时间过短导致程序不稳定, 提高Delay时间再试试 ~~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯