AT24C02跨页写数据

AT24C02文章来源地址https://www.yii666.com/article/756273.html网址:yii666.com<文章来源地址:https://www.yii666.com/article/756273.html

EEPROM的写数据分为:字节写数据模式和页写数据模式;字节写就是一个地址一个数据的写,页写是连续写数据,一个地址多个数据的写,但是页写不能自动跨页,如果超出一页长度,超出的数据会覆盖原先写入的数据。

跨页写数据实现方法:通过IIC读写AT24C02,百度上面有一大堆例程。但向AT24C02写一个字符串时,例程上基本上都是以页写的形式呈现。页写入的方式只能写满一页,不能跨页继续写。网址:yii666.com

在此补充一个实现跨页写的函数,希望可以帮助到大家:

#define Page_Byte 8 //页字节8个

 #define Max_Addr 0xff   //最大可访问地址

 unsigned char AT24C02_Write(unsigned char WriteAddr,unsigned char* buffer) 

{ 

  unsigned short int BufSize = strlen(buffer); //获取要写入的字符串长度

   if((Max_Addr-WriteAddr) < BufSize) //空间不足返回0 

   return ; 

  I2C_Start(); //发I2C起始信号

  I2C_Send_Byte(0XA0); //写器件地址

  I2C_Wait_Ack(); //等待应答信号

  I2C_Send_Byte(WriteAddr); //发送地址

  I2C_Wait_Ack(); //等待应答信号

  while(*buffer++ != ) 

  { 

    I2C_Send_Byte(*buffer); //发送数据

    I2C_Wait_Ack(); //等待应答信号

    WriteAddr++; //写入地址加1 

    if(WriteAddr % Page_Byte == ) //新的一页

    { 

      I2C_Stop(); 

      delay_24c02();// AT24C02的写入周期是5ms,延时一定要大于或者等于5ms 

      I2C_Start(); 

      I2C_Send_Byte(0XA0); 

      I2C_Wait_Ack(); //等待应答信号

      I2C_Send_Byte(WriteAddr); //发送地址

      I2C_Wait_Ack(); //等待应答信号

    } 

  } 

    I2C_Stop(); 

    delay_24c02(); 

    return ; 

} 

在上面的代码中,有两个宏定义,第一个是一页可以写入的字节。在进行页写入的时候,比如写到了地址0x08,那么我们就要对这个地址进行判断,因为0x08已经是新的一页,所以 我们就要给一个停止信号,重新开始一次IIC通信,如何判断一个地址是否是新的一页,就是通过if(WriteAddr % Page_Byte == 0)这条语句实现的。

第二个宏定义是最大可写入地址,当写入的字节数大于剩余的可写入空间时,就可以通过if((Max_Addr-WriteAddr) < BufSize)这条语句实现,这样的代码更加规范、安全。文章地址https://www.yii666.com/article/756273.html

版权声明:本文内容来源于网络,版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。文本页已经标记具体来源原文地址,请点击原文查看来源网址,站内文章以及资源内容站长不承诺其正确性,如侵犯了您的权益,请联系站长如有侵权请联系站长,将立刻删除

AT24C02跨页写数据-相关文章

  1. ID基本操作(复制页面)(移动页面)(调整跨页页数)(版面调整)5.16

  2. AT24C02跨页写数据

  3. 关于云主机Thinkphp框架Session跨页失效的问题

  4. IText 生成pdf,处理table cell列跨页缺失的问题

  5. laydate年份选择,关闭底框,点击指定年份就选择然后关闭控件,翻页不选择也不关闭控件

  6. Java 设置PDF跨页表格重复显示表头行

    在创建表格时,如果表格内容出现跨页显示的时候,默认情况下该表格的表头不会在下一页显示,在阅读体验上不是很好。下面分享一个方法如何在表格跨页是显示表格的表头内容,这里只需要简单使用方法 grid.setRepeatHeader(true);  即可。具体参考如下方法步骤。1.导入Jar包这

  7. easyui datagrid 跨页选择

    $.fn.extend( memberList ,{quickSearch : function() {var time1 = new Date();/* this.datagrid.datagrid(\\\'clearSelections\\\');  */if(this.advSearchForm) {this.searchForm.setBaseConditions(this.advSearchForm.getConditions());}if( this.beforeSearch(this.searchForm.getQo()) ){/* this.datagrid.datagrid(\\\'clearSelections\\\');  */this.datagrid.datagrid(\\\'load\\\', {searchCond

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信图片_20190322181744_03.jpg

微信扫一扫打赏

请作者喝杯咖啡吧~

支付宝扫一扫领取红包,优惠每天领

二维码1

zhifubaohongbao.png

二维码2

zhifubaohongbao2.png