一,可编程并行接口芯片8255A
并行接口一般具有以下特点:
- 通过多跟信号线同时传送多位数据
- 并行接口多用于传送距离短,数据量大,速度高的实时传输场合
- 传送时一般不需要特定的数据传送格式。
1. 8255A的结构
8255A 组成:
- 三个数据端口(A,B,C)
- A组 和 B组控制逻辑电路
- 数据总线缓冲器
- 读/写控制逻辑
1.1 数据端口
8255A内部包含了三个8位输入/输出数据端口:端口A,端口B,端口C
端口A 和 端口B 可作为8位的输入/输出端口,端口C 既可以作为8位的,也可作为两个4位的(
P
C
7
PC_7
PC7~
P
C
4
PC_4
PC4,
P
C
3
PC_3
PC3~
P
C
0
PC_0
PC0)。
端口C不仅可以作为输入/输出端口,还能配合端口A,端口B工作,用来输出端口A和端口B的控制信号,或用来输入端口A和端口B的状态信息。
三个端口在功能上有不同特点:
- 端口A:可以设置为输入端口,也可以设置成输出端口,还可以设置为双向的8位数据端口,输入/输出时端口都具有锁存器,缓冲器,具有三种工作方式,功能最齐备。
- 端口B:可以设置为输入端口,也可以设置成输出端口,但不能设置为双向的8位数据端口,端口B输入不能锁存,而输出可以锁存,具有两种工作方式。
- 端口C:可以设置为输入端口,也可以设置成输出端口,但不能设置为双向的数据端口,具有位寻址功能,能作为联络线配合端口A和端口B工作,还可能作为两个4位的端口使用。
1.2 端口控制逻辑
端口控制逻辑分为A组和B组:
- A组:管理端口A及端口C的上半部( P C 7 PC_7 PC7~ P C 4 PC_4 PC4)。
- B组:管理端口B及端口C的下半部( P C 3 PC_3 PC3~ P C 0 PC_0 PC0)。
端口控制逻辑的内部有一个控制字寄存器,用于接收CPU输出的控制命令字。
设置工作方式 和 端口的置位/复位。
1.3 数据总线缓冲器
数据总线缓冲器是一个双向三态的8位缓冲器,用于8255A 和系统数据总线之间的连接,在数据交换中起到了 接口 作用。
1.4 读/写控制逻辑
- 读信号 R D ‾ \overline {RD} RD
- 写信号 W R ‾ \overline {WR} WR
- 片选信号 C S ‾ \overline {CS} CS
- 复位信号 RESET:高电平有效,清除8255A控制器中的内存,所有端口置为输入方式。
- 端口选择信号 A 1 A_1 A1, A 0 A_0 A0
C S ‾ \overline {CS} CS | W R ‾ \overline {WR} WR | R D ‾ \overline {RD} RD | A 1 A_1 A1 | A 0 A_0 A0 | 功能 |
---|---|---|---|---|---|
0 | 1 | 0 | 0 | 0 | 端口A送系统数据总线 |
0 | 1 | 0 | 0 | 1 | 端口B送系统数据总线 |
0 | 1 | 0 | 1 | 0 | 端口C送系统数据总线 |
0 | 0 | 1 | 0 | 0 | 系统数据总线送端口A |
0 | 0 | 1 | 0 | 1 | 系统数据总线送端口B |
0 | 0 | 1 | 1 | 0 | 系统数据总线送端口C |
0 | 0 | 1 | 1 | 1 | 系统数据总线送控制字寄存器 |
1 | x | x | x | x | 数据总线高阻态 |
0 | 1 | 0 | 1 | 1 | 非法状态 |
0 | 1 | 1 | x | x | 数据总线高阻态 |
2. 方式选择
初始化的两类控制字(用同一个端口地址):
- 方式选择控制字( D 7 D_7 D7=1)
- 置位/复位控制字( D 7 D_7 D7=0)控制端口C的任一位
2.1 方式选择控制字
8255A 有三种基本的工作方式:
- 方式0:基本输入/输出方式
- 方式1:选通输入/输出方式
- 方式2:双向总线I/O方式
端口A:可选3种方式任一种
端口B:可选方式0,方式1.
端口C:工作在方式0时:高4位的工作方式与端口A一致,低4位的工作方式与端口B一致。
工作在其他两种方式时,端口的部分信号作为A口和B口的控制联络信号。
方式控制字:
2.2 置位/复位控制字(控制端口C的任一位)
D
7
D_7
D7=0(标志位)|
D
6
D_6
D6|
D
5
D_5
D5|
D
4
D_4
D4|
D
3
D_3
D3|
D
2
D_2
D2|
D
1
D_1
D1|
D
0
D_0
D0|
–|–|–|–|–|–|–|–|–|–
D
7
D_7
D7=0(标志位)
D
6
D_6
D6~
D
4
D_4
D4:无意义
D
3
D_3
D3~
D
1
D_1
D1:位选择,确定端口C哪个
P
C
i
PC_i
PCi端口置位
D
0
D_0
D0:置1还是置0
3. 各方式的功能
3.1 方式0的功能
基本输入/输出方式
没有专门的联络信号,即不能采用中断方式或应答式的信号与CPU进行交流。
其主要功能如下:
- 两个独立的8位端口(端口A和B)和两个4位端口(端口C)。实际中也可将C的上下两口当成一个8位口。
- 规定了输出信号可以被锁存,而输入信号不能锁存。
- 各个端口既可以作为输入使用,也可以作为输出使用。
方式0时的方式选择字如:
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
1 | 0 | 0 | X | X | 0 | X | X |
3.2 方式1的功能
选通输入/输出方式
主要功能
- 端口A和端口B都都可作为数据输入/输出端口,但必须通过端口C的相应位控制来实现。
- 端口A或B为方式1 时各占用C端口的3位
输入
方式1的端口 | 端口C | 作用 |
---|---|---|
P C 3 PC_3 PC3 | 用作中断请求信号 I N T R A INTR_A INTRA | |
端口A(方式1输入) | P C 4 PC_4 PC4 | 用作选通信号 S T B A ‾ \overline{STB_A} STBA |
P C 5 PC_5 PC5 | 用作输入缓冲器已满信号 I B F A IBF_A IBFA | |
P C 0 PC_0 PC0 | 用作中断请求信号 I N T R B INTR_B INTRB | |
端口B(方式1输入) | P C 1 PC_1 PC1 | 用作选通信号 S T B B ‾ \overline{STB_B} STBB |
P C 2 PC_2 PC2 | 用作输入缓冲器已满信号 I B F B IBF_B IBFB | |
端口C剩余两位 | P C 6 PC_6 PC6, P C 7 PC_7 PC7 | 由方式字 D 3 D_3 D3定义输入/输出 |
输入联络信号
S
T
B
‾
\overline{STB}
STB—— 选通信号,低电平有效
由外设提供的输入信号,当其有效时,将输入设备送来的数据锁存至8255A的输入锁存器
IBF—— 输入缓冲器满信号,高电平有效
8255A输出的联络信号。当其有效时,表示数据已锁存在输入锁存器,读信号的上升沿使其复位。
INTR—— 中断请求信号,高电平有效
8255A输出的信号,可用于向CPU提出中断请求,要求CPU读取外设数据。读的下降沿使其复位
INTE:中断允许信号,高电平有效。8255A能否向CPU发送中断请求将由该信号控制。INTE不能自动复位/置位,需由软件控制: P C 4 PC_4 PC4 使能端口A的中断允许; P C 2 PC_2 PC2 使能端口B的中断允许。
输出
方式1的端口 | 端口C | 作用 |
---|---|---|
P C 3 PC_3 PC3 | 用作中断请求信号 I N T R A INTR_A INTRA | |
端口A(方式1输出) | P C 6 PC_6 PC6 | 用作外设接收数据后的响应信号 A C K A ‾ \overline{ACK_A} ACKA输入端 |
P C 7 PC_7 PC7 | 用作输出缓冲器已满信号 O B F A ‾ \overline{OBF_A} OBFA | |
P C 0 PC_0 PC0 | 用作中断请求信号 I N T R B INTR_B INTRB | |
端口B(方式1输出) | P C 2 PC_2 PC2 | 用作外设接收数据后的响应信号 A C K B ‾ \overline{ACK_B} ACKB输入端 |
P C 1 PC_1 PC1 | 用作输出缓冲器已满信号 O B F B ‾ \overline{OBF_B} OBFB | |
端口C剩余两位 | P C 4 PC_4 PC4, P C 5 PC_5 PC5 | 由方式字 D 3 D_3 D3定义输入/输出 |
输出联络信号
A
C
K
‾
\overline{ACK}
ACK—— 选通信号,低电平有效
外设的响应信号,指示8255A的端口数据已由外设取走。
O
B
F
‾
\overline{OBF}
OBF—— 输出缓冲器满信号,低电平有效
8255A输出给外设的一个控制信号,当其有效时,表示CPU已把数据输出给指定的端口,外设可以取走
INTR—— 中断请求信号,高电平有效
当输出设备已接受数据后,(INTE有效时) 8255A输出此信号向CPU提出中断请求,要求CPU继续提供数据。
INTE:中断允许信号,高电平有效。8255A能否向CPU发送中断请求将由该信号控制。INTE不能自动复位/置位,需由软件控制: P C 6 PC_6 PC6 使能端口A的中断允许; P C 2 PC_2 PC2 使能端口B的中断允许。
3.3 方式2的功能
双向总线方式
二,可编程定时/计数器 8253
1.概 述
1.1 基本功能:
- 3个计数器,每个8253芯片上有3个独立的16位计数通道
- 每个计数器频率范围为0~2MHZ,其改进型8254-2 的计数频率为0~10MHZ。
- 2种数制计数:二进制 或 十进制
- 6种工作方式
- 与TTL兼容
1.2 基本原理
计数器的 减“1” ,自动重装。
- 控制寄存器
- 初始值寄存器
- 计数器
- 计数输出寄存器
- 状态寄存器
对外有三个信号:
- OUT信号:计数器内容减到“0”时,在OUT信号线上产生一个输出信号。
- CLK信号:输入信号,计数脉冲
- GATE 信号:门控输入:GATE=0,禁止计数器工作。GATE=1,允许计数器工作。
2. 8253 内部结构及引脚
采用NMOS 工艺制成
2.1 数据总线缓冲器
8位的双向三态缓冲器,用于与系统数据总线相连接。
注意奇偶性。
2.2 读/写逻辑电路
C S ‾ \overline {CS} CS | W R ‾ \overline {WR} WR | R D ‾ \overline {RD} RD | A 1 A_1 A1 | A 0 A_0 A0 | 功能 |
---|---|---|---|---|---|
0 | 0 | 1 | 0 | 0 | 置计数器0的初始值 |
0 | 0 | 1 | 0 | 1 | 置计数器1的初始值 |
0 | 0 | 1 | 1 | 0 | 置计数器2的初始值 |
0 | 0 | 1 | 1 | 1 | 设置控制字或输出命令 |
0 | 1 | 0 | 0 | 0 | 读计数器0的计数值 |
0 | 1 | 0 | 0 | 1 | 读计数器1的计数值 |
0 | 1 | 0 | 1 | 0 | 读计数器2的计数值 |
2.3 计数器
2.4 控制寄存器
初始化时写入。
只能写入不能读出。
三个通道共用一个控制寄存器。
3. 8253 的控制字
初始化编程:
- 先写入计数器的控制字
- 然后写入相应计数器的计数初值
控制字分四部分:
- 设定减法计数器的计数方式
- 设定计数器的工作方式
- 设定写入计数初值的格式或读计数器的格式
- 计数器通道的选择。
设定写入计数初值的格式或读计数器的格式中的锁存命令是与读出命令配合使用的,锁存的是计数输出寄存器 而不是计数器,锁存的过程中,计数器还在自减。读计数值时,必须先锁存计数输出寄存器。读完之后,计数锁存寄存器自动解锁,继续跟着计数器变。
4. 8253 的工作方式(6种)
4.1 方式0——计数结束中断方式
- 软件启动,不自动重复计数方式。
- 此时CPU读写时只能读写低8位。
细节:
- OUT:在 控制字CW写入后,OUT引脚输出低电平,直到计数器减到0时立刻变为高电平,可作为中断信号给 8259.
- GATE:初始值写入后,并使 GATE引脚为高电平,计数器才开始递减计数。GATE=0时停止计数!GATE=1时继续计数。GATE不影响OUT的输出。
- 初始值:
- 每次装入计数器只计数一遍后不再重装。
- 计数过程中重新装入初始值:
- 装入8位:会按新的计数初值重新开始计数。
- 装入16位:写入第一个字节后计数器停止计数,写入第二个字节后开始计数。
- 8253 在 W R ‾ \overline {WR} WR上升沿后的下一个CLK脉冲将初始值装入计数器,计数器才开始工作。所以**若设初值N,则在N+1个CLK脉冲OUT才变高。**这在方式1,2,4,5也适用。
4.2 方式1——可编程单稳触发器
- 硬件启动,不自动重复计数。
细节:
- OUT:控制字CW写入后OUT变高电平,写入初值后计数器并不计数,直到GATE信号的上升沿后的下一个CLK脉冲的下降沿才开始计数,OUT变为低电平,直到计数器减为0,OUT才重新变高。
- GATE:起触发作用。允许其重复计数,计数过程中外部可发GATE脉冲再触发,GATE脉冲的上升沿后的一个CLK下降沿计数器开始重新计数。
- 初始值:计数过程中CPU可改写初值但计数过程不受影响,直到重新触发。
4.3 方式2——分频器
- 可软件/硬件启动
细节:
- OUT:写入控制字CW后,OUT输出高电平,写入初始值后,计数器并不计数,直到GATE为高电平时才开始计数,计数期间OUT保持高电平,直到计数器减到1时,OUT输出一个输入时钟宽度的低电平。然后OUT恢复高电平,计数器继续重新开始计数。
- GATE:计数过程中,GATE=0时迫使OUT变为高电平,并停止计数器的计数操作;GATE=1计数器继续计数。GATE每一次上升沿都会适CR向CE的装入操作。
- 初始值:计数过程中可以改写初始值,将在下次生效。
4.4 方式3——方波发生器
可软件/硬件启动,可重复计数。
细节:
- OUT:写入控制字CW后,OUT变为高电平,写入初值后计数器并不计数,直到GATE变为高电平才开始计数,计数完成一半适计数器改变输出状态——由高变低,直至计数全部完成,OUT恢复为高电平。重复这个过程。
- GATE 同方式 2
- 初始值:初始值N为偶数时,输出占空比为50%;初始值M为奇数时高电平占(M+1)/2,低电平 (M-1)/2,。计数过程中写入初值,下次生效。
4.5 方式4—— 软件触发选通
- 软件启动,不自动重复计数方式。
细节:
- OUT:在 控制字CW写入后,OUT引脚输出低电平,直到计数器减到0时立刻变为高电平,可作为中断信号给 8259.
- GATE:初始值写入后,并使 GATE引脚为高电平,计数器才开始递减计数。GATE=0时停止计数!GATE=1时继续计数。GATE不影响OUT的输出。
- 初始值:
- 计数过程中改变初始值会立刻从新的初始值开始计数。
4.6 方式5—— 硬件触发选通
- 硬件启动,不自动重复计数方式。
细节:
- OUT:控制字CW写入后OUT变高电平,写入初值后计数器并不计数,直到GATE信号的上升沿才开始计数,直到计数器减为0,OUT变低,一个CLK脉冲后OUT恢复变高,并停止计数直到下次GATE触发。
- GATE:初始值写入后, GATE的上升沿计数器才开始递减计数。计数过程中又有上升沿则重新开始计数但对OUT无影响。
- 初始值:
- 计数过程中改变初始值在下一次GATE上升沿才会生效。