第14章 并行通信及其接口电路

一、概述

并行通信与串行通信的区别

  • 串行传送:数据在单条一位宽的传输线上按时间先后一位一位地传送
  • 并行传送:数据在多位宽的传输线上各位同时进行传送
  • 并行传送优势:相同时钟速率下,并行传送的数据传输率较高
  • 适用场景:并行通信适用于信息传输率要求较高、传输距离较短的场合

本章结构

  1. 简单并行接口电路(不可编程)
  2. 可编程并行接口电路 8255A 的结构及工作原理
  3. 8255A 的应用

二、简单并行接口电路

在输入输出接口电路中,经常需要对信号进行缓冲、驱动和锁存。三种常用芯片:

2.1 锁存器 74LS373

基本特性:

  • 8位D锁存器电路(D-Latch),具有三态控制输出
  • 8个输入端:1D~8D
  • 8个输出端:1Q~8Q
  • 2个控制端:选通端 G、输出允许端 OE

工作原理:

  • G=高电平时,输出Q跟随输入D变化(透明模式)
  • G变低电平时,锁存器中的内容被锁存(保持)
  • OE=低电平时,锁存信息出现在输出端
  • OE=高电平时,输出处于高阻态

真值表:

选通 G输出允许 OE输入 D输出 Q
HLLL
HLHH
LLXQ0(原状态)
XHXZ(高阻态)

主要用途:总线传输电路中锁存地址信息或数据信息,实现总线信号的缓冲与驱动

类似芯片:Intel 8282/8283

2.2 缓冲器 74LS244

基本特性:

  • 三态输出的8位缓冲器/驱动器
  • 8个输入端分为两路:1A1~1A4 和 2A1~2A4
  • 8个输出端分为两路:1Y1~1Y4 和 2Y1~2Y4
  • 2个控制信号:1G、2G(低电平有效)

工作原理:

  • 1G有效(低电平)→ 1Y1~1Y4 = 1A1~1A4
  • 2G有效(低电平)→ 2Y1~2Y4 = 2A1~2A4
  • G无效(高电平)→ 输出为高阻态

主要用途:存储器地址驱动器、单向总线接收器和发送器

  • 可将8个输入端某几位接地,其余接+5V,提供特定8位二进制代码(如中断类型码)

2.3 数据总线收发器 74LS245

基本特性:

  • 三态输出的8位双向总线收发器(transceiver)
  • 16个双向数据端:A1~A8 和 B1~B8
  • 2个控制端:允许端 G(低电平有效)、方向控制端 DIR

真值表:

允许 G方向控制 DIR数据传送方向
LLB → A
LHA → B
HX隔开(高阻)

主要用途:数据的双向传送、缓冲与驱动

  • 74LS245 的 IOL(输出低电平负载电流)额定值为 64mA
  • 80386DX 数据总线最多仅能吸收 4mA 电流
  • 通过增设数据总线收发器可极大增强总线驱动能力

类似芯片:Intel 8286/8287

2.4 应用举例

例1:74LS373用于地址信号锁存

  • 80386DX系统中,需锁存30位地址信号 A2~A31 和 4个字节允许信号 BE0~BE3
  • 使用5片 74LS373 芯片
  • 各片选通端 G 均由 ALE(地址锁存允许)信号驱动
  • OE 固定接逻辑0,输出始终处于允许状态

例2:74LS245用于数据总线收发

  • 32位微机系统需4块 74LS245 实现双向总线驱动
  • DIR 由 DT/R(数据发送/接收)信号控制
  • G 由 DEN(数据允许)信号控制

三、可编程并行接口

3.1 可编程并行接口的组成

一个可编程并行接口电路通常包括:

  1. 两个或两个以上具有缓冲能力的数据寄存器
  2. 可供 CPU 访问的控制及状态寄存器
  3. 片选和内部控制逻辑电路
  4. 与外设进行数据交换的控制与联络信号线
  5. 与 CPU 用中断方式传送数据的相关中断控制电路

3.2 接口与 CPU 和外设的连接

  • CPU侧:数据总线、读/写控制信号、地址译码器、复位信号、中断响应信号
  • 外设侧:并行输入/输出数据、输入/输出准备好信号、输入/输出回答信号
  • 内部:输出缓冲寄存器、输入缓冲寄存器、控制寄存器、状态寄存器、中断逻辑

四、可编程并行通信接口 8255A

4.1 性能概要

  • Intel 8255A 是通用可编程并行接口芯片
  • 40脚双列直插封装,单一+5V电源
  • 全部输入输出与 TTL 电平兼容
  • 连接外部设备通常不需要附加电路
  • 三个输入输出端口:端口A、端口B、端口C
  • 每个端口可通过编程设定为输入或输出端口
  • 端口C可独立使用,也可配合端口A/B提供控制联络信号

4.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:写信号,低电平有效。控制把数据或控制命令字写入8255A
  • A1、A0:端口选择信号

端口选择编码:

A1A0选中端口
00端口A
01端口B
10端口C
11控制端口

4.3 内部结构

8255A 由四部分组成:

  1. 数据总线缓冲器:双向三态8位数据缓冲器,是8255A与CPU数据总线的接口
  2. 端口A、B、C:三个8位端口,各端口可由程序设定为输入或输出
    • 端口A和端口B常作为独立的输入/输出端口
    • 端口C可分成两个4位端口,为端口A/B提供控制和状态信息
  3. A组控制和B组控制:
    • A组控制:控制端口A及端口C的高4位(PC7~PC4)
    • B组控制:控制端口B及端口C的低4位(PC3~PC0)
  4. 读写控制逻辑:负责管理8255A的数据传输过程

4.4 8255A 的控制字

4.4.1 方式选择控制字

格式(8位,D7=1为标识位):

D7D6 D5D4D3D2D1D0
1A组方式端口APC7~PC4B组方式端口BPC3~PC0
00=方式01=输入1=输入0=方式01=输入1=输入
01=方式10=输出0=输出1=方式10=输出0=输出
1x=方式2(方式0时)(方式0时)

示例:

  • 端口A:方式0,输出
  • 端口B:方式0,输入
  • 端口C高4位:方式0,输出
  • 端口C低4位:方式0,输入
  • 方式选择控制字 = 10000011B = 83H

初始化编程示例:

MOV DX, 28BH    ; 控制口地址
MOV AL, 83H     ; 方式选择控制字
OUT DX, AL      ; 写入控制口

4.4.2 端口C按位置1/置0控制字

格式(8位,D7=0为标识位):

D7D6 D5 D4D3 D2 D1D0
0无关(X)位选择1=置1
000=PC00=置0
001=PC1
…
111=PC7

注意:端口C按位置1/置0控制字必须写入控制口,而不是端口C

示例:PC6置0

  • 控制字 = 00001100B = 0CH
MOV DX, 28BH
MOV AL, 0CH     ; PC6置0控制字
OUT DX, AL

4.5 8255A 的工作方式

4.5.1 方式0(基本输入/输出方式)

  • 端口A和端口B可规定为输入口或输出口
  • 端口C分为高4位和低4位两个4位端口,可分别规定为输入或输出
  • 共可构成 2⁴ = 16 种不同的使用组态
  • 特点:没有规定专门的应答信号,常用于与简单外设的数据传送
    • 如:LED显示器输出、二进制开关装置输入等

4.5.2 方式1(选通输入/输出方式)

  • 与方式0的主要差别:端口A/B工作于方式1时,利用端口C接收选通信号或提供状态信号
  • 信号与数位之间存在固定对应关系,不能用程序改变

方式1输入:

控制信号定义:

  • STB(Strobe):选通信号,低电平有效。外设送给8255A,有效时8255A接收外设送来的8位数据
  • IBF(Input Buffer Full):输入缓冲器满,高电平有效。8255A送给外设的联络信号
    • IBF=高:数据已送进输入缓冲器,通知外设不能送新数据
    • IBF=低:CPU已读取数据,输入缓冲器变空,允许外设送新数据
    • STB使其置位,RD上升沿使其复位
  • INTR(Interrupt Request):中断请求,高电平有效
    • 当 STB=1、IBF=1、INTE=1 时置为高电平
    • RD下降沿将其置为低电平
  • INTEA:端口A中断允许,无外部引出端,由PC4的置位/复位控制
  • INTEB:端口B中断允许,无外部引出端,由PC2的置位/复位控制

端口C信号分配(方式1输入):

端口C位端口A(方式1输入)端口B(方式1输入)
PC7I/O(未用,可设)-
PC6I/O(未用,可设)-
PC5IBFA-
PC4STBA-
PC3INTRA-
PC2-STBB / INTEB
PC1-IBFB
PC0-INTRB

方式1输出:

控制信号定义:

  • OBF(Output Buffer Full):输出缓冲器满,低电平有效。8255A输出给外设
    • 有效时表示CPU已把数据输出给指定端口,通知外设取走
    • WR上升沿置有效,ACK信号使其恢复高电平
  • ACK(Acknowledge):外设响应信号,低电平有效。表明外设已接收数据
  • INTR:中断请求,高电平有效
    • 当 ACK=1、OBF=1、INTE=1 时置为高电平
    • WR上升沿使其变为低电平
  • INTEA:端口A中断允许,由PC6的置位/复位控制
  • INTEB:端口B中断允许,由PC2的置位/复位控制

端口C信号分配(方式1输出):

端口C位端口A(方式1输出)端口B(方式1输出)
PC7OBFA-
PC6ACKA / INTEA-
PC5I/O(未用,可设)-
PC4I/O(未用,可设)-
PC3INTRA-
PC2-ACKB / INTEB
PC1-OBFB
PC0-INTRB

4.5.3 方式2(双向选通输入/输出方式)

  • 仅端口A支持方式2
  • 端口A工作于方式2时,端口C的PC7~PC3作为联络信号
  • 端口B可工作于方式0或方式1
  • 方式2是方式1输入和方式1输出的组合
  • 状态字从端口C读取

4.6 8255A 的状态字

  • 工作于方式1和方式2时,状态字通过读端口C的内容获得
  • 方式1状态字分为输入状态字和输出状态字两种格式
  • 方式2状态字也是从端口C读取,A组状态包含双向传送的全部状态信息

五、8255A 应用举例

例1:方式0 — 开关输入与LED显示输出

功能:端口A读入开关状态,端口B输出LED段选码(字形码)

配置:

  • 端口A:方式0,输入
  • 端口B:方式0,输出
  • 方式选择控制字:90H
  • 端口地址:A口D0H,B口D1H,C口D2H,控制口D3H

核心程序:

MOV AL, 90H        ; 方式选择控制字
OUT 0D3H, AL       ; A口方式0输入,B口方式0输出
 
RDPORTA:
IN AL, 0D0H        ; 读A口(开关状态)
AND AL, 0FH        ; 取低4位
MOV BX, OFFSET SSEGCODE  ; 段选码表首址
XLAT               ; 查表转换
OUT 0D1H, AL       ; B口输出到LED

共阴极LED段选码表:

  • 0=3FH, 1=06H, 2=5BH, 3=4FH, 4=66H, 5=6DH, 6=7DH, 7=07H
  • 8=7FH, 9=67H, A=77H, B=7CH, C=39H, D=5EH, E=79H, F=71H

例2:方式0 — 查询方式打印机接口

功能:用8255A作为打印机接口,查询方式工作

配置:

  • 端口A:方式0,输出(打印数据)
  • 端口C高4位:输出,PC6作为STB选通信号
  • 端口C低4位:输入,PC2作为BUSY忙信号输入
  • 方式选择控制字:81H

工作流程:

  1. 测试 BUSY 信号(PC2)
  2. 若 BUSY=1(忙),继续查询
  3. 若 BUSY=0(空闲),输出打印字符到端口A
  4. 通过PC6输出负脉冲作为STB选通信号
  5. 返回

核心程序:

MOV AL, 81H        ; 方式选择控制字
OUT 0D3H, AL
MOV AL, 0DH        ; 置PC6=1(STB初始为高)
OUT 0D3H, AL
 
TESBY:
IN AL, 0D2H        ; 读端口C
TEST AL, 04H       ; 测试PC2(BUSY)
JNZ TESBY          ; 忙则等待
 
MOV AL, DS:[2000H] ; 取打印字符
OUT 0D0H, AL       ; 输出到A口
MOV AL, 0CH        ; 置PC6=0(STB低)
OUT 0D3H, AL
INC AL             ; AL=0DH,置PC6=1
OUT 0D3H, AL       ; 产生负选通脉冲
RET

六、关键概念总结

  1. 并行通信:多位数据同时传送,传输率高,适用于短距离高速传输
  2. 简单接口芯片:74LS373(锁存器)、74LS244(缓冲器)、74LS245(双向收发器)
  3. 8255A三个端口:端口A、端口B、端口C,共24条I/O线
  4. 两种控制字:方式选择控制字(D7=1)、端口C按位置1/置0控制字(D7=0)
  5. 三种工作方式:
    • 方式0:基本输入输出,无应答信号
    • 方式1:选通输入输出,端口C提供固定联络信号
    • 方式2:双向选通输入输出(仅端口A支持)
  6. 方式1的联络信号:STB(选通)、IBF(输入缓冲器满)、OBF(输出缓冲器满)、ACK(应答)、INTR(中断请求)
  7. 端口C的双重作用:既可作独立I/O口,又可为A/B口提供控制联络信号
  8. 状态字读取:方式1和方式2时,从端口C读取状态字

关联笔记