实现AT24C02的数据读写操作
/*************************************************************** 功能:11:32 2008-6-27 作者:SG 时间:2004-03-15 版本:V1.0 ***************************************************************/ #include "INTRINS.H" #include "reg52.h" #define WriteDeviceAddress 0xa0 //写驱动地址指令 #define ReadDeviceAddress 0xa1 //读驱动地址指令 sbit AT24C02_SCL = 0xa4; sbit AT24C02_SDA = 0xa5; /*------------------------------------------------------------- 功能:发起始信号 ------------------------------------------------------------*/ void Start_Cond() { AT24C02_SCL = ; _nop_(); AT24C02_SDA = ; _nop_(); AT24C02_SCL = ; _nop_(); AT24C02_SDA = ; _nop_(); } /*------------------------------------------------------------- 功能:发停止信号 ------------------------------------------------------------*/ void Stop_Cond() { AT24C02_SCL = ; _nop_(); AT24C02_SDA = ; _nop_(); AT24C02_SCL = ; _nop_(); AT24C02_SDA = ; _nop_(); } /*------------------------------------------------------------- 功能:发确认信号 ------------------------------------------------------------*/ void Ack() { AT24C02_SCL = ; _nop_(); AT24C02_SDA = ; AT24C02_SCL = ; _nop_(); AT24C02_SCL = ; _nop_(); AT24C02_SDA = ; } /*------------------------------------------------------------- 功能:发无确认信号 ------------------------------------------------------------*/ void NoAck() { AT24C02_SCL = ; _nop_(); AT24C02_SDA = ; _nop_(); AT24C02_SCL = ; _nop_(); AT24C02_SCL = ; _nop_(); } /*------------------------------------------------------------- 功能:写一个字节数据 ------------------------------------------------------------*/ bit Write8Bit(unsigned char input) { unsigned char i; ;i<;i++) { AT24C02_SCL = ; input <<= ; AT24C02_SDA = CY; AT24C02_SCL = ; } AT24C02_SCL = ; _nop_(); AT24C02_SDA = ; AT24C02_SCL = ; _nop_(); CY = AT24C02_SDA; return(CY) ; } /*------------------------------------------------------------- 功能:读一个字节数据 ------------------------------------------------------------*/ unsigned char Read8Bit() { unsigned ; ;temp != ;temp--) { AT24C02_SCL = ; _nop_(); rbyte = (rbyte << ) | AT24C02_SDA; AT24C02_SCL = ; _nop_(); } return rbyte; } /*------------------------------------------------------------- 功能:从EEPROM中给定一个地址连续读NLEN个字节数据存放在以指针 nContent开头的往下内容。 ------------------------------------------------------------*/ bit Read_Flash ( unsigned char *nContent, unsigned char nAddr, unsigned char nLen ) { unsigned char Addr; Addr = nAddr; Start_Cond(); //写开始信号 Write8Bit(WriteDeviceAddress); //写驱动地址 Write8Bit(Addr); //写从EEPROM中读的开始地址 Start_Cond(); //写开始信号 Write8Bit(ReadDeviceAddress); //写读数据指令 while(--nLen) { *nContent=Read8Bit(); //读出内容 nContent++; //指针加1 Ack(); //发确认信号 } *nContent=Read8Bit(); //读一字节 NoAck(); //没有确认信号 Stop_Cond(); //发停止信号 ); //返回 } /*------------------------------------------------------------- 功能:初始化EEPROM子程序内容为FF ------------------------------------------------------------*/ bit Init_Flash ( unsigned int nPage ) // 8 Byte/1Page init 0xFF { unsigned char nLen; unsigned char Addr; nLen=; Addr= *nPage; Start_Cond(); Write8Bit(WriteDeviceAddress); Write8Bit(Addr); ;nLen--) { if(Write8Bit(0xff)) break; //if Write8Bit() Return 1 Write Flase } Stop_Cond(); return(CY); } /*------------------------------------------------------------- 功能:从EEPROM中给定一个地址连续写NLEN个字节数据存放在以指针 nContent开头的往下内容。 ------------------------------------------------------------*/ bit Write_Flash ( unsigned char *nContent, unsigned char nAddr,unsigned char nLen) { unsigned char i,temp; unsigned char Addr; Addr = nAddr; Start_Cond(); //写开始信号 Write8Bit(WriteDeviceAddress); //写驱动地址 Write8Bit(Addr); //写从EEPROM中写的开始地址 ;i < nLen;i++) { ==) //每页8字节 //换页 { Stop_Cond(); _nop_(); Start_Cond(); Write8Bit(WriteDeviceAddress); Write8Bit(Addr); } temp = *nContent; if(Write8Bit(temp)) break; //CY nContent++; Addr++; } Stop_Cond(); //发停止信号 return(CY); } /*------------------------------------------------------------- 主程序 功能:实现存储器EEPROM AT24C02的数据读写操作 ------------------------------------------------------------*/ void main() { unsigned ],i; Read_Flash(dat,,); //读出AT24C02中从地址0开始依次往后16个字节放入dat数组中 Init_Flash(); //将AT24C02的第0页初始化为FF Read_Flash(dat,,); //读出AT24C02中从地址0开始依次往后16个字节放入dat数组中 ;i < ;i++ ) { dat[i] = i; //对数组dat初始化为0---F } Write_Flash(dat,,); //将dat数组中的数据写入AT24C02中地址从0开始 Read_Flash(dat,,); //读出AT24C02中从地址1开始依次往后16个字节放入dat数组中 ) { i = ; } }
实现AT24C02的数据读写操作的更多相关文章
- 如何确保Memcache数据读写操作的原子性(转)
什么是CAS协议 Memcached于1.2.4版本新增CAS(Check and Set)协议类同于Java并发的CAS(Compare and Swap)原子操作,处理同一item被多个线程更改过 ...
- 一个I/O线程可以并发处理N个客户端连接和读写操作 I/O复用模型 基于Buf操作NIO可以读取任意位置的数据 Channel中读取数据到Buffer中或将数据 Buffer 中写入到 Channel 事件驱动消息通知观察者模式
Tomcat那些事儿 https://mp.weixin.qq.com/s?__biz=MzI3MTEwODc5Ng==&mid=2650860016&idx=2&sn=549 ...
- Java 对不同类型的数据文件的读写操作整合器[JSON,XML,CSV]-[经过设计模式改造](2020年寒假小目标03)
日期:2020.01.16 博客期:125 星期四 我想说想要构造这样一个通用文件读写器确实不容易,嗯~以后会添加更多的文件类型,先来熟悉一下文件内容样式: <?xml version=&quo ...
- python第二十九课——文件读写(写数据的操作)
演示写数据的操作: 结论:往文件中写入数据,如果文件不存在,先创建文件,再写入内容 #1.打开文件 fw=open(r'd.txt','w',encoding='utf-8') #2.写数据操作 fw ...
- cv.Mat 与 .txt 文件数据的读写操作
1.按OpenCV格式实现的 .txt 文件读写 可以用 cvSave 和 cvLoad 实现,格式和 .xml/.yml 的差不多,不过如果专用与 OpenCV 的数据读写,还是用 .xml/.y ...
- I2C的读写操作实验
[实验任务] 利用24C08断电以后存储的数据不消失的特点,可以做一个断电保护装置.首先利用单片机做一个0-99秒的自动计时器.然后随机关断电源,在 通电以后计时器接着断电前的状态继续计时. [实 ...
- c语言文件读写操作总结
C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...
- [转]Android - 文件读写操作 总结
转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...
- JAVASE02-Unit08: 文本数据IO操作 、 异常处理
Unit08: 文本数据IO操作 . 异常处理 * java.io.ObjectOutputStream * 对象输出流,作用是进行对象序列化 package day08; import java.i ...
随机推荐
- PowerShell 管道和对象成员
2.1 管道 在各种现代的shell中,均支持管道的概念. 管道的最大特点就是: 前一个命令的输出作为后一个命令的输入.cmd.bash均支持管道的概念,这里我就不多说了,下面我们说说PS中 管道 ...
- Java获取当前日期的前一个月,前一天的时间
Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -); //得到前一天 calendar.add(Cal ...
- libeXosip2(1-1) -- How-To initialize libeXosip2.
How-To initialize libeXosip2. The eXtented eXosip stack Initialize eXosip and prepare transport laye ...
- JavaScript面向对象之类的创建
JavaScript对象的定义: 在js中函数极为对象,对象分为二种:对象字变量产生的对象连接到Object.prototype:函数对象连接到Function.prototype 方法:当一个函数被 ...
- spring MVC上传文件演示
//相比smartUpload功能上感觉确实有点心有意力不足的感觉,就安全性判断后缀,smartUpload就非常方便. public ModelAndView addFileUp(HttpServl ...
- 五分钟读懂UML类图
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...
- ie6下a标签的onclick事件不执行问题解决方案
<a href="javascript:void(0)" onclick="loadiframe()">点我咯</a> <scri ...
- 【桌面虚拟化】之三 Persistent vs NonP
作者:范军 (Frank Fan) 新浪微博:@frankfan7 在[桌面虚拟化]之二类型及案例中我们探讨了桌面虚拟化的两种架构,HostedVirtual Desktop (VDI) 和 Publ ...
- mysql的“Got error 28 from storage engine”错误
磁盘临时空间不够导致.解决办法:清空/tmp目录,或者修改my.cnf中的tmpdir参数,指向具有足够空间目录
- NET中级课--浅谈委托,事件,异步调用,回调等概念
直接说题. 委托 首先明确它是什么,其实就是一个类,定义一个委托即定义一个类,那么它是什么类?用来说明方法的类型的类.字段有类型,那么方法其实也有类型,就是委托. 委托是某 ...