并行通信及接口电路 - 第14章
北京大学《计算机组织与系统结构》课程第二部分第14章 教材配套PPT,90页
本章核心内容
- 简单并行接口电路:74LS373锁存器、74LS244缓冲器、74LS245总线收发器
- 可编程并行接口 8255A:结构、工作原理、控制字
- 8255A 的三种工作方式:方式0(基本I/O)、方式1(选通I/O)、方式2(双向)
- 8255A 应用实例:开关输入+LED显示、打印机接口、交通灯控制
一、并行通信概述
1.1 两种基本数据传送方式
| 方式 | 定义 | 特点 | 适用场景 |
|---|---|---|---|
| 串行传送 | 数据在单条1位宽传输线上按时间先后一位一位传送 | 传输线少、成本低、速率低 | 长距离、低速率通信 |
| 并行传送 | 数据在多位宽传输线上各位同时传送 | 传输率高、线数多、成本高 | 短距离、高速率通信 |
同样时钟速率下,并行传送的数据传输率高于串行传送。并行通信适用于信息传输率要求较高而传输距离较短的场合。
1.2 本章结构
- 先介绍简单(不可编程)并行接口:锁存器、缓冲器、总线收发器
- 再重点介绍可编程并行接口 8255A:结构、控制字、三种工作方式、典型应用
二、简单并行接口电路
三种常用的简单并行I/O接口芯片:
2.1 锁存器 74LS373
8位D锁存器,三态控制输出。
引脚组成
- 8个输入端:1D~8D
- 8个输出端:1Q~8Q
- 两个控制端:
- G(选通端):高电平时输出跟随输入(透明模式);低电平时锁存当前数据
- OE(输出允许):低电平有效,允许输出;高电平时输出为高阻态
真值表
| 选通 G | 输出允许 OE | 输入 D | 输出 Q |
|---|---|---|---|
| H | L | L | L |
| H | L | H | H |
| L | L | X | Q0(原状态,锁存) |
| X | H | X | Z(高阻态) |
工作原理
- G=高电平:Q跟随D变化(透明锁存器)
- G下降沿:数据被锁存
- OE=高电平:输出三态,与总线隔离
典型应用
- 总线传输电路中锁存地址信息或数据信息
- 总线信号的缓冲与驱动
- 类似芯片:Intel 8282/8283
2.2 缓冲器 74LS244
三态输出的8位缓冲器/驱动器。
结构特点
- 分为两路,每路4位:
- 1A1~1A4 → 1Y1~1Y4,由 1G 控制
- 2A1~2A4 → 2Y1~2Y4,由 2G 控制
- 单向传送(A→Y)
- 控制信号低电平有效;无效时输出高阻态
典型应用
- 存储器地址驱动器
- 单向总线接收器和发送器
- 可提供特定的8位二进制代码(如中断类型码)
2.3 数据总线收发器 74LS245
三态输出的8位双向总线收发器(transceiver)。
引脚组成
- 16个双向数据端:A1~A8 和 B1~B8
- 两个控制端:
- G(允许端):低电平有效;高电平时两端口均为高阻(隔开状态)
- DIR(方向控制端):决定数据传送方向
真值表
| 允许 G | 方向控制 DIR | 数据传送方向 |
|---|---|---|
| L | L | B → A |
| L | H | A → B |
| H | X | 隔开(高阻) |
典型应用
- 数据的双向传送、缓冲与驱动
- 类似芯片:Intel 8286/8287
2.4 应用举例
例1:74LS373 用于地址信号锁存(80386DX系统)
- 5片 74LS373 锁存 30 位地址(A2~A31)+ 4 个字节允许信号(BE0~BE3)
- 各片选通端 G 均由 ALE(地址锁存允许) 信号驱动
- OE 固定接逻辑0,输出始终允许
例2:74LS245 用于数据总线收发器(80386DX系统)
- 4片 74LS245 实现32位双向总线驱动
- DIR 由 DT/R(数据发送/接收)控制
- G 由 DEN(数据允许)控制
- 74LS245 的 IOL(输出低电平负载电流)额定值为 64mA
- 80386DX 数据总线最多仅能吸收 4mA 电流
- 增设收发器可极大增强总线驱动能力
三、可编程并行接口 8255A
3.1 性能概要
- Intel 8255A 是通用可编程并行接口芯片,专为 8080/8085 设计,也可用于其他微机系统
- 40脚双列直插封装,单一 +5V 电源,全部I/O与TTL电平兼容
- 三个8位端口:端口A、端口B、端口C
- 每个端口可通过编程设定为输入或输出
- 端口C常配合端口A和端口B工作,提供控制联络信号
3.2 引脚信号
(1) 电源与地线(2条)
- Vcc、GND
(2) 与外设相连(24条)
- PA7~PA0:端口A数据信号
- PB7~PB0:端口B数据信号
- PC7~PC0:端口C数据信号
(3) 与CPU相连(14条)
| 信号 | 方向 | 功能 |
|---|---|---|
| RESET | 入 | 复位信号,高电平有效。有效时所有内部寄存器清除,3个端口自动设为输入 |
| D7~D0 | 双向 | 8位双向数据线,接系统数据总线 |
| CS | 入 | 片选信号,低电平有效。来自地址译码器 |
| RD | 入 | 读信号,低电平有效。控制从8255A读出数据/状态 |
| WR | 入 | 写信号,低电平有效。控制写入数据/控制命令 |
| A1、A0 | 入 | 端口选择信号:00=端口A,01=端口B,10=端口C,11=控制端口 |
端口选择和基本操作表
| A1 | A0 | RD | WR | CS | 操作 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 1 | 0 | 端口A → 数据总线(读A口) |
| 0 | 1 | 0 | 1 | 0 | 端口B → 数据总线(读B口) |
| 1 | 0 | 0 | 1 | 0 | 端口C → 数据总线(读C口) |
| 0 | 0 | 1 | 0 | 0 | 数据总线 → 端口A(写A口) |
| 0 | 1 | 1 | 0 | 0 | 数据总线 → 端口B(写B口) |
| 1 | 0 | 1 | 0 | 0 | 数据总线 → 端口C(写C口) |
| 1 | 1 | 1 | 0 | 0 | 数据总线 → 控制字寄存器(写控制字) |
| X | X | X | X | 1 | 数据总线三态(无操作) |
| 1 | 1 | 0 | 1 | 0 | 非法操作(不能读控制口) |
3.3 内部结构
8255A 由四部分组成:
- 数据总线缓冲器:双向三态8位缓冲器,CPU与8255A之间的接口
- 三个端口:端口A、端口B、端口C(各8位)
- 两组控制:
- A组控制:控制端口A + 端口C高4位(PC7~PC4)
- B组控制:控制端口B + 端口C低4位(PC3~PC0)
- 读写控制逻辑:管理数据传输过程
端口C可以分成两个4位端口,分别为端口A和端口B提供控制和状态信息。
3.4 8255A 的控制字
1. 方式选择控制字(8位,D7=1)
D7 D6 D5 D4 D3 D2 D1 D0
1 └─┬─┘ └┘ └┘ └─┬─┘ └┘ └┘
方式 A口 PC高 B组 B口 PC低
A组 输入 4位 方式 输入 4位
00=方式0 00=方式0 1=输入
01=方式1 1=输入 01=方式1 0=输出
1x=方式2 0=输出 1=输入
0=输出
- D7=1 是方式选择控制字的标识位
- A组有三种方式(方式0、方式1、方式2)
- B组有两种方式(方式0、方式1)
- 每个端口的输入/输出可独立设定
示例:A口方式0输出,B口方式0输入,C高4位输出,C低4位输入 → 控制字 = 10000011B = 83H
MOV DX, 28BH ; 控制口地址
MOV AL, 83H ; 方式选择控制字
OUT DX, AL ; 写入控制口2. 端口C按位置1/置0控制字(8位,D7=0)
D7 D6 D5 D4 D3 D2 D1 D0
0 └──┬──┘ └──┬──┘ └┘
无关(XXX) 位选择 1=置1
0=置0
位选择编码:
000=PC0 001=PC1 010=PC2 011=PC3
100=PC4 101=PC5 110=PC6 111=PC7
- D7=0 是端口C置位/复位控制字的标识位
- 该控制字必须写入控制口(不是端口C)
- D0位决定置1还是置0
- D3~D1选择操作哪一位
示例:对PC6位置0 → 控制字 = 00001100B = 0CH
MOV DX, 28BH
MOV AL, 0CH ; PC6置0控制字
OUT DX, AL ; 写入控制口四、8255A 的三种工作方式
4.1 方式0 —— 基本输入/输出方式
特点
- 端口A和端口B可独立设为输入或输出
- 端口C分为高4位和低4位两个4位端口,也可分别设为输入或输出
- 共 2⁴ = 16种不同组态
- 没有专门的应答信号,适用于简单外设
典型应用
- 向LED显示器输出
- 从二进制开关装置输入
4.2 方式1 —— 选通的输入/输出方式
特点
- 端口A和端口B工作于方式1时,必须利用端口C的固定数位来接收/提供联络信号
- 信号与数位之间存在固定对应关系,不能用程序改变
- 支持中断方式数据传送
(1) 方式1 输入
端口C联络信号分配:
| 端口A | 信号 | 方向 | 功能 |
|---|---|---|---|
| PC4 | STBA(选通) | 入 | 低电平有效,外设送来数据选通信号 |
| PC5 | IBFA(输入缓冲器满) | 出 | 高电平有效,通知外设数据已锁存,不要送新数据 |
| PC3 | INTRA(中断请求) | 出 | 高电平有效,向CPU发中断请求 |
| PC6、PC7 | I/O | — | 未用,可作普通I/O |
| 端口B | 信号 | 方向 | 功能 |
|---|---|---|---|
| PC2 | STBB(选通) | 入 | 低电平有效 |
| PC1 | IBFB(输入缓冲器满) | 出 | 高电平有效 |
| PC0 | INTRB(中断请求) | 出 | 高电平有效 |
关键信号说明:
- STB(Strobe,选通输入):外设送数据给8255A的选通脉冲。低电平有效,将外设数据锁存到输入缓冲器。
- IBF(Input Buffer Full,输入缓冲器满):8255A输出给外设的回答。STB使其置位,RD上升沿使其复位。
- INTR(Interrupt Request,中断请求):当 STB=1、IBF=1、INTE=1 时被置高。RD下降沿将其清除。
- INTE(Interrupt Enable,中断允许):内部中断允许触发器,无外部引脚:
- INTEA 由 PC4 的置位/复位控制
- INTEB 由 PC2 的置位/复位控制
方式1输入时序:
- 外设送数据 → STB有效(低)
- 数据锁存 → IBF变高(tSIB = 300ns)
- STB变高 → INTR变高(tSIT = 300ns,发中断请求)
- CPU响应中断,读数据 → RD有效
- RD下降沿清INTR(tRIT = 400ns)
- RD上升沿清IBF(tRIB = 300ns)
(2) 方式1 输出
端口C联络信号分配:
| 端口A | 信号 | 方向 | 功能 |
|---|---|---|---|
| PC7 | OBFA(输出缓冲器满) | 出 | 低电平有效,通知外设取数据 |
| PC6 | ACKA(外设响应) | 入 | 低电平有效,外设确认已取走数据 |
| PC3 | INTRA(中断请求) | 出 | 高电平有效 |
| PC4、PC5 | I/O | — | 未用,可作普通I/O |
| 端口B | 信号 | 方向 | 功能 |
|---|---|---|---|
| PC1 | OBFB(输出缓冲器满) | 出 | 低电平有效 |
| PC2 | ACKB(外设响应) | 入 | 低电平有效 |
| PC0 | INTRB(中断请求) | 出 | 高电平有效 |
关键信号说明:
- OBF(Output Buffer Full):CPU已把数据写入端口,通知外设取走。WR上升沿置为有效(低),ACK有效使其恢复高电平。
- ACK(Acknowledge):外设响应信号,对OBF的回答。低电平有效。
- INTR:当 ACK=1、OBF=1、INTE=1 时置高(发中断请求)。WR上升沿清除。
- INTE:
- INTEA 由 PC6 置位/复位控制
- INTEB 由 PC2 置位/复位控制
注意:方式1输入时INTEA由PC4控制;方式1输出时INTEA由PC6控制。PC4/PC6分别是对应方向下的”空闲”引脚。
4.3 方式2 —— 双向选通I/O方式(仅端口A支持)
端口A可工作于方式2(双向总线方式),此时:
- 端口A既输入又输出,共用一套联络信号
- 使用端口C的 PC3~PC7(5条线)作联络信号
- 端口B和PC0~PC2可工作于方式0或方式1
方式2联络信号:OBFA、ACKA、IBFA、STBA、INTRA(即方式1输入+输出的A组信号合并)
4.4 状态字
8255A工作于方式1和方式2时,状态字通过读端口C获得。
方式1输入状态字
D7 D6 D5 D4 D3 D2 D1 D0
I/O I/O IBFA INTEA INTRA INTEB IBFB INTRB
└──────A组──────┘ └──────B组──────┘
方式1输出状态字
D7 D6 D5 D4 D3 D2 D1 D0
OBFA INTEA I/O I/O INTRA INTEB OBFB INTRB
└───────A组───────┘ └──────B组──────┘
五、8255A 应用举例
5.1 例1:开关输入 + LED显示(方式0)
电路连接
- 端口A接4个开关(PA0~PA3),方式0输入
- 端口B接7段LED显示器(PB0~PB7),方式0输出
- 功能:读入开关状态 → 查表转换为7段码 → 送LED显示
控制字设置
A口方式0输入,B口方式0输出 → 90H
核心程序段
MOV AL, 90H ; 方式选择控制字
OUT 0D3H, AL ; 写入控制口(D3H)
RDPORTA:
IN AL, 0D0H ; 读A口(D0H)
AND AL, 0FH ; 取低4位
MOV BX, OFFSET SSEGCODE ; 段码表首址
XLAT ; 查表转换
OUT 0D1H, AL ; B口输出显示5.2 例2:打印机接口(方式0查询)
电路连接
- 端口A:打印输出数据,方式0输出
- PC6(C口高4位):输出选通信号 STB(负脉冲)
- PC2(C口低4位):输入BUSY信号
工作流程
- 测试 BUSY 信号
- 若BUSY=0(不忙),输出数据到端口A
- 产生一个负脉冲STB,将数据打入打印机
控制字
A口输出、C高4位输出、C低4位输入 → 81H
核心操作
; 置PC6=1(STB初始为高)
MOV AL, 0DH ; 00001101B,PC6置1
OUT 0D3H, AL
; 等待BUSY变低
TESBY:
IN AL, 0D2H ; 读C口
TEST AL, 04H ; 测试PC2(BUSY)
JNZ TESBY ; 忙则等待
; 输出数据
MOV AL, [2000H] ; 取打印字符
OUT 0D0H, AL ; A口输出
; 产生选通负脉冲
MOV AL, 0CH ; PC6置0
OUT 0D3H, AL
INC AL ; AL = 0DH
OUT 0D3H, AL ; PC6置15.3 例3:交通灯控制(习题)
功能
- 主道和副道各有红/黄/绿三色灯
- PC0接人行开关(请求过街)
- 正常:主道绿灯40秒,副道红灯
- 有行人请求时:主道黄灯5秒→红灯,副道绿灯20秒→黄灯5秒→恢复
端口分配
- PA0/PA1/PA2:主道G/Y/R
- PB0/PB1/PB2:副道G/Y/R
六、关键概念速查
| 概念 | 要点 |
|---|---|
| 并行vs串行 | 并行速率高、距离短;串行速率低、距离长 |
| 74LS373 | 8位D锁存器,G高透明、G低锁存,OE三态控制 |
| 74LS244 | 8位单向缓冲器,两路4位,三态输出 |
| 74LS245 | 8位双向总线收发器,DIR控制方向,G控制允许 |
| 8255A | 3个8位端口 + 2组控制 + 3种工作方式 |
| 方式0 | 基本I/O,无应答,适合简单外设 |
| 方式1 | 选通I/O,C口固定联络线,支持中断 |
| 方式2 | 双向I/O,仅A口支持,5条C口联络线 |
| 方式字D7=1 | 方式选择控制字 |
| 方式字D7=0 | 端口C按位置1/置0控制字(写入控制口) |
| STB/IBF/INTR | 方式1输入三联络:选通/输入满/中断请求 |
| OBF/ACK/INTR | 方式1输出三联络:输出满/应答/中断请求 |
| INTEA输入 | 由PC4置位/复位控制 |
| INTEA输出 | 由PC6置位/复位控制 |
| INTEB | 由PC2置位/复位控制(输入和输出都一样) |
| 状态字获取 | 读端口C(方式1/方式2时) |
章节关联
- 前序:中断系统-第13章-计算机组织与系统结构(第13章中断系统,与8255A方式1中断方式紧密关联)
- 后续:第15章串行通信(对比并行通信与串行通信的差异)
- 相关:输入输出接口-第11章-计算机组织与系统结构(I/O接口基本概念)
- 相关:微处理器的编程结构-第6章-计算机组织与系统结构(CPU总线、ALE、DEN、DT/R信号)