单片机芯片内集成了计算机的基本功能部件,一块芯片就是一个完整的最小微机系统,但片内存储器的容量、并行I/O端口、定时器等内部资源都还是有限的。
扩展应尽量采用串行扩展方案。通过SPI或I2C总线扩展E2PROM、A/D、D/A、显示器、看门狗、时钟等芯片,占用MCU的I/O口线少,编程也方便。
8.2 并行扩展三总线的产生
89C51/S51单片机由于受引脚的限制,数据线和地址线是复用的,而且由I/O口线兼用。
为了将它们分离出来,以便同单片机片外的芯片正确地连接,需要在单片机外部增加地址锁存器,从而构成与一般CPU相类似的片外三总线,如图所示。
由89C51 P0口送出的低8位有效地址信号是在ALE(地址锁存允许)信号变高的同时出现的,并在ALE由高变低时,将出现在P0口的地址信号锁存到外部地址锁存器74HC373中。
8.2.1 片外三总线结构
所谓总线,就是连接系统中各扩展部件的一组公共信号线。按照功能,通常把系统总线分为3组,即地址总线、数据总线和控制总线。
(1) 地址总线
地址总线(Address Bus)用于传送单片机送出的地址信号,以便进行存储单元和I/O端口的选择。地址总线是单向的,地址总线的数目决定了可直接访问的存储单元的数目。
例如,n位地址可以产生2^n个连续地址编码,因此,可访问2^n个存储单元。89C51/S51单片机存储器扩展最多可达64 KB,即2^16个地址单元,因此,最多需16位地址。
(2) 数据总线
数据总线(Data Bus,DB)用于单片机与存储器之间或单片机与I/O端口之间传送数据。
数据总线的位数与单片机处理数据的字长一致。
例如,89C51/S51单片机是8位字长,所以,数据总线的位数也是8位。数据总线是双向的,可以进行两个方向的数据传送。
(3) 控制总线
控制总线(Control Bus,CB)是单片机发出的以控制片外ROM、RAM和I/O口读/写操作的一组控制线。
8.2.2 系统扩展的实现
1. 以P0口作地址/数据总线
此处的地址总线是指系统的低8位地址线。
因为P0口线既用作地址线,又用作数据线(分时使用),因此,需要加一个8位锁存器。
在实际应用时,先把低8位地址送锁存器暂存,然后再由地址锁存器给系统提供低8位地址,而把P0口线作为数据线使用。
2.以P2口的口线作高位地址线
如果使用P2口的全部8位口线,再加上P0口提供的低8位地址,便可形成完整的16位地址总线,使单片机系统的寻址范围达到64 KB。
但实际应用系统中,高位地址线并不固定为8位,需要用几位就从P2口中引出几条口线。
3.控制信号线
除了地址线和数据线之外,在扩展系统中还需要一些控制信号线,以构成扩展系统的控制总线。其中包括:
使用作为地址锁存的选通信号,以实现低8位地址的锁存;
以信号作为扩展程序存储器的读选通信号;
以信号作为内、外程序存储器的选择信号;
以和作为扩展数据存储器和I/O端口的读/写选通信号。执行MOVX指令时,这两个信号分别自动有效。
尽管89C51/S51单片机号称有4个I/O口,共32条口线,但由于系统扩展的需要,真正能作为数据I/O使用的,就只剩下P1口和P3口的部分口线了。
8.3 扩展数据存储器
89C51/S51单片机片内RAM仅有128字节,需要较大容量RAM时,就需要片外扩展数据存储器RAM,最大可扩展64 KB。
单片机是面向控制的,实际需要扩展容量不大,一般采用静态RAM较方便,如6116(2K×8位),6264(8K×8位), 62256(32K×8位) 。
与动态RAM相比,静态RAM无须考虑保持数据而设置的刷新电路,故扩展电路较简单。
扩展数据存储器空间地址,由P2口提供高8位地址,P0口分时提供低8位地址和用作8位双向数据总线。
片外数据存储器RAM的读/写由89C51/S51的(P3.7)和(P3.6)信号控制。
8.4 简单并行I/O口的扩展
由于89C51/S51的P0~P3口输入数据时可以缓冲,输出时能够锁存,并且有一定的带负载能力
8.4.1 I/O口的直接输入/输出
I/O口可以直接接外部设备,如开关、LED发光二极管、BCD码拨盘和打印机等。
8.4.2 简单I/O接口的扩展方法
在很多应用系统中,采用74系列TTL电路,将并行数据输入或输出。
可采用74HC244作扩展输入。244是一个三态输出八缓冲器及总线驱动器,带负载能力强。
74HC273(8D锁存器)作扩展输出。它们直接挂在P0口线上。
89C51/S51单片机把外扩I/O口和片外RAM统一编址,每个扩展的接口相当于一个扩展的外部RAM单元,访问外部接口就像访问外部RAM一样,用的都是MOVX指令,并产生RD(或WR)信号。