24c04的读问题,可用程序现在不能读了,写正常,但是读不可以,麻烦有经验的高手指点下
uchar onebyte(uchar cmd, uchar da)
{
uchar step,i,k;
step=0;
if(cmd==0)//写
{
step=da;
for(i=0;i<8;i++)
{ SCL=0;
step=step<<1;
SDA=CY;
delayxus(10);
SCL=1;
delayxus(10);
}
SCL=0;
delayxus(5);
return da;
}
else if(cmd==1)//读
{ SCL=0;
delayxus(5);
for(i=0;i<8;i++)
{ SCL=1;
delayxus(10);
if(SDA==1)k=1;
else k=0;
step=step<<1;
step=step|k;
delayxus(10);
SCL=0;
}
delayxus(5);
return step;
}
}
void start(void)
{
delayxus(6); SDA=1;
delayxus(6); SCL=1;
delayxus(6); SDA=0;
delayxus(6); SCL=0;
}
uchar ack(uchar val)
{
uchar rtn;
delayxus(6); SDA=val;
delayxus(6); SCL=1;
delayxus(6); if(val!=0) rtn=SDA;
delayxus(6); SCL=0; SDA=1;
return(rtn);
}
void stop(void)
{
delayxus(6); SCL=0;
delayxus(6); SDA=0;
delayxus(6); SCL=1;
delayxus(6); SDA=1;
}
uchar random_r(uchar page, uchar addr)
{
uchar da;
page=((page<<1)&0x0f)|0xa0; /* calculate device address */
da=0;
loop: start();
onebyte(0, page);
if(ack(1)==1) goto loop;
onebyte(0, addr);
if(ack(1)==1) goto loop;
page|=0x01;
loop1: start();
onebyte(0, page);
if(ack(1)==1) goto loop1;
da=onebyte(1, 0);
ack(1);
stop();
return(da);
} |