I/O口的扩展
单片机的并行I/O接口用于并行传送数据,例如:打印机、键盘、A/D、D/A等器件都可以通过并行I/O与CPU进行接口。MCS-51系列单片机具有4个8位I/O口,但是在实际应用中如果要进行外部设备的扩展,则要将P0和P2作为扩展的数据总线和地址总线使用,同时P3口的某些位要做第二功能使用。因此,在大多数应用中,仅由P1口作为并行数据口是不够的,所以需要进行I/O口的扩展。
I/O口的扩展方法主要有以下三种:一是利用锁存器、缓冲器进行并行口简单扩展;二是利用可编程并行接口芯片进行扩展;三是利用MCS-51单片机的串行口进行扩展。
(一)简单I/O口扩展
在单片机应用系统中,经常采用TTL电路或CMOS电路锁存器、三态门电路作为I/O口扩展芯片。这种I/O口一般都是通过P0口扩展,不占用单片机的I/O口资源,只需一根地址线作片选线用。这种方法具有电路简单、成本低、配置灵活方便等特点。
图6-5为采用74LS244作输入扩展,74LS273作输出扩展的简单I/O接口电路。图中P0口为双向数据总线,既能从74LS244输入数据,又能将数据送给74LS273输出。输入控制信号由P2.7和相或而成,当两者同时输出为低电平时,或门输出为0,选通74LS244,使外部信息进入到总线。无按键按下时,输入为全1,当有一键按下,则该键所在线输入为0。
图6-5 简单I/O口扩展电路图
输出控制信号由P2.7和相或而成,当两者同时为低电平时,或门输出为0,将P0口的数据锁存到74LS273,其输出控制着发光二极管LED。当某线输出低电平时,该线上的发光二极管点亮。
可见,输入和输出都是在P2.7为低电平时有效,所以74LS244和74LS273的口地址均为7FFFH(实际_上只要保证P2.7=0即可,与其他地址位无关),即占有相同的地址空间,但由于分别受信号控制,因此不会发生冲突。
对于图6-5,若实现的功能是按下任意键,对应的LED发光,则程序段如下:
(二)可编程并行接口芯片的扩展
可编程接口芯片是指其工作方式可由与之对应的软件命令来加以改变的接口芯片。这类芯片一般具有多种功能,使用灵活方便,使用前必须由CPU对其编程设定工作方式,然后按设定的方式进行操作。目前,常用芯片有8155和8255可编程并行I/O等接口芯片。8155该芯片能为系统提供的硬件资源包括:256字节的静态RAM,2个8位可编程I/O口(A口和B口),一个6位可编程I/O口(C口)及一个14位的可编程减法定时/计数器,是单片机应用系统最常用的外部功能扩展器件之一。本章节仅介绍8155可编程接口芯片及其与单片机的连接方法。
1.8155的引脚及内部结构
8155芯片为40引脚双列直插封装,单一的+5V电源,其引脚及内部结构如图6-6所示。各引脚功能如下:
AD7~AD0:三态数据/地址引出线。
片选信号,低电平有效。
读命令,低电平有效。
写命令,低电平有效。
ALE:地址及片选信号锁存信号,高电平有效,其后将沿地址和片选信号锁存到器件中。
接口与存储器选择信号,高电平寻址I/O接口,低电平寻址存储器。
PA7~PA0:A口输入/输出线。
PB7~PB0:B口输入/输出线。
PC5~PC0:C口输入/输出或控制信号线。当用作控制信号时,功能如下:
PC0:A INTR,A口中断请求信号线。
PC1:A BF,A口缓冲器满信号线。
PC2:A STB,A口选通信号线。
PC3:B INTR,B口中断请求信号线。
PC4:B BF,B口缓冲器满信号线。
PC5:B STB,B口选通信号线。
TIMER IN:定时器/计数器输入端。
TIMER OUT:定时器/计数器输出端。
RESET:复位信号线。
VCC:+5V电源。
VSS:地。
图6-6 8155引脚及内部结构
当为低电平时,表示AD7~AD0输入的是存储器地址,寻址范围为00~FFH;当
为高电平时,表示AD7~AD0输入的是I/O端口地址,其编码见表6-1。
表6-1 8155 I/O地址编码
2.8155功能及操作
8155具有3种功能:扩展RAM、I/O接口使用、定时器使用。
在8155的控制逻辑电路中设置有一个控制命令寄存器和一个状态标志寄存器。控制命令寄存器只能写入,不能读出,其中低4位用来设置A口、B口和C口的工作方式,第4、第5位用来确定A口、B口以选通输入/输出方式工作时是否允许中断请求,第6、第7位用来设置定时器的工作。工作方式控制字的格式如图6-7所示。图中基本输入/输出与选通输入/输出的区别在于:基本输入/输出只要有信号该口就接收(或输出),选通输入/输出则需要有相应的允许输入(或输出)控制位,只有在控制位为0才选择接受(或输出)。
图6-7 8155控制命令寄存器功能框图
状态寄存器用来存放A口和B口的状态标志。状态标志寄存器的地址与命令寄存器的地址相同,CPU只能读出,不能写入,其格式如图6-8所示。
图6-8 8155状态寄存器格式
3.定时器/计数器
8155含有一个14位的减法计数器,可用来定时或对外部事件计数,CPU可通过程序选择计数器的长度和计数方式,其控制字格式如图6-9所示。
图6-9 定时器/计数器寄存器格式
图6-9中T13~T0为计数长度。由于计数器的终值不是0,而是2,所以定时常数的范围为2 H~3FFFH。M2和M1用来设置定时器的输出方式,见表6-2。
表6-2 8155定时器输出方式
4.8155与单片机的连接
【例6-1】如图6-10所示,89C51的P2.7引脚与8155的端相连,P2.0与8155的
端,P0口作为地址线与AD7~AD0相连。要求从A口输入数据,作为8155定时器计数初值,对输入脉冲分频,再由定时器输出端输出连续方波。
解:根据引脚连接图,可知8155控制命令寄存器地址为8100 H,A口地址为8101 H,B口地址为8102H,C口地址为8103 H,定时器低8位地址为8104 H,高8位地址为8105H。定时器计数初值的低8位由A口输入,高6位设为0,程序设计如下:
图6-10 8155与89C51的接口图
(三)利用MCS-51单片机串行口进行扩展
当MCS-51单片机串行口工作在方式0时,使用移位寄存器芯片可以扩展一个或多个8位并行I/O口。这种方法不会占用片外RAM地址,而且可节省单片机的硬件开销。缺点是操作速度较慢,扩展芯片越多,速度越慢。
1.用74LS165扩展并行输入口
图6-11是利用74LS165扩展一个8位并行输入口的实用电路。74LS165是并行输入串行输出的8位移位寄存器。89C51单片机的串行口工作在方式0状态。串行数据从RXD(P3.0)端输入,同步移位脉冲由TXD(P3.1)送出。
图6-11 74LS165扩展并行输入口
2.用74LS164扩展并行输出口
图6-12是利用74LS164来扩展1个8位并行输出口的实用电路。74LS164是8位串入并出移位寄存器。RXD(P3.0)作为串行输出,与74LS164的数据输入端(1、2)相连,TXD(P3.1)作为移位脉冲输出与74LS164的时钟脉冲输入端(8)相连。
图6-12 74LS164扩展并行输出口