第九章MCS-51 接口扩展技术
§9.1 微型机I/O接口技术概述
所谓I/O即计算机数据的输入输出。计算机系统的数据输入输出有两类数据传送操作:
1.CPU和存储器之间的传送操作,如前章所述。
2.CPU与外围设备接口的数据输入输出操作:
由于外部设备情况复杂,例如速度的快慢差异很大,外围设备的数据信号格式各不相同,有电流信号、电压信号、数字信号、脉冲信号等。这些复杂的情况使CPU无法以固定的时序与外围设备同步协调工作,这就需要用一定的接口电路连接CPU与外围设备,使CPU 与外围设备之间的数据输入输出能有效地进行。
一.I/O接口电路的作用:
1.速度协调:
CPU的速度很快,外围设备的速度较慢。
输入:当外围设备数据准备好后,CPU再执行输入操作,由I/O 接口电路提供准备好信号再输入。
输出:需当外围设备准备好才能执行输出操作,由I/O接口电路将外围设备的准备状态传送给CPU。
I/O接口电路充当了协调CPU与外围设备速度差异的角色。
2.输出接口电路应具有锁存功能:
CPU向外输出数据是通过P0口数据通道输出的,P0口是分时传送低8位地址和数据信息的复用口,数据在数据总线上停留的时间很短,因此输出接口应将该输出数据锁存起来,等待这一数据被外围设备接收。
3.输入接口电路应具备三态缓冲功能:
外围设备向CPU输入数据仍需通过P0口数据通道,在该数据通道上挂着多个数据源,除了多种输入接口外,所有存储器的数据线也与P0口数据通道相连,CPU的一次输入操作只允许一个数据源的数据线与数据通道相连,其余数据源的数据线必须以高阻与数据通道隔离。
所谓三态即指高电平、低电平、高阻三种状态。
4.数据转换:
CPU传送的信号必须是数字信号,并且是并行信号,外围设备的信号与此不符则需通过接口电路转换。例如模拟信号与数字信号、串行与并行之间的转换等。
§9.2 I/O接口的扩展
一.单片机I/O口的直接应用,用P1口直接输入输出
单片机的P1口可直接作为8条输入输出线使用。
+5V
由上图,P1口的高4位是输入线,低4位作为输出线用其高电平可点亮接在该线的发光二极管,P1.7~P1.4的开关依次对应P1.3~P1.0的灯,哪个开关合上,则其对应的灯点亮。程序如下:
ORG 0000H
MAIN:MOV P1 , #0F0H ;置P1口高4位为输入,灭4个灯MOV A , P1 ;输入开关状态,合上者输入为0
CPL A
ANL A , #0F0H ;求反后切取高4位
SWAP A ;移入低4位
MOV P1 , A ;点亮对应的发光二极管
LJMP MAIN
END
二.用TTL芯片扩展简单的I/O口
采用TTL电路或CMOS电路的锁存器、三态门等通过P0口常可构成各类简单的输入输出接口,它电路简单、成本低、配置灵活方便。
1.扩展简单的8位输出口
扩展输出口选择芯片要点是必须具有锁存功能。这是因为输出的数据在数据线上保持的时间是很短暂的,必须锁存起来用以控制外围设备。
例如用两片74LS377扩展两个8位输出口:
8位输出8位输出
如图,74LS377是带有允许输出端的8D锁存器,它的控制逻辑为:
当G = 0时,CLK的上升沿(电平由低变高)使数据锁存,即8Q 输出与8D输入呈高阻隔开,8Q输出保持由8D输入的信息。CPU的输出操作:
①首先建立有效地址,使G = 0:
对于1#74LS377,G接在1Q,即A0上,输出地址只要
A0 = 0即可使其G = 0 ,因此其地址为FFFEH 同理,2#74LS377的地址为FFFDH
②用MOVX写指令产生WR = 0的低电平有效信号,欲输出
的数据从P0口数据线送出,从D端通向Q端,建立8位输出数据。
③当写指令周期结束时,WR变高产生上沿,CLK脚的上跳沿
使Q与D隔开,数据锁存输出。
输出软件如下:
MOV DPTR , #0FFFEH ;建立有效地址,A0 = 0,即1#377
G = 0
MOV A , #DATA1 :待输出数据送A
MOVX @DPTR , A ;产生WR = 0有效信号,数据
DATA从P0口通过D送往Q输
出。
当写周期结束时,WR变高,使
CLK产先上跳沿,数据锁存输出。MOV DPTR , #0FFFDH ;建立有效地址,A1 = 0,即2#377
G = 0
MOV A , #DATA2
MOVX @DPTR , A
2.扩展简单的8位输入口:
输入接口芯片选择的要点是必须具有三态缓冲功能。即被选通的输入接口可与系统的数据总线接通输入数据,未被选通的输入接口应以高阻与数据线隔离。
常用芯片是74LS244,三态门。如下例扩展8位输入口:
74LS244的控制逻辑为:
当1C、2C为低电平时,D与Q接通,数据从P0口输入CPU。当1C、2C为高电平时,D与Q隔开,Q呈高阻状态,接在D 端的外部信号被隔离。
由上图,只有当有效地址P2.1 = 0,且同时执行一条MOVX 读指令产生RD = 0时,或门的输出才会为0,亦即1C、2C才会为0,D与Q才可以接通,从1#244输入数据。由上图可知1#244的地址为FDFFH。
2#244的地址位FBFFH。
输入软件如下:
MOV DPTR , #0FDFFH ;P2.1 = 0建立1#有效地址
MOVX A , @DPTR ;读指令产生RD = 0低电平
有效信号
或门输出为0,1C、2C为0
D通向Q输入数据
读周期结束后RD变高则使
1C、2C为高电平,使D与Q
隔开,呈高阻与数据线隔离。
MOV DPTR , #0FBFFH ;P2.2 = 0建立2#有效地址
MOVX A , @DPTR 从2#244输入数据
三.扩展可编程并行接口8255
8255可扩展三个8位并行输入输出口,可编程设定各口为输入或输出。
1.8255的内部结构
如118页图7-1 说明其结构及引脚作用。
120页端口地址信号及操作
2.8255的工作方式:
方式0:基本输入输出方式,每个口的可被编程设定为输入或输出,
输出时具有锁存功能,输入时为三态。
方式1:选通输入输出方式,A、B口用于数据传送,C口作为与外设联络信号。
方式2:双向传送方式,只有A口可以使用这种方式。
只要求掌握方式0。
3.8255控制字
①方式控制字
P123页列出了方式控制字各位的意义,注意D7位一定是1,它是方式控制字的特征位。例:方式控制字为9AH:
1 0 0 1 1 0 1 0
方式控制字C口低4位输出特征位B口输入
B口方式选择0方式
口方式:C口高4位输入
00:方式0 A口输入
01:方式1
10:方式2
②C口置/复位控制字
将一个置/复位控制字送入8255控制寄存器,即可将C口某一位置为1或0,而且不影响其它位的状态。
例如向控制口送入07H:
0 0 0 0 0 1 1 1
C口置/复位 1表示置1,0表示清0
控制字特征位确定对C口中哪一位进行置/复位操作 000:PC0
001:PC1 依次类推
该控制字确定PC3置1。
4.8255与CPU的连接举例:
各端口地址:
P0.7P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0
A口:0 1 1 1 1 1 0 0FF7CH
B口:0 1 1 1 1 1 0 1 FF7DH
C口:0 1 1 1 1 1 1 0 FF7EH
控制口:0 1 1 1 1 1 1 1FF7FH
上图中当无关地址送0时,A口、B口、C口、控制口的地址也
可为0000H、0001H、0002H、0003H。
注:8255内部不带有地址锁存器,上图中用373锁存地址。
编程要点:
MOV DPTR , #0FF7FH ;选控制口
MOV A , #8AH ;方式控制字1 0 0 0 1 0 1 0
MOVX A , @DPTR ;方式控制字特征位C口低4位出
A口方式0 B口输入
A口输出B口方式0
C口高4位输入
MOV DPTR , #0FF7DH
MOVX A , @DPTR ;从B口输入数据,并存入50H单元
MOV 50H , A
MOV DPTR , #0FF7CH
MOV A , #0FFH
MOVX @DPTR , A ;从A口输出FFH
MOV DPTR , #0FF7FH ;选控制口
MOV A , #03H
MOVX @DPTR , A ;送C口置/复位控制字
00 0 0 0 0 1 1
C口置/复位控制字特征位置1
PC.1
该控制字规定PC.1输出为1
四.扩展可编程并行接口8155
1.8155内部结构:
P133页图7-18
8155内部有两个8位并行I/O口,即A口、B口,一个6位并行I/O口,即C口。
256字节数据存储器RAM
一个14位定时器计数器
2.8155的引脚信号说明:P133页
3.8155的端口地址:P134页表7-3
4.8155的控制命令字:P135页
5.8155的状态字P136页
注意8155的控制命令字寄存器只写不读,状态字寄存器只读不写,它们共用一个地址。
6.8155的基本用法:
①可扩展256字节片外RAM
IO/M引脚低电平时,只能用作片外RAM扩充,其低8位地址为
00H~FFH,共256字节,对其读写时用MOVX指令。
②作扩展I/O口使用
IO/M引脚高电平时,可根据命令字的规定从A、B、C口输入输出,
共有20条输入输出线,
③扩充一个14位定时器计数器
8155提供一个14位减1计数器,它的功能主要用于计数,从TIMER IN端输入计数脉冲,计数满时由TIMER OUT输出脉冲或方波。
使用步骤:
写入控制命令字的D7、D6位控制启停。
写入计数长度:端口地址04H的8位为计数器的低8位
端口地址05H的低6位为计数器的高6位,共14位。
05H的高2位确定当计数器时减到0时的输出方式。P137页
7.8155与8031CPU的连接方法:
8155片内带有地址锁存器,可在ALE的下降沿锁存地址,不必在外部另接锁存器。
由上图得到8155各端口的地址为:
P2.7 = 0 ,片选CE有效;P2.0 = 1,则为端口地址
P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 A7 A6 A5 A4 A3 A2 A1 A0
0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 命令状态口7F00H
0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 PA口7F01H
0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 0 PB口7F02H
0 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 PC口7F03H
0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 0 定时器低位7F04H
0 1 1 1 1 1 1 1 0 0 0 0 0 1 0 1 定时器高位7F05H
P2.7 = 0,片选CE = 0,且P2.0 = 0则为8155片内RAM地址:
7E00H~7EFFH 共256字节。
8155的基本操作软件:
①I/O口及8155RAM的操作软件:
MOV DPTR , #7F00H ;选命令状态口
MOV A, #0C2H ;送命令字1 1 0 0 0 0 1 0 MOVX @DPTR , A ;A口输入、B口输出、C口输入MOV DPTR , #7F01H ;选A口
MOVX A , @DPTR ;从A口输入数据
MOV DPTR , #7E30H ;选8155RAM的30H单元
MOVX @DPTR , A ;将A口输入的数据存入30H单元MOV DPTR , #7F02H ;选B口
MOVX @DPTR , A ;将A口输入的数据转从B口输出
②计数器的软件:
MOV DPTR , #7F04H ;选计数器低8位
MOV A , #18H
MOVX @DPTR , A ;计数常数24装入计数器低8位
1NC DPTR ;选计数器高位
MOV A, #40H
MOVX A ,@DPTR ; 高2位01选择输出方式为连续方波
其低6位为计数器的高6位为00H