我的程序,昨天奇怪的可以写入数据,然后读出来,后来我不知道动了哪了,今天重新编译了程序,烧写下,发现数据无法写入,但是可以读出来··读出来的数据时昨天写进去的······坑爹啊···
可读,说明时序说明的应该没什么问题吧,应该是写的时候可能那里没有注意到,球指点···一下是我的读写程序:
extern unsigned char enumer;
bit ISendStr(unsigned char sla,unsigned int suba,unsigned char *s,unsigned char no)
{
unsigned char i;
Start_I2c(); /*启动总线*/
SendByte(sla); /*发送器件地址*/
if(ack==0)return(0); //
if(AT24C256 == AT24C256)
{
SendByte((unsigned char)(suba >> 8));//把整型数据转换为字符型数据:弃高取低,只取低8位.如果容量大于32K位,使用16位地址寻址,写入高八位地址
if(ack==0) return(0);
senddd('X');
}
SendByte((unsigned char)suba); /*发送器件子地址*/
if(ack==0)return(0);
Start_I2c(); /*重新启动总线*/
if(ack==0)return(0);
for(i=0;i<no;i++)
{
SendByte(*s); /*发送数据*/
//########################################################################
//我发现程序可以执行到这里 但是后面就return 0 了·····不知道为什么#############################
//####问题出现在这里啊 这里·····
if(ack==1)return(0);
s++;
}
Stop_I2c(); /*结束总线*/
return(1);
}
bit IRcvStr(unsigned char sla,unsigned int suba,unsigned char *s,unsigned char no)
{
unsigned char i;
Start_I2c(); /*启动总线*/
SendByte(sla); /*发送器件地址*/
if(ack==0)return(0);
if(AT24C256 == AT24C256)
{
SendByte((unsigned char)(suba >> 8));//把整型数据转换为字符型数据:弃高取低,只取低8位.如果容量大于32K位,使用16位地址寻址,写入高八位地址
if(ack==0) return(0);
}
SendByte((unsigned char)suba); /*发送器件子地址*/
if(ack==0)return(0);
Start_I2c(); /*重新启动总线*/
SendByte(sla+1);
if(ack==0)return(0);
for(i=0;i<no-1;i++)
{
*s=RcvByte(); /*发送数据*/
Ack_I2c(0); /*发送就答位*/
s++;
}
*s=RcvByte();
Ack_I2c(1); /*发送非应位*/
Stop_I2c(); /*结束总线*/
return(1);
}
我主函数是这样调用的:
unsigned char temp[10]="xyzxyzxyz";//我上次是abcdefg,写入成功了···今天不行了··
ISendStr(AT24C256,addr,&temp[0],8) ;//写EEPROM
memset(&temp[0],0,8);
IRcvStr(AT24C256,addr,&temp[0],8); //读EEPROM
printu("read :");
printu(&temp[0]);//这是串口输出数据
printu("\r\n");
求高人指点啊~~~~~~~~~~~~~奇怪的是 我昨天还可以写入,读出,正常;今天又弄了下就不可以了····写不进去,但是可以读出来,读出来的是昨天写进去的内容········
|