IIC之AT24C256 多页读写关键程序段

在写满一页后,需要结束总线,然后从新启动总线,再写入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);
}



你可能感兴趣的:(读写)