eeprom存储器和应用

上传人:今*** 文档编号:105885248 上传时间:2019-10-13 格式:PPT 页数:36 大小:1.17MB
返回 下载 相关 举报
eeprom存储器和应用_第1页
第1页 / 共36页
eeprom存储器和应用_第2页
第2页 / 共36页
eeprom存储器和应用_第3页
第3页 / 共36页
eeprom存储器和应用_第4页
第4页 / 共36页
eeprom存储器和应用_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《eeprom存储器和应用》由会员分享,可在线阅读,更多相关《eeprom存储器和应用(36页珍藏版)》请在金锄头文库上搜索。

1、附录B 串行EEPROM存储器及应用,一、二线制I2C总线CMOS 24系列串行EEPROM存储器,图 附B-1 DIP8封装的24系列串行EEPROM存储器,1. I2C总线特性 I2C总线协议是Philips公司开发的两线制(即串行时钟信号SCL和串行数据/地址线SDA)串行通讯接口,I2C协议主要特点如下: (1) 在I2C通讯协议中,通讯过程由产生SCL时钟信号的主器件(如微处理器)控制,即主器件除了产生作为读/写同步信号的SCL外,还发出“启动”和“停止”总线操作的控制信号。,(2) 在I2C总线协议中,允许总线上挂接多个从器件(如存储器),形成“一主多从”结构(采用总线仲裁方式后,

2、可允许同时存在多个主器件,不过在单片机系统中很少见,因此不介绍)。每个从器件均有惟一“从片地址”,主器件启动了 I2C总线后,所有从器件均处于接收状态,接收主器件发送来的地址信息(广播形式),并与自身的“从片地址”比较:如果相符,则通过SDA引脚回送低电平的“应答信号”;反之,不做任何响应。在7位地址格式中,从片地址由7位从片地址(最多可以连接128个从器件)和控制数据传输方向的读写标志位(R/W)组成。例如,采用I2C总线接口的EEPROM存储器的从片地址格式为1 0 1 0 A2 A1 A0,(3) 对于主器件来说,SCL引脚为输出,且漏极开路;对于从器件来说,SCL引脚为输入。SDA是漏

3、极开路的数据/地址输入/输出引脚。 (4) 在I2C总线协议中,把数据发送到SDA线的器件称为“发送器”,接收数据的器件称为“接收器”。例如,主器件(如CPU)把数据或从器件地址写入从器件(如存储器)时,主器件是发送器,从器件是接收器;当主器件读取从器件存储单元信息时,从器件是发送器,主器件是接收器。接收器收到发送器一个字节数据后,必须回送一个低电平的应答信号,否则发送器将停止发送数据。,图 附B-2 I2C总线操作时序,(5) I2C总线标准约定的时间参数。 在I2C总线标准中,对下列时间宽度有严格要求: 读写同步信号SCL高电平最小时间。 读写同步信号SCL低电平最小时间。 “停止”操作时

4、,SCL由低电平变为高电平(即SCL信号上升沿)到SDA变为高电平的最小时间。 “启动”操作时,SDA由高电平变为低电平(即SDA信号下降沿)到SCL变为低电平的最小时间。 以上时间不得小于4.7 s。 最大数据传输率,每秒传输的数据量不得超过100 Kbit,即同步信号SCL频率最大为100 kHz。,2. 二线制I2C总线24系列串行EEPROM存储器写入过程 二线制I2C总线24系列串行EEPROM存储器支持字节写入方式和页写入方式。 1) 字节写入方式 字节写入过程如下:启动给出芯片控制字节等待EEPROM芯片回送应答信号输出EEPROM存储单元地址字等待EEPROM芯片回送应答信号输

5、出写入存储单元的数据等待EEPROM芯片回送应答信号停止。,2) 页面写入 串行EEPROM存储器内部有页写入缓冲器(页写入缓冲器容量P的大小与芯片生产厂家、型号有关,如表附B-1所示),因此可以使用页面写入方式: 启动给出芯片控制字节等待EEPROM芯片回送应答信号输出EEPROM存储单元地址字(n)等待EEPROM芯片回送应答信号输出写入存储单元的数据(n)等待EEPROM芯片回送应答信号输出写入存储单元的数据(n+1)等待EEPROM芯片回送应答信号输出写入存储单元的数据(n+P)等待EEPROM芯片回送应答信号停止。,表 附 B-1,3) 写周期结束查询,图 附B-3,3. 读操作,1

6、) 立即地址读,图 附B-4 立即读操作,2) 读指定存储单元(字节读),图 附B-5 字节读操作,3) 连续读,图 附B-6 连续读操作,4. 串行EEPROM与MCS-51接口,图 附B-7 I2C总线存储器与MCS-51的连接,图 附B-8 I2C总线器件的连接,5. 用软件模拟在P1.0、P1.1引脚产生I2C总线定时信号参考程序 说明: ByteCnt DATA 30H ; I2C数据字节计数器 SlvAdr DATA 31H ; 从器件地址 SubAdr DATA 32H ; 待读写的从器件存储单元地址 RcvDat DATA 40H ; 接收数据缓冲区 XmtDat DATA 5

7、0H ; 发送数据缓冲区 ; 端口位定义 SDA BIT P1.1 ; 模拟I2C数据传送位 SCL BIT P1.0 ; 模拟I2C时钟控制状态标志 FHbit BIT 0F0H ; 发送及接收成功标志存放在0F0H位单元中 NOACK BIT 0F1H ; 读操作时主器件非应答标志位,1表示非应 答,0表示应答,1) 启动 ;“启动” I2C总线串行EEPROM子程序 START: CLR SCL NOP SETB SDA NOP SETB SCL NOP ; 插入空操作指令的数目由CPU时钟频率决定。SCL 高电平时间最小 ; 为0.6 s,当时钟频率为12 MHz时,NOP指令执行 时

8、间为一个机器周 ; 期(即1 s),可见插入一条NOP指令足够,NOP NOP NOP CLR SDA ; 在SCL为高电平时,使SDA由高电平变为低电 平,启动I2C总线 NOP NOP NOP NOP CLR SCL ; 将SCL时钟置为低电平,以便发送和接收 RET,2) 停止 ; “停止”I2C总线串行EEPROM子程序 STOP : CLR SCL NOP CLR SDA NOP SETB SCL NOP ; 插入空操作指令的数目由CPU时钟频率决定。 SCL高电平时间最小 ; 为0.6 s,当时钟频率为12 MHz时,NOP指 令执行时间为一个机器周 ; 期(即1 s),可见插入一

9、条NOP指令足够,NOP NOP NOP SETB SDA ; 在SCL为高电平时,使SDA由低电平变为高电平, 停止I2C总线 NOP NOP NOP NOP RET ; “停止”总线操作结束后,SCL、SDA均处于高电平状态,即总线处于空闲 状态,3) 字节写 ; 字节发送子程序。 ; 用于将控制(即从器件地址)字节或数据字节发送到从器件(串行EEPROM)中 ; 待发送字节信息存放在寄存器A中,返回标志存放在Fhbit(位地址)中,0表示成功,1 ; 表示失败(即从器件没有应答,发送失败) PROC SentByte SentByte: NOP MOV R7,#08H ; 初始化发送数据

10、位长度R7 SentLOOP: CLR SCL NOP ; 根据CPU时钟频率可以插入02条空操作指令 NOP RLC A ; 将Acc.7位移到进位标志C中,即先写高位 MOV SDA, C ; 将数据位发送到SDA引脚。由于写入时用SCL上升 沿同步,因此 ; 要先送数据后将SCL置高电平,SETB SCL ; 使时钟引脚为高电平 NOP ; 插入空操作 NOP DJNZ R7, SentLOOP ; R7减1不为0转移 NOP CLR SCL ; 当R7=0,则表示已发送Acc.0位,将SCL置低电平,形成发送Acc.0 ; 位的时钟脉冲 NOP ; 插入空操作指令,以便形成第9个SCL

11、脉冲,检测从器件回送的 ; 应答信号 NOP NOP SETB SDA ; 将与SDA引脚相连的I/O引脚锁存器位置1,使SDA引脚能作为输入 ; 引脚,以便检测从器件回送的应答信号(这一指令不能少,否则当 ; 发送的Acc.0位为0时,I/O引脚锁存器为0,结果输入信号总被钳位 ; 在低电平),SETB SCL ; 发应答信号检测脉冲 NOP NOP CLR FHbit ; 清除失败标志 JNB SDA, SeACK ; 如果SDA为低电平,则表示收到应答信号 SETB FHbit ; 否则将FHbit置1,表示发送失败 SeACK: NOP CLR SCL ; 将SCL置为低电平,结束应答

12、检测脉冲 RET END,4) 字节读 ; 字节接收子程序 ; 用于接收从器件(串行EEPROM)发送来的存储单元信息 ; 接收到字节数据存放在寄存器Acc中,根据应答标志ACK内容决定是否要发送应答信号 PROC ReceByte ReceByte: NOP MOV R7,#08H ; 初始化接收数据位长度R7 SETB SDA ; 在单字节(立即读或选择性读)读程序中,接收总是 ; 发生在写入从器件地址后,为了能检测到从回送的低电平应答信号,SDA已被置为输入状 ; 态,在接收子程序中,可以省去“SETB SDA”指令;但在连续读程序中,主器件每收到一 ; 个字节的数据后,向从器件发送一个

13、低电平的应答信号,这时SDA引脚对应的I/O锁存器 ; 处于输出状态,且输出低电平,因此不能省去该指令,ReceLOOP: CLR SCL NOP ; 根据CPU时钟频率可以插入04条空操作指令 NOP NOP NOP SETB SCL MOV C,SDA ; 读数据位 RLC A DJNZ R7,ReceLOOP NOP CLR SCL ; 当R7=0,则表示已接收到Acc.7位,将SCL置低电平, ; 形成接收Acc.7位的时钟脉冲,NOP ; 插入空操作指令,以便形成第9个 SCL脉冲,检测从 ; 器件回送的应答信号 NOP NOP CLR SDA ; 主器件准备送低应答信号 JNB N

14、OACK,SNOACK ; 如果接收数据非应答标志NOACK为0,要应答 SETB SDA ; 非应答标志有效(为1),改送高电平 的非应答信号 SNOACK: NOP NOP SETB SCL ; 将SCL置为高电平,发第9个SCL脉冲 NOP NOP NOP CLR SCL ; 将SCL置为低电平,以便接受数据 或发送停止信号 CLR NOACK ; 清除非应答标志 RET END,5) 多字节写数据发送子程序 ; -串行EEPROM、日历时钟读写子程序- ; 发送数据子程序 ; 名称:SendData ; 描述:发送ByteCnt 个字节给从器件,如I2C总线串行EEPROM ; 从器件

15、地址在SlvAdr 中,存储单元地址在SubAdr 中 ; 所发送数据的字节数在ByteCnt中,发送的数据在XmtDat 缓冲区中 ; 成功发送数据,FHbit标志为0; 当FHbit为1时表示从器件无应答或损坏 ; *,Proc SendData SendData: PUSH PSW PUSH ACC PUSH DPL PUSH DPH SETB RS0 SETB RS1 LCALL START ; 启动IC总线 MOV A ,SlvAdr ; 将从器件地址放累加器A中 LCALL SentByte ; 发送从器件总线地址 JB FHBIT,SenReturn ; 从器件不应答返回,MOV A,SubAdr ; 取存储单元地址 LCALL SentByte ; 发存储单元地址 JB FHbit,SenReturn ; 从器件不应答返回 MOV R0,#XmtDat ; 取发送数据缓冲区首址 SentNext: MOV A,R0 LCALL SentByte ; 发送一次数据 JB FHbit,SenReturn ; 出错返回 INC R0 ; 取下一个数据 DJNZ ByteCnt,SentNext ; 重复操作直到发送完最后一个数据 LCALL STOP ; 停止IC总线操作 ; *查询方式检测内部写入周期是否已完成*,LOOP: LCALL S

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号