AT24C02

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

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

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

#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)这条语句实现,这样的代码更加规范、安全。

AT24C02跨页写数据的更多相关文章

  1. python 使用openpyxl来写数据到excel表格

    使用openpyxl写execl确实很方便.我先介绍用到的相关模块与函数 Workbook:工作簿模块,在内存创建一个工作簿. ExcelWriter:使用它向exel中写数据. get_column ...

  2. 工作总结 1 sql写法 insert into select from 2 vs中 obj文件和bin文件 3 npoi 模板copy CopySheet 最好先全部Copy完后 再根据生成sheet写数据 4 sheet.CopyRow(rowsindex, rowsindex + x); 5 npoi 复制模板如果出现单元格显示问题

    我们可以从一个表中复制所有的列插入到另一个已存在的表中: INSERT INTO table2SELECT * FROM table1; 或者我们可以只复制希望的列插入到另一个已存在的表中: INSE ...

  3. 数据可视化之powerBI基础(五)深入了解Power BI的跨页钻取交互

    https://zhuanlan.zhihu.com/p/79036123 在 PowerBI 中还有一种有趣的交互方式:跨页钻取.它可以通过点击某个数据点,钻取到另一个页面,进一步展示该数据点的详细 ...

  4. 关于试用jquery的jsonp实现ajax跨域请求数据的问题

    我们在开发过程中遇到要获取另一个系统数据时,就造成跨域问题,这就是下文要说的解决办法: 先我们熟悉下json和jsonp的区别: 使用AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交 ...

  5. js跨域请求数据的3种常用的方法

    由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求.那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:1.JavaScript   在 ...

  6. 利用location.hash+iframe跨域获取数据详解

    前言 如果看懂了前文利用window.name+iframe跨域获取数据,那么此文也就很好理解了.一样都是动态插入一个iframe,然后把iframe的src指向服务端地址,而服务端同样都是输出一段j ...

  7. XMLHTTPRequest对象不能跨域获取数据?!

    写了一小段代码,是用XMLHTTPRequest对象来获取数据的,在本地服务器中,运行的很顺利,但是转向实际服务器(实质上就是转向http://gumball.wickedlysmart.com获取一 ...

  8. 使用jQuery-AJAX–读取获得跨域JSONP数据的示例

    在项目开发中,如果在同一个域名下就不存在跨域情况,使用$.getJSON()即可实现.但是需要跨域请求其他域名下面的Json数据就需要JSONP的方式去请求,跨域写法和getJSON有差异.如下:   ...

  9. Hbase写数据,存数据,读数据的详细过程

    Client写入 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 出发Compact合并操作 -> 多 ...

随机推荐

  1. Java实现后缀表达式建立表达式树

    概述 表达式树的特点:叶节点是操作数,其他节点为操作符.由于一般的操作符都是二元的,所以表达式树一般都是二叉树. 根据后缀表达式"ab+cde+**"建立一颗树 文字描述: 如同后 ...

  2. Python Django框架笔记(一):安装及创建项目

     #推荐一本书<Python核心编程>(适合有一定基础的),美国人Wesley Chun编写的,京东.淘宝应该都有.我是觉得写的很好,详细.简洁.满满的干货,不像有的书整本看完也没什么用. ...

  3. (笔记)MySQL 之 Metadata Locking 研究(5.5版本)

      MySQL5.5 中引入了 metadata lock. 顾名思义,metadata lock 不是为了保护表中的数据的,而是保护 database objects(元数据)的.包括表结构.sch ...

  4. ReportViewer 安装

    选择“工具”>“Nuget包管理器”>“程序包管理器控制台” 执行命令:Install-Package Microsoft.ReportingServices.ReportViewerCo ...

  5. Azure DevKit(AZ3166)源码找不到头文件问题

    Get “Error Presented: #include errors detected” when opening a project The error message is Error Pr ...

  6. 博客系统实战——SprintBoot 集成Thymeleaf 实现用户增删查改(含源码)

    近来在学习SprintBoot +Thymeleaf +Maven搭建自己的博客系统,故在学习过程中在此记录一下,也希望能给广大正在学习SprintBoot和Thymeleaf的朋友们一个参考. 以下 ...

  7. BZOJ 1087 互不侵犯King 状态压缩DP

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1087 题目大意; 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案.国 ...

  8. 更改Apache默认起始(索引)页面:DirectoryIndex

    Apache默认索引页面是index.html,修改成其他文件需要修改httpd.conf文件: # # DirectoryIndex: sets the file that Apache will ...

  9. 三、并行编程 - Task同步机制。TreadLocal类、Lock、Interlocked、Synchronization、ConcurrentQueue以及Barrier等

    在并行计算中,不可避免的会碰到多个任务共享变量,实例,集合.虽然task自带了两个方法:task.ContinueWith()和Task.Factory.ContinueWhenAll()来实现任务串 ...

  10. MP实战系列(十)之SpringMVC集成SpringFox+Swagger2

    该示例基于之前的实战系列,如果公司框架是使用JDK7以上及其Spring+MyBatis+SpringMVC/Spring+MyBatis Plus+SpringMVC可直接参考该实例. 不过建议最好 ...