高手们小弟对24C512写进10000个数据,地址是从0到10000这么写的数据都是8位的0x01-0xFF,这些,但是在我读出来的时候,读到第6144个址址时就返回到0了,读到的是0地址里的数据,6145读1,循环了不知道是为什么,谢大虾们帮帮小弟我很菜的呵呵。那位高手有读写24C512的程序能发给小弟吗谢谢了,我的邮箱是sanzang_xulong@126.com.
/*-----------------------------------------------
调用方式:void write24c512(uint address,uchar ddata)
函数说明:写数据到24c512的指定地址(字节写)
-----------------------------------------------*/
void WriteFm24c512(uint address,uchar ddata)
{
//EA=0; //避免与串口通讯等中断冲突
start_bit();
write_8bit(0xA0);
ack();
write_8bit(address/256);
ack();
write_8bit(address%256);
ack();
write_8bit(ddata);
ack();
stop_bit();
//EA=1;
}
void delay1(uint z)//延时为 1ms
{
uchar x,x1;
for(;z>0;z--)
{
for(x=0;x<114;x++)
{
for(x1=0;x1<1;x1++);
}
}
}
/*----------------------------------------------
调用方式:uchar read24c512(uint address)
函数说明:读24c512指定地址数据(字节读)
-----------------------------------------------*/
uchar ReadFm24c512(uint address)
{
uchar data rdata;
uchar i=8;
//EA=0;//避免与串口通讯等中断冲突
start_bit();
write_8bit(0xA0);
ack();
write_8bit(address/256);
ack();//伪写
write_8bit(address%256);
ack();
start_bit();
write_8bit(0xA1);
ack();
while(i--)
{
rdata<<=1;
SCL=0;
_nop_();
SCL=1;
if(SDA) rdata|=0x01;
}
no_ack();
stop_bit();
//EA=1;
return rdata;
} |