单片机之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);
}

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爆板流

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值