单片机数据程序存储器IO扩展.docx
《单片机数据程序存储器IO扩展.docx》由会员分享,可在线阅读,更多相关《单片机数据程序存储器IO扩展.docx(20页珍藏版)》请在冰豆网上搜索。
单片机数据程序存储器IO扩展
6.1.1单片机程序存储器扩展
一.单片机程序存储器概述
单片机应用系统由硬件和软件组成,软件的载体就是硬件中的程序存储器。
对于MCS-51系列8位单片机,片内程序存储器的类型及容量如表6.1所示。
表6.1MCS-51系列单片机片内程序存储器一览表
单片机型号
片内程序存储器
类型
容量/B
8031
无
——
8051
ROM
4K
8751
EPROM
4K
8951
Flash
4K
对于没有内部ROM的单片机或者当程序较长、片内ROM容量不够时,用户必须在单片机外部扩展程序存储器。
MCS-51单片机片外有16条地址线,即P0口和P2口,因此最大寻址范围为64KB(0000H~FFFFH)。
这里要注意的是,MCS-51单片机有一个管脚——跟程序存储器的扩展有关。
如果接高电平,那么片内存储器地址范围是0000H~0FFFH(4KB),片外程序存储器地址范围是1000H~FFFFH(60KB)。
如果接低电平,不使用片内程序存储器,片外程序存储器地址范围为0000H~FFFFH(64KB)。
8031单片机没有片内程序存储器,因此管脚总是接低电平。
扩展程序存储器常用的芯片是EPROM(ErasableProgrammableReadOnlyMemory)型(紫外线可擦除型),如2716(2K×8)、2732(4K×8)、2764(8K×8)、27128(16K×8)、27256(32K×8)、27512(64K×8)等。
另外,还有+5V电可擦除EEPROM,如2816(2K×8)、2864(8K×8)等等。
如果程序总量不超过4KB,一般选用具有内部ROM的单片机。
8051内部ROM只能由厂家将程序一次性固化,不适合小批量用户和程序调试时使用,因此选用8751、8951的用户较多。
如果程序超过4KB,用户一般不会选用8751、8951,而是直接选用8031,利用外部扩展存储器来存放程序。
二.EPROM程序存储器扩展实例
紫外线擦除电可编程只读存储器EPROM是国内用得较多的程序存储器。
EPROM芯片上有一个玻璃窗口,在紫外线照射下,存储器中的各位信息均变1,即处于擦除状态。
擦除干净的EPROM可以通过编程器将应用程序固化到芯片中。
例6.1在8031单片机上扩展4KBEPROM程序存储器。
(1)选择芯片。
本例要求选用8031单片机,内部无ROM区,无论程序长短都必须扩展程序存储器(目前较少这样使用,但扩展方法比较典型、实用)。
在选择程序存储器芯片时,首先必须满足程序容量,其次在价格合理情况下尽量选用容量大的芯片。
这样做的话,使用的芯片少,从而接线简单,芯片存储容量大,程序调整余量也大。
如估计程序总长3KB左右,最好是扩展一片4KB的EPROM2732,而不是选用2片2716(2KB)。
在单片机应用系统硬件设计中应注意,尽量减少芯片使用个数,使得电路结构简单,提高可靠性,这也是8951比8031使用更加广泛的原因之一。
(2)硬件电路图。
8031单片机扩展一片2732程序存储器电路如图6.2所示。
(3)芯片说明。
①74LS373。
74LS373是带三态缓冲输出的8D锁存器,由于片机的三总线结构中,数据线与地址线的低8位共用P0口,因此必须用地址锁存器将地址信号和数据信号区分开。
74LS373的锁存控制端G直接与单片机的锁存控制信号ALE相连,在ALE的下降沿锁存低8位地址。
②EPROM2732。
EPROM2732的容量为4K×8位。
4K表示有4×1024(22×210=212)个存储单元,8位表示每个单元存储数据的宽度是8位。
前者确定了地址线的位数是12位(A0~A11),后者确定了数据线的位数是8位(O0~O7)。
目前,除了串行存储器之外,一般情况下,我们使用的都是8位数据存储器。
2732采用单一+5V供电,最大静态工作电流为100mA,维持电流为35mA,读出时间最大为250ns。
2732的封装形式为DIP24,管脚如图6.3所示。
其中,A0~A11为地址线;O0~O7为数据线;为片选线;
/VPP为输出允许/编程高压。
除了12条地址线和8条数据线之外,为片选线,低电平有效。
也就是说,只有当为低电平时,2732才被选中,否则,2732不工作。
/VPP为双功能管脚,当2732用作程序存储器时,其功能是允许读数据出来;当对EPROM编程(也称为固化程序)时,该管脚用于高电压输入,不同生产厂家的芯片编程电压也有所不同。
当我们把它作为程序存储器使用时,不必关心其编程电压。
(4)扩展总线的产生。
一般的CPU,像INTEL8086/8088、Z80等,都有单独的地址总线、数据总线和控制总线,而MCS-51系列单片机由于受管脚的限制,数据线与地址线是复用的,为了将它们分离开来,必须在单片机外部增加地址锁存器,构成与一般CPU相类似的三总线结构。
(5)连线说明:
①地址线。
单片机扩展片外存储器时,地址是由P0和P2口提供的。
图6.2中,2732的12条地址线(A0~A11)中,低8位A0~A7通过锁存器74LS373与P0口连接,高4位A8~A11直接与P2口的P2.0~P2.3连接,P2口本身有锁存功能。
注意,锁存器的锁存使能端G必须和单片机的ALE管脚相连。
②数据线。
2732的8位数据线直接与单片机的P0口相连。
因此,P0口是一个分时复用的地址/数据线。
③控制线。
CPU执行2732中存放的程序指令时,取指阶段就是对2732进行读操作。
注意,CPU对EPROM只能进行读操作,不能进行写操作。
CPU对2732的读操作控制都是通过控制线实现的。
2732控制线的连接有以下几条:
接地端。
由于系统中只扩展了一个程序存储器芯片,因此,2732的片选端直接接地,表示2732一直被选中。
若同时扩展多片,需通过译码器来完成片选工作。
片选端:
接8031的读选通信号端。
在访问片外程序存储器时,只要端出现负脉冲,即可从2732中读出程序。
(6)扩展程序存储器地址范围的确定。
单片机扩展存储器的关键是搞清楚扩展芯片的地址范围,8031最大可以扩展64KB(0000H~FFFFH)。
决定存储器芯片地址范围的因素有两个:
一个是片选端的连接方法,一个是存储器芯片的地址线与单片机地址线的连接。
在确定地址范围时,必须保证片选端为低电平。
(7)EPROM的使用。
存储器扩展电路是单片机应用系统的功能扩展部分,只有当应用系统的软件设计完成了,才能把程序通过特定的编程工具(一般称为编程器或EPROM固化器)固化到2732中,然后再将2732插到用户板的插座上(扩展程序存储器一定要焊插座)。
当上电复位时,PC=0000H,自动从2732的0000H单元取指令,然后开始执行指令。
如果程序需要反复调试,可以用紫外线擦除器先将2732中的内容擦除,然后再固化修改后的程序,进行调试。
如果要从EPROM中读出程序中定义的表格,需使用查表指令:
MOVCA,@A+DPTR
MOVCA,@A+PC
6.1.2数据存储器扩展
一.单片机RAM概述
表6.26116的操作方式
方式
IO0~IO7
H
Χ
Χ
未选中
高阻
L
L
H
读
O0~O7
L
H
L
写
I0~I7
L
L
L
写
I0~I7
RAM是用来存放各种数据的,MCS-51系列8位单片机内部有128BRAM存储器,CPU对内部RAM具有丰富的操作指令。
但是,当单片机用于实时数据采集或处理大批量数据时,仅靠片内提供的RAM是远远不够的。
此时,我们可以利用单片机的扩展功能,扩展外部数据存储器。
实训6的参考程序1就是一个扩展RAM的使用实例。
常用的外部数据存储器有静态RAM(StaticRandomAccessMemory—SRAM)和动态RAM(DynamicRandomAccessMemory—DRAM)两种。
前者读/写速度高,一般都是8位宽度,易于扩展,且大多数与相同容量的EPROM引脚兼容,有利于印刷板电路设计,使用方便;缺点是集成度低,成本高,功耗大。
后者集成度高,成本低,功耗相对较低;缺点是需要增加一个刷新电路,附加另外的成本。
MCS-51单片机扩展片外数据存储器的地址线也是由P0口和P2口提供的,因此最大寻址范围为64KB(0000H~FFFFH)。
一般情况下,SRAM用于仅需要小于64KB数据存储器的小系统,DRAM经常用于需要大于64KB的大系统。
二.SRAM扩展实例
1.应用系统中只扩展一片RAM
例6.3在一单片机应用系统中扩展2KB静态RAM。
(1)芯片选择。
单片机扩展数据存储器常用的静态RAM芯片有6116(2K×8位)、6264(8K×8位)、62256(32K×8位)等。
根据题目容量的要求,我们选用SRAM6116。
它是一种采用CMOS工艺制成的SRAM,采用单一+5V供电,输入/输出电平均与TTL兼容,具有低功耗操作方式。
当CPU没有选中该芯片时(=1),芯片处于低功耗状态,可以减少80%以上的功耗。
6116的管脚与EPROM2716管脚兼容,管脚如图6.11所示。
6116有11条(A0~A10)地址线;8条(I/O0~I/O7)双向数据线;为片选线,低电平有效;为写允许线,低电平有效;为读允许线,低电平有效。
6116的操作方式如表6.2所示。
(2)硬件电路。
单片机与6116的硬件连接如图6.12所示。
(3)连线说明。
6116与单片机的连线如下:
地址线:
A0~A10连接单片机地址总线的A0~A10,即P0.0~P0.7、P2.0、P2.1、P2.2共11根。
数据线:
I/O0~I/O7连接单片机的数据线,即P0.0~P0.7。
控制线:
18脚片选端连接单片机的P2.7,即单片机地址总线的最高位A15;22脚读允许线连接单片机的读数据存储器控制线17脚;写允许线27脚连接单片机的写数据存储器控制线17脚
(4)片外RAM地址范围的确定及使用。
按照图6.12的连线,片选端直接与某一地址线P2.7相连,这种扩展方法称为线选法。
显然,只有P2.7=0,才能够选中该片6116
8031P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
6116A10A9A8A7A6A5A4A3A2A1A0
0××××00000000000
0××××00000000001
0××××00000000010
0××××00000000011
0××××11111111111
其中,“×”表示跟6116无关的管脚,取0或1都可以。
如果与6116无关的管脚取0,那么,6116的地址范围是0000H~07FFH;如果与6116无关的管脚取1,那么,6116的地址范围是7800H~7FFFH。
单片机对RAM的读写除了可以使用在实训6中出现的指令:
MOVX@DPTR,A;64KB内写入数据
MOVXA,@DPTR;64KB内读取数据
外,还可以使用以下对低256B的读写指令:
MOVX@Ri,A;低256B内写入数据
MOVXA,@Ri;低256B内读取数据
6.1.3并行I/O口扩展
一.MCS-51内部并行I/O口及其作用
51系列单片机内部有4个双向的并行I/O端口:
P0~P3,共占32根引脚。
P0口的每一位可以驱动8个TTL负载,P1~P3口的负载能力为三个TTL负载。
有关4个端口的结构及详细说明,在前面的有关章节中已作过介绍,这里不再赘述。
在无片外存储器扩展的系统中,这4个端口都可以作为准双向通用I/O口使用。
通过6.1和6.2节的介绍,我们知道,在具有片外扩展存储器的系统中,P0口分时地作为低8位地址线和数据线,P2口作为高8位地址线。
这时,P0口和部分或全部的P2口无法再作通用I/O口。
P3口具有第二功能,在应用系统中也常被使用。
因此在大多数的应用系统中,真正能够提供给用户使用的只有P1和部分P2、P3口。
综上所述,MCS-51单片机的I/O端口通常需要扩充,以便和更多的外设(例如显示器、键盘)进行联系。
在51单片机中扩展的I/O口采用与片外数据存储器相同的寻址方法,所有扩展的I/O口,以及通过扩展I/O口连接的外设都与片外RAM统一编址,因此,对片外I/O口的输入/输出指令就是访问片外RAM的指令,即:
MOVX@DPTR,A
MOVX@Ri,A
MOVXA,@DPTR
MOVXA,@Ri
在实训6中,读者已经初步接触了用8155扩展I/O口的方法,实际中,扩展I/O口的方法有三种:
简单的I/O口扩展、采用可编程的并行I/O接口芯片扩展以及利用串行口进行I/O口的扩展。
二.简单的I/O口扩展
简单的I/O口扩展通常是采用TTL或CMOS电路锁存器、三态门等作为扩展芯片,通过P0口来实现扩展的一种方案。
它具有电路简单、成本低、配置灵活的特点。
1.扩展实例
图6.16为采用74LS244作为扩展输入、74LS273作为扩展输出的简单I/O口扩展。
2.芯片及连线说明
在图6.16的电路中采用的芯片为TTL电路74LS244、74LS273。
其中,74LS244为8缓冲线驱动器(三态输出),、为低电平有效的使能端。
当二者之一为高电平时,输出为三态。
74LS273为8D触发器,为低电平有效的清除端。
当=0时,输出全为0且与其它输入端无关;CP端是时钟信号,当CP由低电平向高电平跳变时刻,D端输入数据传送到Q输出端。
P0口作为双向8位数据线,既能够从74LS244输入数据,又能够从74LS273输出数据。
输入控制信号由P2.0和相“或”后形成。
当二者都为0时,74LS244的控制端有效,选通74LS244,外部的信息输入到P0数据总线上。
当与74LS244相连的按键都没有按下时,输入全为1,若按下某键,则所在线输入为0。
输出控制信号由P2.0和相“或”后形成。
当二者都为0后,74LS273的控制端有效,选通74LS273,P0上的数据锁存到74LS273的输出端,控制发光二极管LED,当某线输出为0时,相应的LED发光。
3.I/O口地址确定
因为74LS244和74LS273都是在P2.0为0时被选通的,所以二者的口地址都为FEFFH(这个地址不是惟一的,只要保证P2.0=0,其它地址位无关)。
但是由于分别由和控制,因而两个信号不可能同时为0(执行输入指令,如MOVXA,@DPTR或MOVXA,@Ri时,有效;执行输出指令,如MOVX@DPTR,A或MOVX@Ri,A时,有效),所以逻辑上二者不会发生冲突。
4.编程应用
下述程序实现的功能是按下任意键,对应的LED发光。
CONT:
MOVDPTR,#0FEFFH;数据指针指向口地址
MOVXA,@DPTR;检测按键,向74LS244,读入数据
MOVX@DPTR,A;向74LS273输出数据,驱动LED
SJMPCONT;循环
三.采用8255扩展I/O口
所谓可编程的接口芯片是指其功能可由微处理机的指令来加以改变的接口芯片,利用编程的方法,可以使一个接口芯片执行不同的接口功能。
目前,各生产厂家已提供了很多系列的可编程接口,MCS-51单片机常用的两种接口芯片是8255以及8155,本书主要介绍这两种芯片在51单片机中的使用。
8255和MCS-51相连,可以为外设提供三个8位的I/O端口:
A口、B口和C口,三个端口的功能完全由编程来决定。
1.8255的内部结构和引脚排列
图6.17为8255的内部结构和引脚图。
(1)A口、B口和C口。
A口、B口和C口均为8位I/O数据口,但结构上略有差别。
A口由一个8位的数据输出缓冲/锁存器和一个8位的数据输入缓冲/锁存器组成。
B口由一个8位的数据输出缓冲/锁存器和一个8位的数据输入缓冲器组成。
三个端口都可以和外设相连,分别传送外设的输入/输出数据或控制信息。
(2)A、B组控制电路。
这是两组根据CPU的命令字控制8255工作方式的电路。
A组控制A口及C口的高4位,B组控制B口及C口的低4位。
(3)数据缓冲器。
这是一个双向三态8位的驱动口,用于和单片机的数据总线相连,传送数据或控制信息。
(4)读/写控制逻辑。
这部分电路接收MCS-51送来的读/写命令和选口地址,用于控制对8255的读/写。
2)引脚
(1)数据线(8条):
D0~D7为数据总线,用于传送CPU和8255之间的数据、命令和状态字。
(2)控制线和寻址线(6条)。
RESET:
复位信号,输入高电平有效。
一般和单片机的复位相连,复位后,8255所有内部寄存器清0,所有口都为输入方式。
A0、A1:
地址输入线。
当=0,芯片被选中时,这两位的4种组合00、01、10、11分别用于选择A、B、C口和控制寄存器。
(3)I/O口线(24条):
PA0~PA7、PB0~PB7、PC0~PC7为24条双向三态I/O总线,分别与A、B、C口相对应,用于8255和外设之间传送数据。
(4)电源线(2条):
VCC为+5V,GND为地线。
2.8255的控制字
8255的三个端口具体工作在什么方式下,是通过CPU对控制口的写入控制字来决定的。
8255有两个控制字:
方式选择控制字和C口置/复位控制字。
用户通过程序把这两个控制字送到8255的控制寄存器(A0A1=11),这两个控制字以D7来作为标志。
3.8255的工作方式
8255有三种工作方式:
方式0、方式1、方式2。
方式的选择是通过上述写控制字的方法来完成的。
(1)方式0(基本输入/输出方式):
A口、B口及C口高4位、低4位都可以设置输入或输出,不需要选通信号。
单片机可以对8255进行I/O数据的无条件传送,外设的I/O数据在8255的各端口能得到锁存和缓冲。
(2)方式1(选通输入/输出方式):
A口和B口都可以独立的设置为方式1,在这种方式下,8255的A口和B口通常用于传送和它们相连外设的I/O数据,C口作为A口和B口的握手联络线,以实现中断方式传送I/O数据。
C口作为联络线的各位分配是在设计8255时规定的,分配表如表6.3所示。
表6.38255C口联络信号分配表
C口各位
方式1
方式2
输入方式
输出方式
双向方式
PC0
INTRB
INTRB
由B口方式决定
PC1
IBFB
由B口方式决定
PC2
SETB
由B口方式决定
PC3
INTRA
INTRB
INTRA
PC4
I/O
PC5
IBFA
I/O
IBFA
PC6
I/O
PC7
I/O
4.8255与MCS-51的接口
8255和单片机的接口十分简单,只需要一个8位的地址锁存器即可。
锁存器用来锁存P0口输出的低8位地址信息。
图6.19为8255扩展实例。
1)连线说明
数据线:
8255的8根数据线D0~D7直接和P0口一一对应相连就可以了。
控制线:
8255的复位线RESET与8031的复位端相连,都接到8031的复位电路上(在图6.19中未画出)。
寻址线:
8255的片选端和A1、A0分别由P0.7和P0.1、P0.0经地址锁存器74LS373后提供,当然片选端的接法不是惟一的。
当系统要同时扩展外部RAM时,就要和RAM芯片的片选端一起经地址译码电路来获得,以免发生地址冲突。
I/O口线:
可以根据用户需要连接外部设备。
图6.19中,A口作输出,接8个发光二极管LED;B口作输入,接8个按键开关;C口未用。
2)地址确定
8051A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0
8255A1A0
A口:
××××××××0×××××00
B口:
××××××××0×××××01
C口:
××××××××0×××××10
控制口:
××××××××0×××××11
根据上述接法,8255的A、B、C以及控制口的地址分别为0000H、0001H、0002H和0003H(假设无关位都取0)。
3)编程应用
例6.7如果在8255的B口接有8个按键,A口接有8个发光二极管,即类似于图6.16中按键和二极管的连接,则下面的程序能够完成按下某一按键,相应的发光二极管发光的功能。
MOVDPTR,#0003H;指向8255的控制口
MOVA,#83H
MOVX@DPTR,A;向控制口写控制字,A口输出,B口输入
MOVDPTR,#0001H;指向8255的B口
LOOP:
MOVXA,@DPTR;检测按键,将按键状态读入A累加器
MOVDPTR,#0000H;指向8255的A口
MOVX@DPTR,A;驱动LED发光
SJMPLOOP
四.采用8155扩展I/O口
在实训电路中采用的是另一种可编程的接口芯片8155,Intel公司研制的8155不仅具有两个8位的I/O端口(A口、B口)和一个6位的I/O端口(C口),而且还可以提供256B的静态RAM存储器和一个14位的定时/计数器。
8155和单片机的接口非常简单,目前被广泛应用。
1.8155的结构和引脚
8155有40个引脚,采用双列直插封装,其引脚图和组成框图如图6.20所示。
(3)控制总线(8条):
RESET:
复位线,通常与单片机的复位端相连,复位后,8155的3个端口都为输入方式。
ALE:
地址锁存线,高电平有效。
它常和单片机的ALE端相连,在ALE的下降沿将单片机P0口输出的低8位地址信息锁存到8155内部的地址锁存器中。
因此,单片机的P0口和8155连接时,无需外接锁存器。
7脚为RAM或I/O口的选择线。
当=0时,选中8155的256BRAM;当=1时,选中8155片内3个I/O端口以及命令/状态寄存器和定时/计数器。
TIMERIN、:
定时/计数器的脉冲输入、输出线。
TIMERIN是脉冲输入线,其输入脉冲对8155内部的14位定时/计数器减1;为输出线,当计数器计满回0时,8155从该线输出脉冲或方波,波形形状由计数器的工作方式决定。
2.作片外RAM使用
当=0,=0时,8155只能做片外RAM使用,共256B。
其寻址范围由以及AD0~AD7的接法决定,这和前面讲到的片外RAM扩展时讨论的完全相同。
当系统同时扩展片外RAM芯片时,要注意二者的统一编址。
对这256BRAM的操作使用片外RAM的读/写指令“MOVX”。
3.作扩展I/O口使用
当=0,=1时,此时可以对8155片内3个I/O端口以及命令/状态寄存器和定时/计数器进行操作。
与I/O端口和计数器使用有关的内部寄存器共有6个,需要三位地址来区分,表6.4为地址分