我的程序,昨天奇怪的可以写入数据,然后读出来,后来我不知道动了哪了,今天重新编译了程序,烧写下,发现数据无法写入,但是可以读出来··读出来的数据时昨天写进去的······坑爹啊···
可读,说明时序说明的应该没什么问题吧,应该是写的时候可能那里没有注意到,球指点···一下是我的读写程序:
- 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");
求高人指点啊~~~~~~~~~~~~~奇怪的是 我昨天还可以写入,读出,正常;今天又弄了下就不可以了····写不进去,但是可以读出来,读出来的是昨天写进去的内容········
|