AT24c02无写保护,但只能正确读出不能正确写入……求教呀

2019-07-16 07:11发布

读任意地址数据功能正常,但写入数据不稳定,就成功写入一次,这是怎么回事?请教高手呀?再次谢谢了
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit scl=P1^0;
sbit sda=P1^1;
uchar code table[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07,0x7f,0x67};
void delayus()
{
{;;}
}
void delayms(uint x)
{
uchar m,n;
for(m=x;x>0;x--)
for(n=110;n>0;n--);
}
void init()//两总线释放总线(都为高电平),为总线空闲状态,此时才
{     //准许启动数据传送
sda=1;
delayus();
scl=1;
delayus();
}
void sta()
{
sda=1;scl=1;delayus();
sda=0;delayus();
scl=0;
}
bit resp()
{
uchar i=0;bit ask;
sda=1;//delayus();
scl=1;delayus();
ask=sda;
scl=0;
return(ask);
}
void nonresp()
{
sda=1;scl=0;
scl=1;delayus();
}
void sto()
{
scl=1;
sda=0;delayus();
sda=1;delayus();
sda=0;
}
void writebyte(uchar dat)
{
uchar i,temp;
temp=dat;
for(i=8;i>0;i--)
    {
  temp=temp<<1;
  scl=0;//delayus();
  sda=CY;
  scl=1;//delayus();
}
scl=0;delayus();
sda=1;delayus();
}
uchar readbyte()
{
uchar i,dat=0;
scl=0;
sda=1;
for(i=8;i>0;i--)
     {
   scl=1;
   dat=(dat<<1)|sda;
   scl=0;delayus();//延时一定一定要加,不然读数错误
  }
return(dat);
}
void write24c02(uchar address,uchar shu)
{
sta();
writebyte(0xA0);resp();
writebyte(address);resp();
writebyte(shu);resp();
sto();
}
uchar read24c02(uchar address)
{
uchar d;
sta();
writebyte(0xA0);resp();
writebyte(address);resp();
sta();
writebyte(0xa1);resp();
d=readbyte();
sto();
return(d);
}
void main()
{
uchar d;
init();
write24c02(3,7);delayms(30);
d=read24c02(3);

while(1)
{
P2=7;
P0=table[d]; }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。