接口电路
•可编程并行口 8255
8255A
由以下几部分组成:1 .数据端口 A 、 B 、 C 2 . A 组控制和 B 组控制 3 .读 /写控制逻辑电路 4 .数据总线缓冲器
1 .数据端口 A 、 B 、 C
(1) 端口 A :对应一个 8 位数据输入锁存器和一 个 8 位数据输出锁存器 /缓冲器。
(2) 端口 B :对应一个 8 位数据输入缓冲器和一 个 8 位数据输出锁存器 /缓冲器。
(3) 端口 C :对应一个 8 位数据输入缓冲器和一 个 8 位数据输出锁存器 /缓冲器。
当端口 B 和 C 作为输入端口时,对数据不作锁存
,而作为输出端口时,对数据进行锁存。
2 . A 组控制和 B 组控制
*A 组控制电路控制端口 A 和端口 C 的高 4 位 (PC7 ~ PC4) 的工作方式和读 /写操作。
*B 组控制电路控制端口 B 和端口 C 的低 4 位 (PC3 ~ PC0) 的工作方式和读 /写操作。
这两组控制电路一方面接收芯片内部总线上的 控制字,一方面接收来自读 /写控制逻辑电路的读 / 写命令,据此而决定两组端口的工作方式和读 /写 操作。
3 .读 /写控制逻辑电路
读 /写控制逻辑电路负责管理 8255A 的数据传输 过程。它接收 *CS 及来自系统地址总线
信号 A1 、 A0 和控制总线的信号 RESET 、 *WR 、
*RD ,将这些信号进行组合后,得到对 A 组控制部件 和 B 组控制部件的控制命令,并将命令发给这两个部 件,以完成对数据、状态信息和控制信息的传输。
4 .数据总线缓冲器
这是一个双向三态的 8 位数据缓冲
器, 8255A 正是通过它与系统数据总线相连。输 入数据、输出数据、 CPU 发给 8255A 的控制字都 是通过这个缓冲器传递的。
8255A
芯片的引腿信号,可以分为两组:
1. 和外设一边相连的
PA7 ~ PA0 : A 组数据信号 PB7 ~ PB0: B 组数据信号
PC7 ~ PC0 : C 组数据信号
2. 和 CPU 一边相连的
RESET: 复位信号,低电平有效。当 RESET 信号 来到时,所有内部寄存器都被除,同时, 3 个数据端 口自动设为输入端口。
*RD :芯片读出信号,低电平有效。此时, CPU 可以从 8255A 中读取输入数据。
*WR :芯片写入信号,低电平有效。此
时, CPU 可以往 8255A 中写入控制字或数据。
D7 ~ D0 :它们是 8255A 的数据线,和系统数 据总线相连。
A1 、 A0 :端口选择信号。 8255A 内部有 3 个 数据端口和一个控制端口。当 A1 、 A0 为 00 时,选 中 A 端口;为 0l 时,选中 B 端口;为 l0 时,选中 C 端口;为 11 时,选中控制口。
*CS :芯片选择信号,低电平有效。在一个系统 中,一般根据全部接口芯片来分配若干较低位地址组 成各种芯片选择码,当这几位地址组成某一个代码时
,译码器便往 8255A 的 *CS 端输出一个低电平,于 是, 8255A 被选中。只有当 *CS 有效时,读信号
*RD 和写信号 *WR 才对 8255A 有效。
工作原理
8255A 有三种基本工作方式:
方式 0 :基本的输入 /输出方式 方式 1 :选通的输入 /输出方式 方式 2 :双向传输方式
D7 D6 D5 D4 D3 D2 D1 D0
控 制 寄 存 器 标 志 位
组 方 式 选
A择
00- 方式 0 01- 方式 1 10- 方式 2
A端口
0- 输 出 1- 输 入
C端口高四位
0- 输出 1- 输入
B组方式选择
0- 方式 0 1- 方式 1
B端口
0- 输 出 1- 输 入
C端口低四位
0- 输 出 1- 输 入
⒈ 方式 0
方式 0 也叫基本输入 /输出方式。在这种方式 下,端口 A 和端口 B 可以通过方式选择字规定为输 入口或者输出口,端口 C 分为 2 个 4 位端口,高 4 位为一个端口,低 4 位为一个端口。这两个 4 位端 口也可由方式选择字规定为输入口或输出口。方式 0 的特点如下:
① 任何一个端口可作为输入口,也可作为输 出口,各端口之间没有规定必然的系。
② 各个端口的输入或输出,可以有 16 种不同 的组合,适用于多种使用场合。
⒉ 方式 1
⑴ 方式 1 的工作特点
方式 1 也叫选通的输入 /输出方式。和方式 0 相比,最重要的差别是 A 端口和 B 端口用方式 1 进 行输入 /输出传输时,要利用端口 C 提供的选通信 号和应答信号,而这些信号与端口 C 中的数位之间 有着固定的对应关系,这种关系不是程序可以改变 的,除非改变工作方式。
方式 1 有如下特点:
① 端口 A 和端口 B 可分别作为两个数据口工 作在方式 1 ,并且,任何一个端口可作为输入口或 者输出口。
② 如果 8255A 的端口 A 和端口 B 中只有一个 端口工作于方式 1 ,那么,端口 C 中就有 3 位被规 定为配合方式 1 工作的信号,此时,另一个端口可 以工作在方式 0 ,端口 C 中的其他数位也可以工作 在方式 0 ,即作为输入或输出。
③ 如果 8255A 的端口 A 和端口 B 都工作在方 式 1 ,那么,端口 C 中就有 6 位被规定为配合方式 1 工作的信号,剩下的 2 位,仍可作为输入或输出。
(2) 方式 1 输入情况下有关信号的规定
当端口 A 工作在方式 1 并作为输入端口时,端 口 C 的数位 PC4 作为选通信号输入 *STBA , PC5 作为输入缓冲区满信号输出 IBFA , PC3 作为中断 请求信号输出 INTRA 。
当端口 B 工作在方式 1 并作为输入端口时,端 口 C 的数位 PC2 作为选通信号输入 *STBB , PC1 作为输入缓冲区满信号输出 IBFB , PC0 作为中断 请求信号输出 INTRB 。
当 8255A 的端口 A 和端口 B 都工作在方式 1 的输入情况时,端口 C 的 PC0 ~ PC5 共 6 个数位 都被定义。此时, PC6 和 PC7 可用方式选择控制 字的 D3 位来定义数据传输方向:当 D3 为 1 时,作 为输入;当 D3 为 0 时,作为输出。
各控制信号说明:
① *STB(Strobe) :这是选通信号输入端,低 电平有效。它是由外设送往 8255A 的。当 *STB 效 时, 8255A 接收外设送来的一个 8 位数据,从而 8255A 的输入缓冲器中得到一个新的数据。
② IBF(Input Buffer Full) :缓冲器满信号,高 电平有效。它是 8255A 输出的状态信号,当它有效 时,表示当前已有一个新的数据在输入缓冲器中,
此信号供 CPU 查询用。 IBF 信号是由 *STB 信号使 其置位的,而由读信号 *RD 的后沿即上升沿使其复 位。
③ INTR(Interrupt Request) :它是 8255A 送往 CPU 的中断请求信号,高电平有效。 INTR 在
*STB 、 IBF 均为高时被置为高电平,也就是说,
当选通信号结束、从而已将一个数据送进输入缓冲 器中,并且输入缓冲器满信号已为高电平
时, 8255A 会向 CPU 发出中断请求信号,即将 INTR 置为高电平。在 CPU 响应中断读取输入缓冲 器中的数据时,由读信号 *RD 的下降沿将 INTR 降 为低电平。
④ INTE(Interrupt Enable) :中断允许信 号。,它是控制中断允许或中断屏蔽的信
号。 INTE 没有外部引出端,它是由软件通过对 C 端口的置 1 或置 0 指令来实现对中断的控制 的。
例如,对 PC4 置 1 ,则使 A 端口处于中断 允许状态;对 PC4 置 0 ,则使 A 端口处于中断 屏蔽状态。与此类似,对 PC2 置 1 ,则使 B 端 口处于中断允许状态;对 PC2 置 0 ,则使 B 端 口处于中断屏蔽状态。
(3) 方式 1 输出情况下有关信号的规定
当端口 A 工作在方式 1 并作为输出端口时,端口 C 的 PC7 作为输出缓冲器满信号 *OBFA 输出
端, PC6 作为外设接收数据的响应信号 *ACKA 输入 端, PC3 作为中断请求信号 INTRA 输出端。
当端口 B 工作在方式 l 并作为输出端口时,端口 C 的 PC1 作为输出缓冲器满信号 *OBFB 输出
端, PC2 作为外设接收数据的响应信号 *ACKB 输入 端, PC0 作为中断请求信号 INTRB 输出端。
当端口 A 和端口 B 都工作在方式 1 输出情况下时
,端口 C 中共有 6 个数位被定义为控制信号端和状态 信号端使用。此时,剩下的 PC4 、 PC5 这 2 位可用 方式选择字的 D3 位来定义传输方向:当 D3 为 1 时
, PC4 、 PC5 作为输入;当 D3 为 0 时, PC4 、 PC5 作为输出。
对于方式 1 时输出端口对应的控制信号和状态信 号,作如下说明:
① *OBF(0utput Buffer Full) :输出缓冲器满信 号,低电平有效。 *OBF 由 8255A 送给外设,当
*OBF 有效时,表示 CPU 已经向指定的端口输出了数 据,所以, *OBF 是 8255A 用来通知外设取走数据 的信号。 *OBF 由写信号 *WR 的上升沿置成有效电 平,而由 *ACK 的有效信号使它恢复为高电平。
② *ACK(Acknowledge) :外设响应信号,它是 由外设送给 8255A 的,低电平有效。当 *ACK 有效 时,表明 CPU 通过 8255A 输出的数据已送到外设。
③ INTR(Interrupt Request) :中断请求信号
,高电平有效。当输出设备从 8255A 端口中提取数 据,从而发出 *ACK 信号后, 8255A 便向 CPU 发 新的中断请求信号,以便 CPU 再次输出数据,所以
,当 *ACK 变为高电平,并且 *OBF 也变为高电平 时, INTR 便成为高电平即有效电平,而当写信号
*WR 的下降沿来到时, INTR 变为低电平即复位。
④ INTE(Interrupt Enable) :中断允许信号。
与端口 A ,端口 B 工作在方式 1 输入情况时 INTE 的 含义一样, INTE 为 1 时,使端口处于中断允许状态
,而 INTE 为 0 时,使端口处于中断屏蔽状态。在使 用时, INTE 也是由软件来设置的。
例如, PC6 为 1 ,则使端口 A 的 INTE 为 1 , 处于中断允许状态; PC6 为 0 ,则使端口 A 的 INTE 为 0 ,处于中断屏蔽状态。 PC2 为 1 ,使端口 B 的 INTE 为 1 ; PC2 为 0 ,则使端口 B 的 INTE 为 0 。
例: PA 方式 1 输入, PB 方式 1 输出
例: PA 方式 1 输出, PB 方式 1 输入
3 .方式 2
(1) 方式 2 的工作特点
方式 2 也叫双向传输方式。在方式 2 下,外设 可以在 8 位数据线上往 CPU 发送数据,也可从
CPU 接收数据。
与方式 1 类似,端口 C 在端口 A 工作于方式 2 时自动提供相应的控制信号和状态信号。
方式 2 有如下特点:
① 方式 2 只适用于端口 A 。
② 端口 A 工作于方式 2 时,端口 C 的 PC3 ~ PC7 共 5 个数位自动配合端口 A 提供控制信号和状 态信号。
(2) 方式 2 工作时的控制信号和状态信号
① INTRA(Interrupt Request) :中断请求信号
,高电平有效。不管是输入还是输出,当一个操作完 成,要进入下一个操作时, 8255A 都通过这一引腿 向 CPU 发出中断请求信号。
② *STBA(Strobe) :这是外设供给 8255A 的选 通信号,低电平有效。此信号将外设送到 8255A 的 数据打入输入锁存器。
③ IBFA(Input Buffer Full) :这是 8255A 送往 CPU 的状态信息,表示当前已有一个新的数据送到输 入缓冲器中,等待 CPU 取走。 IBFA 可以作为供 CPU 查询的信号。
④ *OBFA(Output Buffer Full) :输出缓冲器 满信号。它是一个由 8255A 送给外设的状态信号
,低电平有效。当 *OBFA 有效时,表示 CPU 已 经将一个数据写入 8255A 的端口 A ,通知外设将 数据取走。
⑤ *ACKA(Acknowledge) :外设对 *OBFA 信号的响应信号,低电平有效,它使 8255A 的端 口 A 的输出缓冲器开启,送出数据。否则,输出缓 冲器处于高阻状态。
⑥ INTE1(Interrupt Enable) :中断允许信
号。 INTE1 为 1 时,端口 A 的输出处于中断允许状 态,允许 8255A 由 INTR 往 CPU 发中断请求信号,
以通知 CPU 往 8255A 的端口 A 输出一个数据;
INTE1 为 0 时,则屏蔽了输出中断请求,这时,即使 8255A 的数据输出缓冲器空了,也不能在 INTR 端产 生中断请求。 INTE1 是由软件通过对 PC6 的设置来 决定的, PC6 为 1 ,则 INTE1 为 1 , PC6 为 0 , 则 INTEl 为 0 。
⑦ INTE2(Interrupt Enable) :中断允许信号。
当 INTE2 为 1 时,端口 A 的输入处于中断允许状态
;当 INTE2 为 0 时,端口 A 的输入处于中断屏蔽状 态。 INTE2 是软件通过对 PC4 的设置来决定为 1 还 是为 0 的,将 PC4 置 1 时,使 INTE2 为 1 , PC4 为 0 时,则使 INTE2 为 0 。
例: PA 方式 2 , PB 方式 0 输入, PC 输出
例: PA 方式 2 , PB 方式 1 输出
㈢ 编程
8255A 的输入输出共有 3 种工作方式,所以 在其工作之前必须由程序预先进行设置。
8255A 可以通过指令在控制端口中设置控制 字来决定它的工作方式。
* 方式选择控制字的第 7 位总是 1
* 端口 C 置 1/ 置 0 控制字的第 7 位总是 0
8255A 是通过这一位来识别这两个同样写入控制 端口中的控制字的,所以:
1 称为方式选择控制字的标识符
0 称为 C 端口按位置 1/ 置 0 控制字的标识符
方式选择控制字的格式如下所示:
* 芯片各端口的方式选择控制字可以使 8255A 的 3 个数据端口工作在不同的工作方式。
* 方式选择控制字总是将三个数据端口分为两组 来设定工作方式,即端口 A 和端口 C 的高 4 位作为 一组,端口 B 和端口 C 的低 4 位作为一组。
* 归为同一组的两个端口可以分别工作在输入方 式和输出方式,并不要求同为输入方式或同为输出方 式。而一个端口具体作为输入端口还是输出端口,由 方式选择控制字来决定。
端口 C 数位置 1/ 置 0 控制字如下所示
:
C 端口按位置 1/ 置 0 控制字,它可以使 C 端 口中的任何一位进行置位或复位。
例:编写 8255 初始化程序,设置为:端口 A 为方 式 0 输入,端口 B 为方式 1 输出, C 口除了 B 口 方式 1 的配合组合位外, PC3 为输入,上半口
( PC4 ~ PC7 )为输出。控制字如下:
控制字为 95H ,假设 8255 的端口地址为 00 H ~ 03H ,因此,芯片的地址分配为:
端口 A 为 00H 端口 B 为 01H 端口 C 为 02H 控制口为 03H
用各端口进行输入输出前,应先执行初始化指 令: MOV AL , 95H(1001 0101B)
OUT 03H , AL
初始化指令后,各端口就能按设置的方式进 行工作了。如:
端口 A 的输入
IN AL , 00H
在中断方式下,端口 B 的输出 OUT 01H , AL
端口 C 下半部的输入 IN AL , 02H 可读入 PC3 的位值 端口 C 上半部的输出 OUT 02H , AL
可输出 PC4 ~ PC7 的位值