8255A并行 I/O 接口芯片

353 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

输入/输出接口电路,是微处理器和外部设备交换信息的通道,是微型计算机的重要组成部分。

    输入/输出接口电路,一方面要(输入)接收来自CPU的地址信号、数据信号和控制信号,另一方面(输出)还要与各种类型的外设相连接,以实现CPU与外设之间的数据传送。

    接口与外设交换的三种信息:数据、状态、控制

典型的并行接口与外设连接的示意图:

94e98dbdd54a4451b4c051b30aa76a13.png

8255A的内部结构

bb694e4ab0e5454db3476328b7a9c12b.png 端口A:输入输出均锁存,数据不易丢失。

端口B:输入不锁存,输出锁存

端口C:输入不所存,输出锁存

通常使用方法:

1、端口A、B作为独立的输入或输出端口

2、端口C 配合 端口A、B。通过方式控制命令分成2个4位端口,传送控制和状态信息。

8255A的引脚及功能

93b01594f07d4858abdcf51d440e70ca.png

(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.

6c38013a4bdf4eaba56de3f467f62598.png

d558332c62604c80951fc3657e36198c.png

(编程)8255A的控制字

根据 D7 位的状态来决定控制字分两类。1为控制字,0为C口的按位置位(控制口)

1、各端口的方式选择控制字:设置 A、B、C 端口的工作方式,及输入/输出

453e1a4948cf44e6b3303edfd8ee1a86.png 2、C端口按位 置1/置0 控制字:C 端口按位 置位/复位 功能

95c1d86092744cef9e93d8f3dbab2178.png

此控制字必须写入 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 中有三位用于端口AI/O控制,另有三位用于端口BI/O控制,并且提供中断逻辑

     3、若只有一个数据端口工作在方式1,则另一个数据端口及端口C余下的五位可工作与方式0;若两个数据端口都工作与方式1,那么端口C余下的两位可作 I/O 位,也可进行置位/复位操作。

方式1的输入:STB非 引脚清零,即可禁止中断响应

52866f4f86644a85b975cfce4b18a43a.png 方式1的输出:OBF非 清零,即可禁止中断

3、方式2 —— 双向传输方式(只适用于端口A)

方式1输入输出的结合

20190103145836563.png 注意:1. 方式2的I/O均为锁存

        2、端口A工作于方式2时,端口B可工作与方式0或方式1

        3、端口C用于5个数位提供控制和状态信号

例题:方式0

4ff656166d11403194fcb899b66fee0f.png 设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