430 likes | 597 Views
7.4 数据存储器的扩展. 7.4.1 并行传送外部数据存储器的扩展方法 单片机和数据存储器的连接方法与程序存储器的连接方法大致相同,主要区别在控制信号上。地址线、数据线均与程序存储器的连接方法一致。因为数据存储器既要读又要写,所以必须有控制读写的信号线。 图 7-7 是单片 SRAM6116(2 K×8 位 ) 的扩展连接图。. 图 7-7 AT89C51 与 6116 接口连接图. 7.4.2 串行传送数据存储器的扩展方法 1) 一般特性
E N D
7.4 数据存储器的扩展 • 7.4.1 并行传送外部数据存储器的扩展方法 • 单片机和数据存储器的连接方法与程序存储器的连接方法大致相同,主要区别在控制信号上。地址线、数据线均与程序存储器的连接方法一致。因为数据存储器既要读又要写,所以必须有控制读写的信号线。 • 图7-7是单片SRAM6116(2 K×8位)的扩展连接图。
7.4.2 串行传送数据存储器的扩展方法 • 1) 一般特性 • AT24C01是一种采用CMOS工艺制成的128×8位串行可电擦除的可编程只读存储器,自动擦除时间不超过10 ms,典型时间为5 ms。 • 2) 引脚图及说明 • AT24C01A引脚图见图7-8,各引脚功能如下: • (1) SCL:串行时钟端,用于对输入和输出数据的同步。 • (2) SDA:串行数据地址输入或输出端,串行双向数据输入、输出端。
(3) WP:写保护,硬件数据保护端接地时可对整个存储器进行正常读写,接电源时具有写保护功能。 • (4) A0、A1、A2:片选输入。 • (5) VCC:电源端,接+5 V电源。 • (6) VSS:接地端。
3) 芯片操作 • (1) 功能描述:AT24C01A支持I2C双向二线制串行总线及其传输规约。在串行EEPROM系统中,必须有一片可以产生串行时钟(SCL)的主器件控制,通常这个主器件就是单片机,控制其总线访问及产生“启动”和“停止”信号。 • (2) 总线特性:I2C双向二线制串行总线协议定义只有在总线处于“非忙”状态时,数据传输才能被初始化。
① A段:总线非忙状态,在此期间SDA、SCL都保持高电平。 • ② B段:启动数据传输,当SCL为高电平时,SDA由高电平变为低电平的下降沿被认为是“启动”信号,只有出现了启动信号后,其他命令才有效。 • ③ C段:停止数据传输,当SCL为高电平时,SDA低电平的上升沿被认为是“停止”信号。 • ④ D段:数据有效,在出现“启动”信号以后,SCL为高电平且数据线稳定,这时数据线的状态表示要传送的数据。
(3) 芯片寻址:当芯片接收到“启动”信号后,需要接收一个8位的控制字,控制字的格式如图7-10所示。 • A2、A1、A0三位地址与引脚上的A2、A1、A0的接法(接VCC=1,接VSS=0)相比较,如果一致,该芯片被选通。所以一个总线上总共可以挂八个AT24C01A。 • (4) 字节编程方式:在这种方式下,微处理器发送EEPROM存储单元地址和一个字节数据至EEPROM。字节写入的帧格式见图7-11。
(5) 读操作:读操作分三种情况,即读当前地址存储单元的数据,读指定地址存储单元的数据,读连续存储单元的数据。 • (6) AT89C51与AT24C01A接口电路:因为89C51不带I2C总线,所以必须用I/O口来模拟I2C总线的工作时序。硬件接口见图7-13。
图7-12 读AT24C01A指定地址存储单元数据的帧格式
软件编程非常关键,一定要注意P1.0、P1.1的时序应严格符合I2C总线时序,否则AT24C01A将不能正常工作。以下给出用单片机模拟I2C总线时序的程序,此程序向AT24C01A指定地址写入一个字节数据。30H单元放要写入AT24C01A数据的地址,R0放要写入的数据。软件编程非常关键,一定要注意P1.0、P1.1的时序应严格符合I2C总线时序,否则AT24C01A将不能正常工作。以下给出用单片机模拟I2C总线时序的程序,此程序向AT24C01A指定地址写入一个字节数据。30H单元放要写入AT24C01A数据的地址,R0放要写入的数据。
程序如下: • WROM: SETB P1.0 • LCALL DELAY • SETB P1.1 • LCALL DELAY • CLR P1.0 • LCALL DELAY • CLR P1.1 • LCALL DELAY • MOV R2,#08H ;送写控制字 • MOV A,#0A0H
WM2: LCALL WRITE • LCALL DELAY • SETB P1.1 • LCALL DELAY • CLR P1.1 • LCALL DELAY • MOV R2,#08H ;送写入数据的首地址 • MOV A,30H • LCALL WRITE • LCALL DELAY
SETB P1.1 • LCALL DELAY • CLR P1.1 • LCALL DELAY • MOV R2,#08H ;连续放一个字节的数据 • MOV A,R0 • LCALL WRITE • CLR P1.0 • LCALL DELAY • SETB P1.1 • LCALL DELAY • CLR P1.1
LCALL DELAY • WM: SETB P1.1 ;给出停止信号 • LCALL DELAY • SETB P1.0 • LCALL DELAY • RET • WRITE: CLR C ;写入数据子程序
RLC A • MOV P1.0,C • LCALL DELAY • SETB P1.1 • DJNE R2,WRITE • RET • DELAY: MOV R3,#1FH ;延时子程序 • DELY: DJNE R3,DELY • RET
7.5 I/O口的扩展 • 7.5.1 简单I/O口的扩展 • 只要根据“输入三态,输出锁存”的原则,选择74系列的TTL电路或MOS电路就能组成简单的扩展电路,如74LS244、74LS273、74LS373、74LS377等芯片都能组成输入、输出接口。
对于AT89C51单片机,外部I/O接口和外部RAM是统一编址的,也就是说它们共用64 K存储空间。每个扩展I/O接口相当于一个扩展的外部单元,因此,访问外部接口就如同访问外部RAM一样,用的都是MOVX指令,MOVX指令产生的 、 信号可以对I/O口进行读写。图7-14给出了一个用8位三态缓冲器74LS244作为输入口和八D锁存器74LS273作为输出口组成的简单I/O口扩展电路。
在图7-14中,输出电路控制采用P2.0和的组合信号。当P2.0和都为0时,或门输出为0,将P0口数据锁存到74LS273,其Q端控制发光二极管LED;当某个Q端为0时,与其相连的发光二极管被点亮。在图7-14中,输出电路控制采用P2.0和的组合信号。当P2.0和都为0时,或门输出为0,将P0口数据锁存到74LS273,其Q端控制发光二极管LED;当某个Q端为0时,与其相连的发光二极管被点亮。
按照图7-14,若让某一个按键按下,对应的发光二极管亮,程序如下:按照图7-14,若让某一个按键按下,对应的发光二极管亮,程序如下: • LOOP:MOV DPTR,#0FEFFH ;置I/O口地址 • MOVX A,@DPTR ;产生 读入键值 • MOVX @DPTR,A ;产生 输出信号 • AJMP LOOP ;循环 • 7.5.2 可编程I/O口的扩展 • 1.8255的内部结构 • 8255是一个可编程并行I/O口芯片,由以下四个逻辑结构组成,逻辑结构图如图7-15所示。
(1) 数据总线驱动器:具有双向三态的8位驱动器,用于和单片机数据总线相连,以实现单片机与8255数据的传送。 • (2) 并行I/O端口:共有三个并行端口,分别是A口、B口、C口。 • (3)读写控制逻辑:用于管理所有的数据、控制字或状态字的传送。 • (4) A组、B组控制块:用于接收来自读、写控制逻辑命令和内部数据总线的控制字,并向对应口发出操作命令。 • 2.8255的引脚介绍 • 8255是一个具有40个引脚的DIP封装的芯片,引脚图见图7-16。
引脚功能介绍如下: • (1) PA0~PA7:A口,具有8位数据输出锁存器/缓冲器和一个8位数据输入锁存器。 • (2) PB0~PB7:B口,具有8位数据输出锁存器/缓冲器和8位数据输入缓冲器(不锁存)。 • (3) PC0~PC7:C口,具有8位数据输出锁存器/缓冲器和8位数据输入缓冲器(不锁存),该口可分为两个4位口使用,它除了作为输入/输出口外,还可以作为A口、B口选通工作方式操作时的状态控制信号。
(4) :读控制端,低电平有效,允许从8255读取数据或状态字。 • (5) :写控制端,低电平有效,允许向8255写入数据或控制字。 • (6) :片选端,低电平有效。 • (7) A0、A1:口地址选择端,通过A0、A1可选中8255的四个寄存器,每个寄存器口地址见表7-3。 • (8) RESET:复位控制端,当RESET=1时,8255复位,通常与单片机的复位端直接相连。
3.8255的操作方式 • 8255的全部工作状态是通过读/写控制逻辑和工作方式选择来实现的。 • 1) 读/写控制逻辑操作选择 • 由单片机输出的地址线A0、A1及 、 、 来选择口的操作状态,具体说明如表7-3所示。
2) 8255三种工作方式的功能 • 8255有三种工作方式,分别是方式0、方式1和方式2,它们是通过程序对控制口送控制字来选择的,下面分别介绍三种工作方式: • (1) 方式0:基本I/O方式。 • (2) 方式1:单向选通I/O方式。 • (3) 方式2:双向总线方式。
3) 8255的编程选择控制字 • 8255的传输方式和工作方式的选择是通过对控制口输入控制字的方式实现的。8255的控制字有两种:方式选择控制字和C口位操作控制字。 • 方式选择控制字为8位,每一位都有固定含义,用于选择每个口的工作方式和数据传输方向,具体定义见图7-17。
位控制字用于对C口进行位操作。C口不仅在方式0下具有并行数据传输功能,还可以进行位操作。把一个置“1”或置“0”的控制字送入8255的控制口,就能把C口的某一位置1或清0而不影响其他位的状态,位操作控制字格式见图7-18。位控制字用于对C口进行位操作。C口不仅在方式0下具有并行数据传输功能,还可以进行位操作。把一个置“1”或置“0”的控制字送入8255的控制口,就能把C口的某一位置1或清0而不影响其他位的状态,位操作控制字格式见图7-18。
4.AT89C51与8255的接口电路 • 在89C51单片机的I/O口上扩展8255芯片,硬件连接图比较简单。在图7-19中,8255的片选及口地址选择线A0、A1分别由单片机的P0.7、P0.0、P0.1经地址锁存后提供,故8255的A、B、C口及控制口的地址分别为FF7CH、FF7DH、FF7EH、FF7FH(当然这不是惟一的连接方法,与单片机不同的地址线相连,8255的口地址也不会相同)。数据线直接与单片机的数据线相连, 、 也直接连在单片机的 、 端。
[例7.1] 如图7-19所示,用8255扩展单片机并行I/O口并读、写数据。要求8255工作在方式0,且A口作为输入,B口、C口作为输出。 • 分析:从图7-19可知,8255的A、B、C、控制口的地址分别为FF7CH、FF7DH、FF7EH、FF7FH。编程时,应先按题目要求对8255初始化设置每个口的工作方式,然后再使数据输入、输出。程序如下:
MOV A,#90H;A、B、C口方式0,A口输入,B、C口输出 • MOV DPTR,#0FF7FH; • MOVX @DPTR,A ;方式控制字→控制寄存器 • MOV DPTR,#0FF7CH • MOVX A,@DPTR ;从A口读取数据 • MOV DPTR,#0FF7DH • MOV A,#DATA1 • MOVX @DPTR,A ;将数据DATA1从B口输出 • MOV DPTR,#0FF7EH • MOV A,#DATA2 • MOVX @DPTR,A ;将数据DATA2从C口输出
[例7.2] 对C口的位操作,把PC5置1,再把PC5复位,程序如下: • MOV DPTR,#0FF7FH ;控制口地址→DPTR • MOV A,#0BH ;PC5置1的控制字→A • MOVX @DPTR,A ;控制字→控制口,PC5=1 • MOV A,#0AH ;PC5复位的控制字→A • MOVX @DPTR,A ;控制字→控制口,PC5=0