第10章 单片机应用系统存储器扩展_第1页
第10章 单片机应用系统存储器扩展_第2页
第10章 单片机应用系统存储器扩展_第3页
第10章 单片机应用系统存储器扩展_第4页
第10章 单片机应用系统存储器扩展_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第1010章章 单片机应用存储器扩展单片机应用存储器扩展 10.1 系统资源扩展方法 10.2 程序存储器扩展 10.2.1 程序存储器扩展方法 10.2.2 程序存储器扩展举例 10.3 数据存储器扩展 10.3.1 数据存储器扩展方法 10.3.2 数据存储器扩展举例 10.4 串行程序存储器扩展 10.4.1 I2C串行总线标准 10.4.2 串行程序存储器扩展举例 10.5 全自动洗衣机控制器存储器扩展Proteus 仿真 10.1 10.1 系统资源扩展的方法系统资源扩展的方法 1. 1. 最小系统最小系统 2 2系统扩展的内容系统扩展的内容 单片机应用系统的扩展一般包括以下几 方

2、面的内容: 外部程序存储器的扩展; 外部数据存储器的扩展; 输入/输出接口的扩展; 管理功能器件的扩展(如定时器/计数器、 中断控制器等)。 3. 系统扩展的基本方法 系统扩展时,常把单片机的外部引线分为三组总线: 数据线、地址线、控制线。系统扩展就是将需要的外 部资源挂接到这三组总线上,使其能够与CPU正确 通信,完成数据交换。此即总线扩展法。 按照数据传送的方式,扩展可以分为并行扩展和串行 扩展。并行总线扩展的一般连接方法如图9-2所示。 地址总线地址总线 数据总线数据总线 控制总线控制总线 MOVX指令访问端口(写)的时序 要点:P0分时输出低8位地址和8位数据; 写端口时WR(P3.6

3、)引脚自动产生负脉冲信号 MOVX指令访问端口(读)的时序 要点:P0分时输出低8位地址和8位数据; 写端口时RD(P3.7)引脚自动产生负脉冲信号 (1)数据总线(DB):数据总线用于单片机与存储器或 I/O口的数据传送。由P0口提供。通常将P0口与外扩芯片的 数据总线直接相连作为数据线。若所选存储器芯片字长与单 片机字长一致,则只需扩展容量。扩展存储器时,所需存储 器芯片数目按下式确定: 存储器芯片容量 系统扩展容量 芯片数目 存储器芯片字长 系统字长 存储器芯片容量 系统扩展容量 芯片数目 若所选存储器芯片字长与单片机字长不一致,则不仅需扩 展容量,还需字扩展,所需芯片数目按下式确定:

4、(2)地址总线(AB):地址信号用于寻 址存储单元或I/O端口。由P0口和P2 口共同提供。由于P0口是分时复用传 送地址和数据信息,所以当P0口传送 地址信息时,由ALE信号控制经 74LS373地址锁存器锁存后输出低8位 地址A0A7,与P2口输出的高8位地 址组成16位地址总线。 (3)控制总线(CB):控制总线用于协调控制数据信息 和地址信息的正确传送。主要有以下几个: ALE:地址锁存控制。ALE的下降沿控制锁存器锁存 P0口输出的低8位地址。与扩展芯片的锁存器控制端 相连。 PSEN:程序存储器ROM的读控制信号。执行程序存 储器读指令MOVC时,该信号有效。与程序存储器输 出使能

5、端相连。 EA:程序存储器选择。0:片外程序存储器;1:从 片内程序存储器开始访问。 RD, WR:片外数据存储器的读写控制。执行片外数 据存储器读写指令MOVX时,信号有效。分别与扩展 芯片的输出使能和写使能线相连。 外扩芯片的选通线由单片机多余的高位地址线直接选 通或经地址译码器译码后选通。 4. 系统扩展中的地址译码技术 线选法 部分译码法 全译码法 片选信号的形成方式一般有如下三种: 单片机系统扩展时,通常把地址线分为片内地址 和片外地址两部分。片内地址是指为了寻址存储器芯 片或I/O接口芯片片内单元所需要的地址线。一般为地 址总线的低位。除了片内地址总线外,剩余的地址线 称为片外地址

6、线,一般为地址总线的高位。地址译码 是指把高位地址线译码后用于控制芯片的片选信号。 线选法:先将扩展芯片的地址线与单片机的地址总线从 低位开始顺次相连后,剩余的高位地址线的一根或几根 直接连接到各扩展芯片的片选线上,如图9-3所示。 二进制表示16进制 表示 无关位片外地址线片内地址线 A15 A14 A13 A12 A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 芯 片 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 F000H . . . . . . . . . . . . . . . . 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1

7、 1 F7FFH 芯 片 1 1 1 0 10 0 0 0 0 0 0 0 0 0 0 E800H . . . . . . . . . . . . . . . 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 EFFFH 芯 片 III 1 1 0 1 10 0 0 0 0 0 0 0 0 0 0 D800H . . . . . . . . . . . . . . . . 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 DFFFH 表9-1 线选法三片存储器芯片地址分配表 部分译码法 二进制表示16进制表 示 无关位片外地址线片内地址线 A15A14 A13 A1

8、2 A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 芯 片 1 /0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8000H . . . . . . . . . . . . . 1 /0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 87FFH 芯 片 1 /0 0 0 0 10 0 0 0 0 0 0 0 0 0 0 8800H . . . . . . . . . . . . . 1 /0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 8FFFH 芯 片 III 1 /0 0 0 1 00 0 0 0 0 0 0 0 0

9、0 0 9000H . . . . . . . . . . . . . 1 /0 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 97FFH 电路地址分配表 全译码:将A15连接到G1端 二进制表示16进制表 示 无关位片外地址线片内地址线 A15A14 A13 A12 A11A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 芯 片 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8000H . . . . . . . . . . . . . 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 87FFH 芯 片 1 0 0 0 10

10、0 0 0 0 0 0 0 0 0 0 8800H . . . . . . . . . . . . . 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 8FFFH 芯 片 III 1 0 0 1 00 0 0 0 0 0 0 0 0 0 0 9000H . . . . . . . . . . . . . 1 0 0 1 0 1 1 1 1 1 1 1 1 1 1 1 97FFH A15=1时,电路地址分配表 10.2 10.2 程序存储器扩展程序存储器扩展 单片机片内的程序存储器可分为ROM、EPROM、EEPROM、 Flash ROM等几种。当片内程序存储器容量不能满足要求

11、时, 需进行程序存储器扩展。扩展时要注意以下几点: 片外程序存储器有单独的地址编号(0000HFFFFH),可寻 址64KB范围。虽然与数据存储器地址重叠,但不会冲突。因为 使用的指令不同。程序存储器与数据存储器共用地址总线和数据 总线。 对片内有ROM的单片机,片内ROM与片外ROM采用相同的操 作指令,片内与片外程序存储器的选择由 控制 , 为高电 平选择片内, 为低电平选择片外。 程序存储器使用单独的控制信号和指令。读取由 控制, 读取数据用MOVC指令。 片外数据存储器的读写由 、 信号控制,用MOVX指令访 问。 RD EAEA EA WR PSEN 10.2.1 程序存储器扩展方法

12、 1. 程序存储器扩展的一般方法 访问外部程序存储器时序 2. 访问外部程序存储器的时序 EPROM芯片种类繁多,2716是其中容量较小的一 款,有24个引脚,如图9-7。3根电源线(VCC、 Vpp、GND)、11根地址线(A0A10)、8根数据 输出线(O0O7),其它两根为片选端和输出允许 端。Vpp为编程电源端,在正常工作(读)时,也接 到+5V。大容量的EPROM芯片有2732、2764、 27128、27256,它们的引脚功能与2716类似。图9- 7中列出了它们的引脚分布。 10.2.2 程序存储器扩展举例 1EPROM程序存储器扩展 10.2.2 程序存储器扩展举例 【例10-

13、1】 试在8051的最小系统上扩展一片EPROM 2764。 (1)线选法的单片程序存储器的扩展 上图所示电路的8个重叠的地址范围为: 00000000000000000001111111111111,即0000H1FFFH; 00100000000000000011111111111111,即2000H3FFFH; 01000000000000000101111111111111,即4000H5FFFH; 01100000000000000111111111111111,即6000H7FFFH; 10000000000000001001111111111111,即8000H9FFFH; 10

14、100000000000001011111111111111,即A000HBFFFH; 11000000000000001101111111111111,即C000HDFFFH; 11100000000000001111111111111111,即E000HFFFFH。 【例10-2】线选法多片程序存储器扩展:用两片 2764扩展16 KB的程序存储器。 (2)线选法的多片程序存储器扩展 因两根线(A13、A14)未用,故两个芯片各有22=4个重 叠的地址空间。 重叠的地址范围如下: 芯片1: 000000000000000000001111111111111,即0000H1FFFH; 001

15、000000000000000011111111111111,即2000H3FFFH; 010000000000000000101111111111111,即4000H5FFFH; 011000000000000000111111111111111,即6000H7FFFH; 芯片2: 100000000000000001001111111111111,即8000H9FFFH; 101000000000000001011111111111111,即A000HBFFFH; 110000000000000001101111111111111,即C000HDFFFH; 1110000000000000

16、01111111111111111,即E000HFFFFH。 【例10-3】用2764芯片扩展8031的片外程序存储器,地址范围 为0000H3FFFH。 本例要求的地址空间是唯一确定的,所以要采用全译码方 法。由分配的地址范围知:扩展的容量为3FFFH0000H+1 =4000H =16KB,2764为8 K8位,故需要两片。第1片的地 址范围应为0000H1FFFH,可见,A15A14A13为000;第2片 的地址范围应为2000H3FFFH,可见,A15A14A13为001。 地址关系如表9-3所示: (3)地址译码法的多片程序存储器扩展 P2.7P2.6P2.5P2. 4 P2.3P2

17、.2P2. 1 P2. 0 P0. 7 P0. 6 P0. 5 P0. 4 P0. 3 P0. 2 P0. 1 P0. 0 A15A14A13A1 2 A11A10A9A8A7A6A5A4A3A2A1A0 0 0 0 0 0 1 2E2PROM 扩展 CEOEWE 表 10-4 E2PROM的工作方式 方 式 控 制 脚 I/O0I/O7 读 出LLH输出信息 写 入LHL数据输入 维 持H高 阻 禁 止 写H 2864A提供了两种数据写入操作方式, 字节写入和页面 写入。字节写入每次只写入一个字节,而且需要查询方式判 断写入是否已经结束。页面写入方式是为了提高写入速度而 设置的。 E2PRO

18、M的工作方式主要有读出、写入、维持三种。 E2PROM即可作ROM使用,也可作RAM使用。如果将E2PROM 同时用作片外ROM和片外RAM用,连接方法如图所示。 10.3 10.3 数据存储器扩展数据存储器扩展 外部数据存储器通常设置二个数据区: (1)低8位地址线寻址的外部数据区。此区域寻址空间为256 个字节。CPU可以使用下列读写指令来访问此存贮区。 读存储器数据指令:MOVX A, Ri 写存储器数据指令:MOVX Ri, A 注意:这种情况下对外部RAM进行操作需将P2口全部清零。 (2)16位地址线寻址的外部数据区。当外部RAM容量较大, 要访问RAM地址空间大于256个字节时,

19、则要采用如下16位 寻址指令。 读存储器数据指令:MOVX A, DPTR 写存储器数据指令:MOVX DPTR, A 由于DPTR为16位的地址指针,故可寻址64K 字节单元 10.3.2 数据存储器扩展举例 1 1线选法的单片数据存储器扩展线选法的单片数据存储器扩展 2.两片数据存储器的扩展两片数据存储器的扩展 【例10-4】 采用2114芯片在8031片外扩展1 KB数据存储器。 3 3多片数据存储器扩展多片数据存储器扩展 10.3.4 10.3.4 同时扩展同时扩展ROMROM和和RAMRAM 10.4 10.4 串行程序存储器扩展串行程序存储器扩展 1-wire:数据线只有1根,可实

20、现半双工通信。 为Dallas 公司的专利 I2C:Philips公司提出,用于板内芯片级通信 SPI:Motorola 公司推行的串行通信协议,其精简 接口为Microwire 。 I2C(Inter-Integrated Circuit)是飞利浦公司于二 十世纪80年代初期推出的一种“芯片互联”串行总 线标准,起初设计的最高传送速率为100kbps,主要 用于低带宽、短距离的板内芯片通信。目前,I2C总 线的理论最高传输速率可达到3.4Mbps,且通信范围 也早已不仅仅局限在板内。 图9-21 I2C总线设备连接电路 10.4.1 I10.4.1 I2 2C C串行总线标准串行总线标准 开

21、始及停止信号的定义 图9-22 I2C总线起停信号定义 I2C总线上只有主设备可以发起数据传输,由于I2C总线上允许 多个主设备共存,故某一个主设备能够发起与从设备间的通信 的前提条件是总线当前处于空闲状态,从而主设备可以获得总 线控制权。为了获取总线控制权,主设备需要向总线发送一个 启动信号来通知总线上其他设备其对总线的征用。同理通信结 束时,主设备还需要发送一个结束信号来释放总线。I2C对启动 信号的定义为当SCL处于高电平时,SDA出现一个下降沿;停 止信号则是当SCL处于高电平时,SDA出现一个上升沿。I2C 的启停信号如图9-22所示。 I2C总线上主设备发送起始信号启动发送过程后,

22、还 需要发送一个控制字节来初始化从设备的地址及读写 操作。 控制字节的定义如图9-23所示,高4位数据为设备类 型号,例如EEPROM的设备类型号为1010。紧接着 3位数据为从设备的地址,这三位数据的值由从设备 相应的引脚电平来确定。最低位为读写标志,当该位 为1时,表示主设备对从设备进行读数据操作,当该 位为0时,表示向从设备写入数据。 应答信号 I2C总线传送数据时,设备需要对每一个接受到的字 节进行应答,具体表现为应答设备在第9个时钟周期 将SDA线下拉到低电平,即产生一个应答信号 (ACK)。对于主设备发起的写操作而言,从设备 每接受完一个字节后向总线发送一个ACK。反之, 主设备进

23、行读操作时,在收到从设备过来的一个字节 的数据后由主设备发送一个ACK应答从设备,当收 到从设备发过来的最后一个数据后,主设备发送一个 非应答信号(NOACK),然后结束。 图9-24 I2C写数据时序图 I2C总线上一次完整的写数据时序如图9-24所示, 在向总线发送起动信号取得总线使用权之后,主设 备发送一个控制字节,与控制字中地址相同的从设 备在收到控制字后向总线发送一个ACK应答完成握 手。随后主设备向从设备写数据,从设备对收到的 每个字节都进行应答,直至主设备发送完全部数据 向总线发出停止信号。 I2C总线上的一次读数据时序如图9-25所示,首先,由 主设备向从设备发送一个读控制字节

24、(R/W位置0)并对其 想读取的地址进行一次写操作,从设备应答后,主设备应 答控制信号(R/W位置1),开始接收由从设备发送过来的 数据,主设备对收到的每个字节都进行应答,当收到最后 一字节数据后,主设备不做应答,向总线发送一个非应答 信号,然后向总线发出停止信号。 图9-25 I2C读数据时序图 10.4.2 串行程序存储器扩展举例 典型的MCS-51并不包含专用的I2C接口,但可以通 过并行口线模拟,方便地扩展支持I2C总线的程序存 储器。常见的支持I2C总线的程序存储器有ATMEL 公司的AT24XX系列E2PROM和RAMTRON公司的 FM24XX系列FRAM等。由于均采用了I2C总

25、线标准, 无论采用哪种类型的芯片作为程序存储器,扩展方法 均无太大区别。 图10-26为MCS-51扩展AT24C02 E2PROM的参考硬件电路。 图10-26 MCS-51扩展AT24C02 E2PROM硬件电路图 WPWP为写数据保护脚,当该引脚为高电平时,为写数据保护脚,当该引脚为高电平时,EEPROMEEPROM处于写处于写 保护模式,该模式下数据只能从保护模式,该模式下数据只能从EEPROMEEPROM内读出,写入无效;内读出,写入无效; 在电路中,在电路中,WPWP接地,表示单片机可对接地,表示单片机可对EEPROMEEPROM进行读写操作进行读写操作。 A0A0、A1A1、A2

26、A2三个管脚共同构成三个管脚共同构成EEPROMEEPROM的地址选通线,通过的地址选通线,通过 这三个引脚不同的电平组合可以构成八个不同的从设备地址这三个引脚不同的电平组合可以构成八个不同的从设备地址 SDASDA为串行数据线(为串行数据线(Serial Data LineSerial Data Line) SCL SCL为串行时钟线(为串行时钟线(Serial ClockSerial Clock) VCC VCC接电源正极;接电源正极; GND GND接地接地 1 1AT24C02AT24C02芯片及连线说明芯片及连线说明 2 2扩展扩展ROMROM地址确定地址确定 A0、A1、A2三个管

27、脚共同构成EEPROM的地址选 通线,通过这三个引脚不同的电平组合可以构成八个 不同的从设备地址,如表9-6所示,在通信时,作为 主设备的单片机通过控制字节中的相应位来选通对应 地址的EEPROM芯片进行通信。也就是说,在I2C 总线上,最多可扩展8片AT24C02。 3. 3. 内部地址结构内部地址结构 AT24C02内部分为32页,每页有8字节,由此构成32 (页)8(字节)8(位)=2048位的存储空间。作 为主设备的单片机对从设备AT24C02的写操作,可以 按字节写入也可以按页面写入。而对于读操作,除了由 当前单元地址读取和按页面读取外,还可以由指定随机 地址读取数据,在随机地址读取

28、操作中,单片机先向总 线发送包含AT24C02从设备地址的控制字,确认 AT24C02应答后,再进行一次写操作,将要读取的8位 单元地址发送给AT24C02。第二次收到应答后,单片 机才开始由AT24C02中被指定的单元读出数据。 4. 4. 编程应用编程应用 【例10-6】单片机从AT24C02将地址为10H17H的8个 单元的内容读出,各字节数据加1后再写入AT24C02的原 地址。 ; _PROM_ I2CASM.ASM I2C EEPROM 读写程序示例 ; 晶振频率 12MHz ;不同频率工作的单片机可调整NOP指令的数量来改变延时 ;时间 ;-定义位变量- SCL BIT P1.2

29、 ;定义P1.2为SDA SDA BIT P1.3 ;定义P1.3为SCL ACK BIT F0 ;定义F0为ACK应答标志位 参考汇编程序 ;-定义字节变量- BTD EQU 30H ;定义发送数据缓冲区 ;(30H3FH)首地址 BRD EQU 40H ;定义接收数据缓冲区 ;(40H4FH)首地址 SLA EQU 10100000B ;设备控制字(设备类型+ ;从设备地址+读写位) SUBA DATA 50H ;ROM 单元地址 ;存放在 50H RAM单元 BYTNUM DATA 51H ;要发送的字节数 ;存放在 51H RAM单元 ORG 0000H AJMP MAIN ;转入执行

30、主程序 ;- ;主程序 ORG 0040H MAIN: MOV SP,#60H ;更改堆栈区 MOV SUBA,#10H ;AT24C02的单元地址送 SUBA MOV BYTNUM,#08H ;字节数赋给BYTNUM MOV R0,#30H ;缓冲区首地址赋值,默认使用第0 组工作寄存器 MOV R1,#40H ; SETB SDA ;总线初始化 SETB SCL LCALL DELAY LCALL RDNBYTE ;从AT24C02中连续读出SUBA 为首地址的8字节数据 MOV R4,BYTNUM ;字节数暂存于R4,用于定循环次 数 NUMINC:MOV A,R1 ;将读出的数据送AC

31、C INC A ;(ACC)=(ACC)+1 MOV R0,A ;结果保存至发送缓冲区 DJNZ R4,NUMINC ;全部字节未处理完毕则继续下 一字节 LCALL DELAY ;延时 LCALL WRNBYTE ;将发送缓冲区的8字节数据写入 AT24C02 SJMP $ ;结束,原地循环 ;-下列为I2C总线读写控制子程序- ;START - 发送启动信号 ;STOP - 发送结束信号 ;MACK - 发送应答信号 ;MNOACK - 发送非应答信号 ;WR1BYTE - 写一字节数据 ;RD1BYTE - 读一字节数据 ;WRNBYTE - 写n字节数据 ;RDNBYTE - 读n字节

32、数据 ;CWRBYTE - 设备当前地址写字节 ;CRDBYTE - 设备当前地址读字节 ;DELAY - 延时 ;- ;向总线发送启动信号子程序 START: SETB SDA ;SDA引脚置高电平 SETB SCL ;SCL引脚置高电平 ACALL DELAY47 ;延时4.7us以上 CLR SDA ;SDA引脚置低电平 ACALL DELAY4 ;延时4us以上 CLR SCL ;SCL引脚置低电平 NOP RET ;返回 ;向总线发送结束信号子程序 STOP: CLR SDA ;SDA引脚置低电平 SETB SCL ;SCL引脚置高电平 ACALL DELAY47 ;延时4.7us以

33、上 SETB SDA ;SDA引脚置高电平 ACALL DELAY47 ;延时4.7us以上 CLR SCL ;SCL引脚置低电平 NOP RET ;返回 ;发送应答信号子程序 MACK: CLR SDA ;SDA引脚置低电平 SETB SCL ;SCL引脚置高电平 ACALL DELAY47;延时4.7us以上 CLR SCL ;SCL引脚置低电平 NOP SETB SDA ;SDA引脚置高电平 RET ;返回 ;发送非应答信号子程序 MNOACK:SETB SDA ;SDA引脚置高电平 SETB SCL ;SCL引脚置高电平 ACALL DELAY47;延时4.7us以上 CLR SCL

34、;SCL引脚置低电平 NOP CLR SDA ;SDA引脚置低电平 RET ;返回 ;应答位检测子程序(ACK=0 无应答;ACK=1 收到应答) CHKACK:SETB SDA ;SDA引脚置高电平 SETB SCL ;SCL引脚置高电平 CLR ACK ;应答标志位清零 NOP ;延时 NOP JNB SDA,CHKEND ;如果SDA电平无变化,说明没 ;收到应答信号结束检查 SETB ACK ;SDA电平被拉低,则应答标志位置1 CHKEND:NOP CLR SCL ;SCL引脚置低电平 ACALL DELAY4 ;延时 RET ;返回 ;写一字节数据子函数 WR1BYTE:MOV R

35、0,#08H ;8位数据,分8次送总线 WLP: RLC A ;将数据最高位放入C MOV SDA,C ;将位数据送至SDA SETB SCL ;SCL置1 ACALL DELAY47;延时4.7us以上 CLR SCL ;SCL置0 DJNZ R0,WLP ;8位数据未送完继续下一位 NOP ;8位数据全部送完,则返回 RET ;写数据到当前地址子函数 CWRBYTE: PUSH ACC ;ACC值暂存至堆栈区 CWRLOOP: LCALL ;发送启动信号 MOV A,SLA ;读入当前设备地址 LCALL WR1BYTE ;写1字节控制指令 LCALL CHKACK ;检查从设备是否应答

36、JNB ACK,RETCWR ;如果没应答则返回主程序 POP ACC ;如果收到应答,恢复ACC值 LCALL WR1BYTE ;将ACC的内容写入从设备 LCALL CHKACK ;检查从设备是否应答 LCALL STOP ;发送结束信号 RET ;返回主程序 RETCWR: POP ACC ;恢复ACC的值 LCALL STOP ;发送结束信号 RET ;返回 ;写N字节数据子函数 WRNBYTE: PUSH PS ;将PSW内容推栈保存 SETB PSW.4 ;选用第3组工作寄存器 ;(18H1FH) SETB PSW.3 MOV R3,BYTNUM ;R3用于字节数控制 LCALL

37、START ;发送启动信号 MOV A,SLA ;控制字送累加器 LCALL WR1BYTE ;写控制字节 LCALL CHKACK ;检查有无应答 JNB ACK,RETWRN ;如果从设备无应答 ;跳转至RETWRN返回 MOV A,SUBA ;收到应答信号,读入目标单元地址 LCALL WR1BYTE ;发送访问目标单元地址 LCALL CHKACK ;检查有无应答 MOV R1,#BTD ;将发送缓冲区首地址送R1 WRDA: MOV A,R1 ;将缓冲区数据送累加器ACC LCALL WR1BYTE ;向总线写一字节数据 LCALL CHKACK ;检测应答信号 JNB ACK,WR

38、NBYTE ;无应答则重新发送 INC R1 ;收到应答,表示一字节数据 ;已送至从设备,继续下一字节 DJNZ R3,WRDA ;未送完所有字节则继续 RETWRN: LCALL STOP ;所有字节数据发送完毕, ;发送停止信号 POP PSW ;恢复PSW内容(切换当前工作寄存器组) RET ;返回 ;读一字节数据子函数 RD1BYTE:MOV R0,#08H ;8位数据,分8次读取 RLP: SETB SDA ;SDA置高电平 SETB SCL ;SCL置高电平 NOP ;延时 NOP MOV C, SDA ;从SDA线上读入位数据 MOV A, R2 ;将上一次保存的中间结果恢复至

39、ACC CLR SCL ;SCL置低电平 RLC A ;将数据位存入ACC MOV R2,A ;中间结果保存至R2 ACALL DELAY4 ;延时4us以上 DJNZ R0,RLP ;8位未读取完毕则继续读下一位 NOP RET ;8位读取完毕返回,读入的1字节 ;数据保存在R2内。 ;由当前地址读数据子函数 CRDBYTE: LCALL START ;发送启动信号 MOV A,SLA ;控制字送ACC INC A ;R/W位置1 LCALL WR1BYTE ;向AT24C02送控制字 LCALL CHKACK ;检查AT24C02是否应答 JNB ACK,RETCRD ;如无应答,返回 L

40、CALL RD1BYTE ;收到应答,读取一字节数据 LCALL MNOACK ;发送非应答信号 RETCRD: LCALL STOP ;发送结束信号 RET ;返回 ;读N字节数据子函数 RDNBYTE: PUSH PSW ;将PSW内容推栈保 存 SETB PSW.4 ;选用第3组工作寄存器 SETB PSW.3 MOV R3,BYTNUM ;R3用于字节数控制 LCALL START ;发送启动信号 MOV A,SLA ;控制字送ACC LCALL WR1BYTE ;写控制字 LCALL CHKACK ;检查AT24C02有无应答 JNB ACK,RETRDN ;如果无应答,返回 MOV

41、 A,SUBA ;起始单元地址送ACC LCALL WR1BYTE ;发送单元地址 LCALL CHKACK ;检查AT24C02有无应答 JNB ACK,RETRDN ;如果无应答,返回 LCALL START ;重新发送启动信号 MOV A,SLA ;控制字送ACC INC A ;设置为读方式,R/W=1 LCALL WR1BYTE ;发送控制字 LCALL CHKACK ;检查AT24C02是否应答 JNB ACK,RDNBYTE ;如无应答,尝试重新连接 MOV R1,#BRD ;将接收缓冲区首地址送R1 RDN1: LCALL RD1BYTE ;读取一字节数据 MOV R1,A ;接

42、收到的数据放进缓冲区 DJNZ R3,SACK ;未读取完所有字节,继续读下一字节 LCALL MNOACK ;所有字节读取完成,发送非应答信号 RETRDN: LCALL STOP ;发送停止信号 POP PSW ;恢复寄存器组标志 RET ;返回 SACK: LCALL MACK ;发送应答信号 INC R1 ;指向缓冲区下一地址内容 SJMP RDN1 ;继续读下一字节读取 ;延时子函数 DELAY47: NOP ;延时时间4.7uS NOP NOP NOP RET ;- DELAY4: NOP ;延时时间4uS NOP NOP RET ;- DELAY: MOV R7,#04H ;延时

43、约4ms DEL1: MOV R6,#0FFH DEL2: NOP NOP DJNZ R6,DEL2 DJNZ R7,DEL1 RET ;返回 END 10.75Proteus 10.75Proteus 仿真实例仿真实例 【例10-9】通过80C51单片机对AT24C02进行读写操作, 当写按钮按下时,将外部8位数字量写入AT24C02中;当 读按钮按下时,从AT24C02内将该数字量读取出来,并 送LED显示。其中外部8位数字量由8位拨码开关控制其 各位的数值。 图10-28 Proteus仿真电路AT24C02读写 参考C程序 #include /包含头文件 #include #inclu

44、de #include #define uchar unsigned char #define uint unsigned int #define DELAY_TIME 60 /定义常量 #define TRUE 1 #define FALSE 0 sbit SCL=P10; /用P1.0、P1.1 模拟I2C 总线 sbit SDA=P11; sbit SDAT=P12; /用P1.2、P1.3 模拟串口 sbit SCLK=P13; sbit PSB=P14; /P1.4用于控制4014的P/S端 sbit LED0=P15; /P1.5,P1.6用作LED数码管的线选信号 sbit LE

45、D1=P16; sbit STB=P17; /P1.7与4094 STB引脚相连 sbit LEDDAT=P30; /单片机的串口用于扩展静态LED显示 sbit CLK=P31; sbit A0=ACC0; /定义A0为累加器的最低位 uchar LED_SEG17=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88, 0 x83,0 xc6,0 xa1,0 x86,0 x8e,0 xff ;/字段码表:字符0F,灭灯 /*输入模块子程序*/ uchar pdat_in() uchar counter; uchar data_buf; counter=8; do A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论