输入/输出接口电路,是微处理器和外部设备交换信息的通道,是微型计算机的重要组成部分。
输入/输出接口电路,一方面要(输入)接收来自CPU的地址信号、数据信号和控制信号,另一方面(输出)还要与各种类型的外设相连接,以实现CPU与外设之间的数据传送。
接口与外设交换的三种信息:数据、状态、控制
典型的并行接口与外设连接的示意图:
8255A的内部结构
端口A:输入输出均锁存,数据不易丢失。
端口B:输入不锁存,输出锁存
端口C:输入不所存,输出锁存
通常使用方法:
1、端口A、B作为独立的输入或输出端口
2、端口C 配合 端口A、B。通过方式控制命令分成2个4位端口,传送控制和状态信息。
8255A的引脚及功能
(1)与外设相连的引脚 24个
PA7 ~ PA0 ——端口 A 数据线
PB7 ~ PB0 ——端口 B 数据线
PC7 ~ PC0 ——端口 C 数据线
(2)与CPU相连的引脚 14个
1. RESET——复位信号
2. D7~D0——8255A的数据线
3. CS——片选信号
4. RD——读信号
5. WR——写信号
6. A1、A0 —— 端口选择信号
脚下留心:因为 8086CPU 低8位和偶地址端口相连,所以在8086系统中,将8255A的A1、A0引脚分别接向系统总线A2、A1,并且CPU对8255A的端口进行访问时,应将其地址最低位A0设置为0.
(编程)8255A的控制字
根据 D7 位的状态来决定控制字分两类。1为控制字,0为C口的按位置位(控制口)
1、各端口的方式选择控制字:设置 A、B、C 端口的工作方式,及输入/输出
2、C端口按位 置1/置0 控制字:C 端口按位 置位/复位 功能
此控制字必须写入 8255A 的控制口
8255A的工作方式
A端口 能工作在所有的三种方式下
B端口 只能工作在方式0 和 方式1下
C端口 只能工作在方式 0 下。
1、方式0 —— 基本输入/输出方式
特点:1、端口A、端口B、端口C上、下均可作为输入或输出口,且各端口均是独立的。
2、四个端口的输入或输出,可以有16中不同的组合。
3、各端口输入时无锁存,输出时锁存。
使用场合:1、同步传送(无条件传送方式)
2、查询方式传送
2、方式1 —— 选通的输入/输出方式
1、用来配合的C口固定
2、可提供中断
工作在方式1 和 方式2 必须要有C口配合,但是有C口配合不一定工作在方式1、2,方式1也行。
必须利用 端口C 提供的选通信号和应答信号等
特点:1、端口A 和 端口B 要在 端口C 的配合下工作。
2、端口C 中有三位用于端口A的 I/O控制,另有三位用于端口B的I/O控制,并且提供中断逻辑
3、若只有一个数据端口工作在方式1,则另一个数据端口及端口C余下的五位可工作与方式0;若两个数据端口都工作与方式1,那么端口C余下的两位可作 I/O 位,也可进行置位/复位操作。
方式1的输入:STB非 引脚清零,即可禁止中断响应
方式1的输出:OBF非 清零,即可禁止中断
3、方式2 —— 双向传输方式(只适用于端口A)
方式1输入输出的结合
注意:1. 方式2的I/O均为锁存
2、端口A工作于方式2时,端口B可工作与方式0或方式1
3、端口C用于5个数位提供控制和状态信号
例题:方式0
设8255A的端口地址为:端口A:00E0H 端口B:00E2H 端口C:00E4H 控制口:00E6H
解析:首先写控制字。
1(控制字) 00(A口方式0) 0(A口输出) 0(C口高位输出) 0(B口方式0) 1(B口输入) 1(C口低位输入)
= 10000011 = 83H
打印机:需打印的字符存在CL中。
脚下留心:在方式0下,我们需要先送入数据,再开启设备,因为8255A方式0下有锁存功能,存放了上次输出的数据,如果先开启设备,就会把上次的数据送出。
MOV AL,83H //设置控制字
MOV DX,0E6H
OUT DX,AL //写入控制口//首先将PC4置1,以防本来是0。(关闭打印机)
MOV DX,0E4H
MOV AL,0000 1001H
OUT DX,AL //查询外设是否准备好
MOV DX,0E4H //C口地址
AGAIN:
IN AL,DX //读C口信息
TEXT AL,0000 0100B //测试AL中D2位的情况 如果为0则zf=1,如果为1则zf=0
JNZ AGAIN //如果打印机没用准备好D2位为0则再次查询//把要打印的数据通过A口送入打印机
MOV AL,CL //CL中存有要打印的字符
MOV DX,0E0H
OUT DX,AL //送数据//启动设备 (通过PC4的按位置位功能)
MOV AL,0000 1000B
MOV DX,0E6H //控制口端口
OUT DX,AL //将C口的D4位置0(启动设备)
//关闭设备
MOV AL,0000 1001B
OUT DX,AL
纸带读入机:将输入的数据送入CL中(输入设备)
MOV AL,83H
MOV DX,0E6H
OUT DX,AL //写入控制字//开启设备
AGINE:
MOV DX,0E4H
MOV AL,0000 1010B
OUT DX,AL //开启读入机//查询设备状态
IN AL,DX
//查询是否准备好,D3位是否为1,如果D3=1(准备好)则zf=0不跳,如果D3=0(未准备好)则zf=1(跳)
TEXT AL,0000 1000B
JZ AGINE //如果设备没有准备好,则再次查询//读入数据
MOV DX,0E2H
IN AL,DX //接收数据
MOV CL,AL //将读入的数据送入CL//关闭设备
MOV AL,0000 1011B
MOV DX,0E6H
OUT DX,AL