AT24C02跨页写数据
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跨页写数据的更多相关文章
- python 使用openpyxl来写数据到excel表格
使用openpyxl写execl确实很方便.我先介绍用到的相关模块与函数 Workbook:工作簿模块,在内存创建一个工作簿. ExcelWriter:使用它向exel中写数据. get_column ...
- 工作总结 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 ...
- 数据可视化之powerBI基础(五)深入了解Power BI的跨页钻取交互
https://zhuanlan.zhihu.com/p/79036123 在 PowerBI 中还有一种有趣的交互方式:跨页钻取.它可以通过点击某个数据点,钻取到另一个页面,进一步展示该数据点的详细 ...
- 关于试用jquery的jsonp实现ajax跨域请求数据的问题
我们在开发过程中遇到要获取另一个系统数据时,就造成跨域问题,这就是下文要说的解决办法: 先我们熟悉下json和jsonp的区别: 使用AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交 ...
- js跨域请求数据的3种常用的方法
由于js同源策略的影响,当在某一域名下请求其他域名,或者同一域名,不同端口下的url时,就会变成不被允许的跨域请求.那这个时候通常怎么解决呢,对此菜鸟光头我稍作了整理:1.JavaScript 在 ...
- 利用location.hash+iframe跨域获取数据详解
前言 如果看懂了前文利用window.name+iframe跨域获取数据,那么此文也就很好理解了.一样都是动态插入一个iframe,然后把iframe的src指向服务端地址,而服务端同样都是输出一段j ...
- XMLHTTPRequest对象不能跨域获取数据?!
写了一小段代码,是用XMLHTTPRequest对象来获取数据的,在本地服务器中,运行的很顺利,但是转向实际服务器(实质上就是转向http://gumball.wickedlysmart.com获取一 ...
- 使用jQuery-AJAX–读取获得跨域JSONP数据的示例
在项目开发中,如果在同一个域名下就不存在跨域情况,使用$.getJSON()即可实现.但是需要跨域请求其他域名下面的Json数据就需要JSONP的方式去请求,跨域写法和getJSON有差异.如下: ...
- Hbase写数据,存数据,读数据的详细过程
Client写入 -> 存入MemStore,一直到MemStore满 -> Flush成一个StoreFile,直至增长到一定阈值 -> 出发Compact合并操作 -> 多 ...
随机推荐
- JavaScript语法详解:if语句&for循环&函数
本文首发于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. if语句 最基本的if语句 if语句的结构体:(格式) if (条件表达式) ...
- (转载)令人迷糊的Oracle递归查询(start with)
转载地址:https://blog.csdn.net/weiwenhp/article/details/8218091 备注:如有侵权,请联系立即删除. 写代码时碰到要弄清楚Oracle的role之间 ...
- C#实现复制文件夹中文件到另一个文件夹的方法
private void CopyDir(string srcPath, string aimPath) { try { // 检查目标目录是否以目录分割字符结束如果不是则添加 if (aimPath ...
- 在 Virtual Box 中为 CentOS7 mini 配置双网卡
1. 配置过程 1.1 需求分析 要同时满足虚拟机访问互联网和远程连接,需要配置两块网卡. 一块为 NAT 网络,这块用来访问互联网. 另一块为 Host-Only 网络,进行远程连接. 1.2 ...
- C++设计模式 ==> 装饰(者)模式
简介 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象.装饰模式使用对象嵌套的思想,实现对一个对象动态地进行选择性的属 ...
- JDK5的新特性之 增强for
package cn.itcast.day19.foreach; import java.util.ArrayList; import java.util.Collection; import j ...
- Amazon Redshift数据库
Amazon Redshift介绍 Amazon Redshift是一种可轻松扩展的完全托管型PB级数据仓库,它通过使用列存储技术和并行化多个节点的查询来提供快速的查询性能,使您能够更高效的分析现有数 ...
- 使用 jekyll + github pages 搭建个人博客
1. 新建 github.io 项目 其实 github pages 有两个用途,大家可以在官方网页看到.其中一个是作为个人/组织的主页(每个账号只能有一个),另一个是作为 github 项目的项目主 ...
- 51nod 贪心算法题集
2070 最小罚款: 题意:初始有n元,每个任务有2个参数:t和w,<=t时刻前完成任务才可避免造成损失w.问:如何安排才能尽可能避免损失?一个任务执行时间是一个单位时间. 分析:任务按时间排个 ...
- Beyond Compare使用
1.通过过滤功能设置要比较的文件: 2.all,diff功能适用于文件本身的差异以及目录的差异 其它问题: 1.Beyond Compare比较文件时,相同的文件也显示为红色(有差异) http:// ...