并行接口:指数据的各位同时进行传送的数据通信接口。
数据传输方式
无条件传输 | 简单直接,无需握手 |
查询方式 | CPU主动查询外设状态 |
中断方式 | 外设主动请求CPU服务 |
DMA方式 | 直接存储器访问,无需CPU干预 |
8255A 是 Intel 公司为 8080/8085/8088 微型机系统设计的通用可编程I/O接口芯片:
可编程:用程序设置工作方式,无需附加外部电路 通用性强,使用灵活 单电源 +5V 供电
8255A 提供 3个8位端口(共24条I/O线):
端口 | 输入 | 输出 |
|---|---|---|
PA | 锁存 | 缓冲/锁存 |
PB | 缓冲 | 缓冲/锁存 |
PC | 缓冲 | 缓冲/锁存 |
注:端口A输入带锁存,这是与B、C口的区别。 锁存 = 有记忆,保持住最后一次给的值; 不锁存 = 没有记忆,输出随输入实时变化,输入消失了输出也就消失了。
数据线
输入操作(读) | |||||
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 | 数据总线→控制字寄存器 |
断开功能 | |||||
× | × | × | × | 1 | 数据总线→三态 |
1 | 1 | 0 | 1 | 0 | 非法状态 |
× | × | 1 | 1 | 0 | 数据总线→三态 |
控制字
8255A 的工作方式由 CPU通过I/O指令向控制字寄存器写入控制字 来设置。
方式选择控制字(D7=1)
1 | A组 | B组 |
D7 = 1:方式选择控制字标志位
D6D5:A组工作方式(00=方式0,01=方式1,1X=方式2)
D4:PA口方向(1=输入,0=输出)
D3:PC高4位方向(1=输入,0=输出)
D2:B组工作方式(0=方式0,1=方式1)
D1:PB口方向(1=输入,0=输出)
D0:PC低4位方向(1=输入,0=输出)
如:A组方式0,B组方式1,PA输入,PB输出,PC输入
对应控制字 = 1 00 1 1 1 0 1 = 99H (10011001B)
C端口按位置位/复位控制字(D7=0)
0 | 无效位 | 指定C端引脚 | 电平 |
用于单独控制PC口某一位的输出电平:
D7 = 0:置位/复位控制字标志
D6~D4:无效位
D3~D1:选择PC口的位号(000=PC0,...,111=PC7)
D0(D3~D1选的PC口置值):1=置位(高电平),0=复位(低电平)
一次只能指定一个引脚。
工作方式
方式0 | 基本输入输出 | 简单无条件传输 |
方式1 | 选通输入输出 | 单向可选择,带联络信号 |
方式2 | 双向选通输入输出 | 双向传输,仅A口可用 |
0:基本输入输出
任一个端口(8位端口(A、B)和两个4位端口(C))可独立设置为输入或输出
输出是锁存的:锁存输出数据,最大并行输出24位
输入是不锁存的:仅缓冲外设输入数据
PC口上半部分与下半部分可定义不同方向
应用场景:
无条件读写:CPU直接与8255交换数据 查询方式:利用PC某些位作为PA、PB口的控制和状态信息
例1:初始化与数据传送
设定:A组、B组方式0,PA口和PC口输入,PB口输出;8255地址 50H-53H
控制字:1 00 1 1 0 0 1 = 99H
初始化程序:
MOV AL, 99H OUT 53H, AL ; 写入控制字寄存器 将PA数据输出到PB: IN AL, 50H ; 读PA口 OUT 51H, AL ; 写到PB口 将PC数据存入1000H: MOV BX, 1000H IN AL, 52H ; 读PC口 MOV [BX], AL1:选通输入输出
端口A或B作为数据的的输入/输出,端口C的某些位作为专用联络信号线 需要设置专用的联络信号线/应答信号线 数据传送可采用查询方式或中断方式 数据的输入输出都有锁存功能 每个端口包括:8位数据口 + 3条挂钩线,提供查询/中断逻辑
若A、B口都工作于方式1,PC口大部分引脚分配为固定联络信号;若只有一个端口工作于方式1,剩余13位(24-11)可工作在方式0
方式1输入(A组)联络信号:
STB (选通输入) | PC4 | 外设发出的数据选通信号,低电平有效 |
|---|---|---|
IBF (输入缓冲器满) | PC5 | 8255发出的状态信号,高电平有效 |
INTR (中断请求) | PC3 | 向CPU发出的中断请求,高电平有效 |
方式1输出(A组)联络信号:
OBF (输出缓冲器满) | PC7 | 8255发出的信号,低电平有效 |
|---|---|---|
ACK (响应) | PC6 | 外设发出的应答信号,低电平有效 |
INTR (中断请求) | PC3 | 向CPU发出的中断请求,高电平有效 |
方式1输入(B组)联络信号:
信号 | 引脚 | 功能 |
|---|---|---|
STB | PC2 | 选通输入 |
IBF | PC1 | 输入缓冲器满 |
INTR | PC0 | 中断请求 |
方式1输出(B组)联络信号:
信号 | 引脚 | 功能 |
|---|---|---|
OBF | PC1 | 输出缓冲器满 |
ACK | PC2 | 响应 |
INTR | PC0 | 中断请求 |
2:双向选通输入输出(Bidirectional,仅A可)
一个 8位双向总线端口(A) + 一个 5位控制端口(C,用于用作A的控制和状态信息)
输入和输出都是锁存的
可用程序查询或中断方式与CPU联系
联络信号:
信号 | 引脚 | 方向 | 功能 |
|---|---|---|---|
STB | PC4 | 输入 | 外设选通输入 |
IBF | PC5 | 输出 | 输入缓冲器满 |
OBF | PC7 | 输出 | 输出缓冲器满 |
ACK | PC6 | 输入 | 外设响应 |
INTR | PC3 | 输出 | 中断请求 |
中断允许位 INTE 的操作
端口 | 方式 | INTE控制位 | 置位/复位控制字 |
|---|---|---|---|
PA | 方式1或2 | PC4(输入), PC6(输出) | 0XXX1001B (置位PC4) 0XXX1101B (置位PC6) |
PB | 方式1 | PC2(输入/输出) | 0XXX0101B (置位PC2) |
INTE 是内部中断允许触发器,通过C口按位置位/复位命令设置。