微机与接口技术笔记(4)
这章内容讲可编程并行接口8255A
概述
8255A是Intel公司生产的通用可编程并行接口芯片,8255A采用40脚双列直插封装,单一+5V电源,全部输入/输出与TTL电平兼容。
它有三个输入/输出端口:端口A、端口B、端口C。每个端口都可通过编程设定为输入端口或输出端口,但有各自不同的方式和特点。端口C可作为一个独立的端口使用,但通常是配合端口A和端口B的工作,为这两个端口的输入/输出提供控制联络信号。
芯片引脚
8255A芯片有40根引脚:
- 电源与地线2根:Vcc(26脚)、GND(7脚)。
- 与外设相连的共24根。
- PA7~PA0:端口A数据信号(8根)。
- PB7~PB0:端口B数据信号(8根)。
- PC7~PC0:端口C数据信号(8根)。
- RESET(35脚):复位信号,高电平有效。当RESET信号有效时,内部所有寄存器都被清零。同时,3个数据端口被自动设置为输入端口。
- D7~D0:三态双向数据线,在8086系统中,采用16位数据总线,D7~D0通常是接在16位数据总线的低8位上。
- CS(6脚):片选信号,低电平有效。该信号来自译码器的输出,只有当CS有效时,读信号RD和写信WR号才对8255A有效。
- RD(5脚):读信号,低电平有效。它控制从8255A读出数据或状态信息。
- WR(36脚):写信号,低电平有效。它控制把数据或控制命令字写入8255A。
- A1、A0(8、9脚):端口选择信号。8255A内部共有4个端口(即寄存器):3个数据端口(端口A、端口B、端口C)和1个控制端口,当片选信号CS有效时,规定A1、A0为00、01、10、11时,分别选中端口A、端口B、端口C和控制端口。
A1 | A0 | RD | WR | CS | 操作 |
---|---|---|---|---|---|
0 | 0 | 0 | 1 | 0 | 端口A→数据总线 |
0 | 1 | 0 | 1 | 0 | 端口B→数据总线 |
1 | 0 | 0 | 1 | 0 | 端口C→数据总线 |
0 | 0 | 1 | 0 | 0 | 数据总线→端口A |
0 | 1 | 1 | 0 | 0 | 数据总线→端口B |
1 | 0 | 1 | 0 | 0 | 数据总线→端口C |
1 | 1 | 1 | 0 | 0 | 数据总线→控制字寄存器 |
X | X | X | X | 1 | 数据总线为三态(高阻) |
1 | 1 | 0 | 1 | 0 | 非法状态 |
X | X | 1 | 1 | 0 | 数据总线为三态(高阻) |
内部结构
8255A的内部结构包括四个部分:数据总线缓冲器、读写控制逻辑、A组控制器(包括端口A和端口C的上半部)和B组控制器(包括端口B和端口C的下半部)。

A组和B组
端口A和端口C的高4位(PC7~PC4)构成A组,由A组控制部件来对它进行控制;端口B和端口C的低4位(PC3~PC0)构成B组,由B组控制部件对它进行控制。这两个控制部件各有一个控制单元,接收来自数据总线送来的控制字,并根据控制字确定各端口的工作状态和工作方式。
数据总线缓冲器
数据总线缓冲器是一个双向三态的8位缓冲器,它与CPU系统数据总线相连,是8255A与CPU之间传输数据的必经之路。输入数据、输出数据、控制命令字都是通过数据总线缓冲器进行传送的。
读/写控制逻辑
读/写控制逻辑接收来自CPU地址总线的信号和控制信号,并发出命令到A组和B组,把CPU发出的控制命令字或输出的数据通过数据总线缓冲器送到相应的端口,或者把外设的状态或输入的数据从相应的端口通过数据总线缓冲器送到CPU。
在微机80386以上的32位外部数据总线的系统中,则应将8255A的A1端与地址总线的A3相连,将8255A的A0端与地址总线A2相连,并使CPU访问8255A时地址总线的A1、A0两位总是为00。
控制字及状态字
可编程就是用指令的方法先对芯片进行初始化,设置芯片的端口是处于输入数据状态还是处于输出数据状态,以及每个端口的工作方式。要使8255A工作,必须把工作命令控制字写入8255A的控制字寄存器。
8255A共有两种控制字:
- 工作方式选择控制字,可使8255A的3个数据端口工作在不同的方式。
- 端口C按位置位/复位控制字,可使C端口中的任何一位进行置位或复位。
工作方式选择控制字
8255A的3种基本工作方式:由方式选择控制字来决定。
方式0:基本的输入/输出方式。
方式1:选通的输入/输出方式。
方式2:双向的传输方式。
- 端口A可以工作于方式0、方式1、方式2共三种工作方式,可以作为输入端口或输出端口。
- 端口B可以工作于方式0、方式1两种工作方式,可以作为输入端口或输出端口。
- 端口C分成高4位(PC7~PC4)和低4位(PC3~PC0),可分别设置成输入端口或输出端口;端口C的高4位与端口A配合组成A组,端口C的低4位与端口B配合组成B组。
- D7=1(特征位),表明是设定工作方式选择控制字;D7=0为端口C按位置位/复位控制字。
通过对8255A工作方式控制字的设置可将PA、PB和PC 3个端口分别定义为3种不同工作方式的组合,工作方式选择控制字格式及各位含义如图所示。

在使用8255A芯片前,必须先对其进行初始化。初始化的程序很简单,只要CPU执行一条输出指令,把控制字写入控制寄存器就可以了。
例题: 按下述要求对8255A进行初始化。要求A口设定为输出数据,工作方式为方式0;B口设定为输入数据,工作方式为方式1;C口设定为高四位输入,低四位输出。(地址为200H~203H)
1 | MOV DX , 203H ;8255控制口地址送DX |
端口C按位置位/复位控制字
端口C按位置位/复位控制字可实现对端口C的每一位进行控制。置位是使该位为1,复位是使该位为0。
- D7位是特征位。D7=1,为工作方式控制字;D7=0为端口C按位置位/复位控制字。
- D6、D5、D4三位无意义,可为任意值。
- D3、D2、D1按二进制编码,用来选择对端口C的哪一位进行操作。选择的位将由D0位规定是置位(D0=1)还是复位(D0=0)。
- D0位用来选择对所选定的端口C的哪一位是置位(D0=1)还是复位(D0=0)。

需要注意如下三点:
- 端口C按位置位/复位控制字,必须写入控制寄存器,而不是写入端口C。
- 当C端口被设置为输出时,端口C按位置位/复位控制字,可以对C口的某一根端口线按位操作,也就是说,使C口某一根端口线输出高低电平,而不影响其他端口线输出高低电平。
- 当A端口工作在方式1或方式2,B端口工作在方式1时候,端口C按位置位/复位控制字,可以使内部的“中断允许触发器” 置“1”或置“0”
例题:要求通过8255A芯片C口的PC2位产生一个方脉冲信号。(地址为200H~203H)
1 | MOV DX,203H ;控制口地址送DX |
8255A的工作方式
8255A有3种工作方式,可以通过编程来进行设置。
- 方式0为简单I/O,查询方式,端口A、端口B、端口C均可使用。
- 方式1为选通I/O,中断方式,端口A、端口B可以使用。
- 方式2为双向I/O,中断方式,只有端口A可以使用。
工作方式的选择可通过向控制端口写入控制字来实现。在不同的工作方式下,8255A的3个I/O端口的排列如图所示。

方式0
方式0也叫基本输入/输出方式。一种方式,不需要应答联络信号,端口A、端口B和端口C的高4位及低4位都可以作为输入或输出端口。
例: 8255A的PB口为开关量输入,PA口为开关量输出,要求能随时将PB口的开关状态通过PA口的发光二极管显示出来,试编写程序。
开关状态显示程序清单如下所示。
1 | CODE SEGMENT |
方式1
方式1也叫选通的输入/输方式。
方式1输入
当端口A和端口B工作于“方式1输入”时,端口A和端口B可分别作为独立的输入端口,必须有端口C配合端口A和端口B工作。端口C的PC3PC5用作端口A的应答联络线,PC0PC2则用作端口B的应答联络线,PC6和PC7仍可作为基本输入/输出方式即方式0,可通过编程设置为输入或输出。

方式1输出
当端口A和端口B工作于方式1输出时,工作方式选择控制字与端口C控制信号的定义如图所示。

方式2
方式2又称双向传输方式,只有端口A才能工作于方式2。在方式2,外设既可以在8位数据线上往CPU发送数据,又可以从CPU接收数据。
当端口A工作于方式2时,端口C的PC7~PC3用来提供相应的控制和状态信号,配合端口A的工作。此时端口B以及端口C的PC2~PC0则可工作于方式0或方式1,如果端口B工作于方式0时,端口C的PC2~PC0可用作数据输入/输出;如果端口B工作于方式1时,端口C的PC2~PC0用来为端口B提供控制和状态信号。

方式2是一种双向传输工作方式。如果一个并行外部设备既可以作为输入设备,又可以作为输出设备,并且输入输出动作不会同时进行,那么,将这个外部设备的8255A的端口A相连,并让它工作于方式2就很合适。例如,软盘系统就是这样一种外设。
练习题
- 8255A能实现双向传送功能的工作方式为
方式2
? - 8255A在方式0工作时,端口A、B和C的输入/输出可以有
16
种组合。 - 在8255A中,可以进行按位置位/复位的端口是
端口C
。 - 8255A控制字的最高位D7=
1
时,表示设置工作方式选择控制字。
课后题
8255A有哪几种工作方式?有何差别?
答:8255A有三种工作方式:
- 方式0为简单I/O,查询方式
- 方式1为选通I/O,中断方式
- 方式2为双向I/O,中断方式
差别:方式0不需要应答联络信号,端口A,B,C均可使用;方式1的端口A、B仍作为两个独立的8位I/O通道可单独连接外设,而端口C则需要有6位(两个3位)分别作为A、B口的应答联络线,其余2位仍可作为基本I/O即方式0;方式2又称为双向传输方式,只有端口A才能工作与方式2,外设既可以往CPU发送数据,又可以从CPU接受数据,即该外设可兼做输入和输出设备
若8255A的端口A定义为方式0、输入,端口B定义为方式1、输出,端口C的上半部定义为方式0、输出,试编写初始化程序(端口地址为200H~203H)。
1 | MOV DX,203H ; 8255控制口地址送DX |