51单片机——EEPROM

单片机——E2PROM


宗旨:技术的学习是有限的,分享的精神是无限的。

 

        24C02:256 个字节的 EEPROM。一般情况下,EEPROM 拥有 30 万到 100 万次的寿命。基于 I2C 通信协议的器件。I2C 是一个通信协议,它拥有严密的通信时序逻辑要求,而EEPROM 是一个器件,只是这个器件采样了 I2C 协议的接口与单片机相连而已,二者并没有必然的联系,EEPROM 可以用其它接口, I2C 也可以用在其它很多器件上。

 

1EEPROM写数据流程

第一步,首先是 I2C 的起始信号,接着跟上首字节,也就是我们前边讲的 I2C 的器件地
址,并且在读写方向上选择“写”操作。

第二步,发送数据的存储地址。24C02一共 256 个字节的存储空间,地址从 0x00~0xFF,我们想把数据存储在哪个位置,此刻写的就是哪个地址。
第三步,发送要存储的数据第一个字节、第二个字节„„注意在写数据的过程中,
EEPROM 每个字节都会回应一个“应答位 0”,来告诉我们写 EEPROM 数据成功,如果没有回应答位,说明写入不成功。

在写数据的过程中,每成功写入一个字节,EEPROM 存储空间的地址就会自动加 1,当加到 0xFF 后,再写一个字节,地址会溢出又变成了 0x00。

 

2EEPROM读数据流程

第一步,首先是 I2C 的起始信号,接着跟上首字节,也就是我们前边讲的 I2C 的器件地址,并且在读写方向上选择“写”操作。这个地方可能有同学会诧异,我们明明是读数据为何方向也要选“写”呢?刚才说过了,24C02 一共有 256 个地址,我们选择写操作,是为了把所要读的数据的存储地址先写进去,告诉 EEPROM 我们要读取哪个地址的数据。这就如同我们打电话,先拨总机号码(EEPROM 器件地址),而后还要继续拨分机号码(数据地址),而拨分机号码这个动作,主机仍然是发送方,方向依然是“写”。

第二步,发送要读取的数据的地址,注意是地址而非存在EEPROM 中的数据,通知EEPROM 我要哪个分机的信息。
第三步,重新发送 I2C 起始信号和器件地址,并且在方向位选择“读”操作。
这三步当中,每一个字节实际上都是在“写”,所以每一个字节EEPROM 都会回应一个“应答位 0”。

第四步,读取从器件发回的数据,读一个字节,如果还想继续读下一个字节,就发送一个“应答位ACK(0)”,如果不想读了,告诉 EEPROM,我不想要数据了,别再发数据了,那就发送一个“非应答位NAK(1)”。

和写操作规则一样,我们每读一个字节,地址会自动加 1,那如果我们想继续往下读,给EEPROM 一个 ACK(0)低电平,那再继续给 SCL 完整的时序,EEPROM 会继续往外送数据。如果我们不想读了,要告诉 EEPROM 不要数据了,那我们直接给一个NAK(1)高电平即可。这个地方大家要从逻辑上理解透彻,不能简单的靠死记硬背了,一定要理解明白。梳理一下几个要点: A、在本例中单片机是主机,24C02 是从机; B、无论是读是写, SCL 始终都是由主机控制的; C、写的时候应答信号由从机给出,表示从机是否正确接收了数据; D、读的时候应答信号则由主机给出,表示是否继续读下去。

 

#include <reg52.h>extern void I2CStart();
extern void I2CStop();
extern unsigned char I2CReadACK();
extern unsigned char I2CReadNAK();
extern bit I2CWrite(unsigned char dat);/* E2读取函数,buf-数据接收指针,addr-E2中的起始地址,len-读取长度 */
void E2Read(unsigned char *buf, unsigned char addr, unsigned char len)
{do                         //用寻址操作查询当前是否可进行读写操作{I2CStart();if(I2CWrite(0x50 << 1)) //应答则跳出循环,非应答则进行下一次查询{break;}I2CStop();}while(1);I2CWrite(addr);            //写入起始地址I2CStart();                //发送重复启动信号I2CWrite((0x50 << 1) | 0x01); //寻址器件,后续为读操作while (len > 1)           //连续读取len-1个字节{*buf++ = I2CReadACK(); //最后字节之前为读取操作+应答len--;}*buf = I2CReadNAK();      //最后一个字节为读取操作+非应答I2CStop();
}
/* E2写入函数,buf-源数据指针,addr-E2中的起始地址,len-写入长度 */
void E2Write(unsigned char *buf, unsigned char addr, unsigned char len)
{while (len > 0){//等待上次写入操作完成do                        //用寻址操作查询当前是否可进行读写操作{I2CStart();if(I2CWrite(0x50 << 1)) //应答则跳出循环,非应答则进行下一次查询{break;}I2CStop();}while(1);//按页写模式连续写入字节I2CWrite(addr);           //写入起始地址while(len > 0){I2CWrite(*buf++);     //写入一个字节数据len--;                //待写入长度计数递减addr++;               //E2地址递增if ((addr & 0x07) == 0) //检查地址是否到达页边界,24C02每页8字节,{//所以检测低3位是否为零即可break;            //到达页边界时,跳出循环,结束本次写操作}}I2CStop();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466963.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十二星座职业成功忠告

十二星座职业成功忠告<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />白羊座行船争解缆&#xff0c;成功要行先。白羊座的人一定要做第一&#xff0c;所以切忌冲动&#xff0c;最宜采取突击手法&#xff0c;促使成功&#xff01…

Sublime text3 代码格式化插件vue

同事用的windows的sublime轻量级容易上手.我们现在强制eslint规范.我们就需要安装这个格式化代码的插件"html-css-js-prettify" 使用 Sublime text 3 格式化HTML代码&#xff0c;需要安装插件&#xff0c;具体安装步骤如下&#xff1a; 1. 打开菜单 -> 首选项(Per…

从中工毕业到年薪30万,我用了2年9个月

1夜色如潮水一般淹没了这座城市。我蹲在阳台&#xff0c;问我的死党&#xff0c;你说我的第一篇文章&#xff0c;起个什么样的标题才足够吸引人&#xff0c;让人想点开看看呢&#xff1f;死党从床上的帘子里探出头来说&#xff0c;UC震惊部啊&#xff0c;屡试不爽&#xff0c;况…

51单片机——LCD1602

单片机——1602液晶 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 1、1602液晶读写时序 &#xff08;1&#xff09;、读状态 RSL&#xff0c;R/WH&#xff0c;EH。(判断忙完毕后释放总线) &#xff08;2&#xff09;、读数据 RSH&#xff0c;R/WH&a…

什么时候需要好教材和好教材是怎样的

入门的时候最需要好教材。入门之后&#xff0c;怎样提高自己心里已经有了个底&#xff0c;直到怎样去做就能提高。教材可以为我所用&#xff0c;而不是依赖于教材。这时候&#xff0c;即使是一本不太好的教材&#xff0c;也知道如何取舍&#xff0c;不会被教材左右&#xff0c;…

recovery模式下支持ADB连接和串口操作

前言Android平台下我们有时候会进入recovery下做一些操作&#xff0c;不管是通过ADB连接还是通过串口操作&#xff0c;都需要你的平台支持&#xff0c;不支持的话可以按照我们这篇文章进行修改。正文ADB连接进入recovery后&#xff0c;我通过ADB连接会有如下报错exec "/sy…

Get busy living or get busy dying

好久不看大片了&#xff0c;今天花了一些时间仔细看了一遍《肖申克的救赎》&#xff0c;应该是很仔细的看了一遍&#xff0c;这个影片真的震撼心灵&#xff0c;“Get busy living or get busy dying.”&#xff08;忙着活&#xff0c;还是忙着死&#xff09;是安迪最重要的一句…

买房这件小事

终于有时间再来讨论这个问题&#xff0c;可能因为在深圳&#xff0c;每次说这个问题时都挺热闹的。— — 为什么想买房&#xff1f;人很奇怪&#xff0c;也很自知&#xff0c;我在上学的时候从来没有过这样大胆的想法。后来突然想买房&#xff0c;一个原因是自己有钱了&#xf…

linux相关命令介绍

1&#xff0c;查看centos版本&#xff1a;cat /etc/redhat-releaseCentOS Linux release 7.3.1611 (Core) 2&#xff0c;在171服务器上登录GREENPLUM数仓&#xff1a;[rootmdw ~]# su - gpadmin ---切换到gpaadmin用户登录[gpadminmdw ~]$ psql -d create_dw_dev --登录POSTGR…

asp.NET自定义服务器控件内部细节系列教程一

如大家要转载&#xff0c;请保留本人的版权:/* *Description:asp.NET自定义服务器控件内部细节系列教程*Auther:崇崇-天真的好蓝 *MSN:chongchong2008msn.com *Dates:2007-05-20*Copyright:ChongChong2008 YiChang HuBei China */关于自定义asp.NET自定义服务器控件文章和源码示…

51单片机——DS18B20

单片机——DS18B20 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 DS18B20——温度传感器&#xff0c;单片机可以通过 1-Wire 和 DS18B20 进行通 信&#xff0c;最终将温度读出。1-Wire 总线的硬件接口很简单&#xff0c;只需要把 18B20 的数据引脚和单…

房价是不是泡沫?

日本买房这件小事记&#xff0c;我在深圳买房继上一篇文章之后&#xff0c;有人说我没有了解中国房地产的历史&#xff0c;就公然写房产的文章。确实&#xff0c;我没有去搜刮很多历史的数据和文章来佐证&#xff0c;也没有引用什么大家之谈&#xff0c;很多都是自己经历的一些…

用Metasploit破解ftp用户名和密码

Metasploit是渗透测试人员在世界各地的资源和工具&#xff0c;比较常用的命令&#xff1a; msfconsole——直接进入 show options——查看 set RHOSTS ip地址/段 use 路径 需要在虚拟机的2003版本下创建FTP服务 将字典密码文件加入到虚拟机的系统里边 命令 ——rz 查看ftp是…

Gulp-静态网页模块化

前言&#xff1a; 在做纯静态页面开发的过程中&#xff0c;难免会遇到一些的尴尬问题。比如&#xff1a;整套代码有50个页面&#xff0c;其中有40个页面顶部和底部模块相同。那么同样的两段代码我们复制了40遍&#xff08;最难受的方法&#xff09;。然后&#xff0c;这个问题就…

PWM实现语音播放原理

采用PWM进行播放语音原理1.概述2.声音原理3.DAC产生声音的原理是什么4.PWM又是如何实现的DAC的5.PWM的频率与底噪的关系6.PWM音乐曲目解析7.后续1.概述大多数微控制器上播放音频都是采用DAC进行输出&#xff0c;因为微控制器上都不会去带CODEC编解码芯片&#xff0c;但是DAC不是…

在web.config里注册HttpModule

<add name"随便命名" type"HttpModule命名空间加类名,dll文件名" /> 转载于:https://www.cnblogs.com/tinsuki/archive/2007/09/10/888276.html

51单片机——SPI

单片机——SPI总线 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 UART、 I2C 和 SPI 是单片机系统中最常用的三种通信协议。 1、初步介绍 SPI 是一种高速的、全双工、同步通信总线&#xff0c;标准的 SPI 也仅仅使用 4 个引脚&#xff0c;常用于单片…

CTF 这个看起来有点简单

这个看起来有点简单分值&#xff1a;10 来源&#xff1a; 西普学院难度&#xff1a;易 很明显。过年过节不送礼&#xff0c;送礼就送这个 格式&#xff1a; 解题链接&#xff1a; http://ctf5.shiyanbar.com/8/index.php?id1 解法&#xff1a; 1.手工注入 id1 id1 and 11 id…

操作系统,你搞定了没?

#书籍赠送操作系统一直是比较难学的知识&#xff0c;要学好操作系统的相关内容&#xff0c;需要对硬件、软件、宏观、微观、有非常深刻的理解&#xff0c;而能找到一本讲解比较好的书籍也是非常难得的&#xff0c;恰好&#xff0c;最近有出版社的朋友推荐了这样的一本书籍&…

自学python前戏

为什么需要学python&#xff1f; 一直有这个打算&#xff0c;但总是没有下决心开始。 听说python语言结构简洁优美&#xff0c;功能性强大&#xff0c;可移植性高&#xff0c;各大网站都在用python开发。学习python的想法再一次涌上心头。未来10年到底哪种语言会独领风骚&#…