在写满一页后,需要结束总线,然后从新启动总线,再写入sla,写入下页的suba,写入数据。。。。
在结束总线和启动总线间要一定要加入延时,长点!!
extern unsigned char enumer;
bit ISendStr(unsigned char sla,unsigned int suba,unsigned char *s,unsigned char no)
{
unsigned char i;
unsigned int k;//
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);
for(i=0;i<no;i++)
{
//******************此段判断页**************************//
if(suba%64==0)
{
Stop_I2c();
for(k=0;k<10000;k++);
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);
}
suba++;
//********************此段判断页*****************************//
/*发送数据*/
SendByte(*s++);
if(ack==1) continue;//return(0);
senddd('X'); //没有到这····
///return(0);
}
Stop_I2c(); /*结束总线*/
return(1);
}