Files
final-exam/接口与通讯技术/复习文档/8255A可编程并行接口.md
T

6.8 KiB
Raw Blame History

tags, create time
tags create time
接口与通讯技术
8255A
并行接口
可编程芯片
2026-06-26 23:05

8255A 可编程并行接口

概述

8255A(Programmable Peripheral Interface, PPI)是 Intel 公司生产的通用可编程并行 I/O 接口芯片,在全部 4 套试卷中均有出现,是本课程最高频考点。它提供 3 个 8 位端口(A、B、C),支持 3 种工作方式,可通过程序灵活配置为输入/输出功能。

[!tip] 考试要点

  • 控制字计算:方式控制字(D7=1)和 C 口按位控制字(D7=0)的区别
  • 工作方式对比:方式 0/1/2 的特点、联络信号
  • 端口地址推算:已知一个端口地址推算其余端口和控制口地址

正文

1. 内部结构

8255A 内部由 4 个功能模块 组成:

graph LR
    A["CPU 数据总线"] --> B["数据总线缓冲器"]
    B --> C["读/写控制逻辑"]
    C --> D["A 组控制"]
    C --> E["B 组控制"]
    D --> F["端口 A (PA0~PA7)"]
    D --> G["端口 C 高 4 位 (PC4~PC7)"]
    E --> H["端口 B (PB0~PB7)"]
    E --> I["端口 C 低 4 位 (PC0~PC3)"]
模块 功能
数据总线缓冲器 三态 8 位缓冲器,实现 CPU 与 8255A 之间的数据传输
读/写控制逻辑 根据 CS、RD、WR、A1、A0 信号控制端口的读写操作
A 组控制 控制端口 A 和端口 C 高 4 位的工作方式
B 组控制 控制端口 B 和端口 C 低 4 位的工作方式

2. 三个端口的能力

端口 可用工作方式 说明
端口 A 方式 0、方式 1、方式 2 功能最全,唯一支持双向传输(方式 2)的端口
端口 B 方式 0、方式 1 不支持方式 2
端口 C 仅方式 0 可分为高 4 位和低 4 位两组独立使用;在方式 1/2 下部分引脚被复用为联络信号

[!question] 思考题 为什么只有端口 A 支持方式 2(双向传输)?这与 8255A 的硬件设计有什么关系?

提示:方式 2 需要同时占用输入和输出的联络信号线,这些信号来自端口 C——只有 A 组控制能支配足够多的 C 口引脚(5 根)来支持双向握手。

3. 三种工作方式详解

方式 0 — 基本输入/输出

最简单的工作方式,无需任何联络信号(握手信号),CPU 可直接通过 IN/OUT 指令读写端口。

  • A、B、C 三个端口均可工作在此方式下
  • 适用于无条件传送或简单的外设控制(如 LED、开关)

方式 1 — 选通输入/输出

利用端口 C 的部分引脚作为 联络信号(握手信号),实现 CPU 与外设之间的同步数据传输。

方式 1 输入时的联络信号(以 A 口为例):

信号 方向 含义
STB (PC4) 外设 → 8255A 选通信号,低电平有效,将数据锁存到输入锁存器
IBF (PC5) 8255A → 外设 输入缓冲器满,高电平有效,通知外设数据已被接收
INTRA (PC3) 8255A → CPU 中断请求,请求 CPU 读取数据
INTE A 内部触发器 通过 PC4 的置位/复位控制,决定是否允许中断

方式 1 输出时的联络信号(以 A 口为例):

信号 方向 含义
OBF (PC7) 8255A → 外设 输出缓冲器满,低电平有效,通知外设数据已准备好
ACK (PC6) 外设 → 8255A 应答信号,低电平有效,外设确认已取走数据
INTRA (PC3) 8255A → CPU 中断请求,通知 CPU 可以写入下一个数据

[!info] 方式 1 工作流程(输入) 外设准备数据 → 发 STB 锁存数据 → 8255A 发 IBF → 条件满足时发 INTR → CPU 响应中断并读数据 → IBF 变低 → 准备接收下一个数据。

方式 2 — 双向总线方式

仅端口 A 可用,同一端口既可输入又可输出,利用端口 C 的 5 个引脚(PC3~PC7)作为联络信号。

graph LR
    A["外设"] -- "数据 + STB/IBF" --> B["8255A 端口 A"]
    B -- "数据 + OBF/ACK" --> A
    B -- "INTR" --> C["CPU"]

4. 控制字格式

8255A 有两类控制字,通过 D7 位 区分,写入同一个端口地址(控制口):

方式控制字(D7 = 1)

用于设置各端口的工作方式和输入/输出方向。

D7  D6 D5  D4   D3    D2   D1    D0
 1  [A组方式] [A口] [C口高] [B组方式] [B口] [C口低]
       ↑        ↑      ↑       ↑       ↑      ↑
     00=方式0  1=入  1=入    0=方式0  1=入   1=入
     01=方式1  0=出  0=出    1=方式1  0=出   0=出
     10=方式2

速算技巧:先确定 D7=1,然后按"A 组方式 → A 口方向 → C 高方向 → B 组方式 → B 口方向 → C 低方向"依次填入。

[!example] 典型控制字计算 要求:A 口方式 0 输出,B 口方式 0 输出

分析:D7=1, D6D5=00(方式 0), D4=0(输出), D3=0(输出), D2=0(方式 0), D1=0(输出), D0=0(输出)

控制字 = 1000 0000B = 80H

C 口按位置位/复位控制字(D7 = 0)

用于对端口 C 的 某一位 进行置 1 或清 0 操作,而不影响其他位。

D7  D6 D5 D4  D3 D2 D1   D0
 0   ×  ×  ×  [位号选择]  [1=置位, 0=复位]
               000=PC0
               001=PC1
               ...
               111=PC7

[!example] 典型位控制字计算 要求:使 PC3 = 1

分析:D7=0, D6D5D4 无关(填 0), D3D2D1=011(选 PC3), D0=1(置位)

控制字 = 0000 0111B = 07H

[!question] 关键考点 方式控制字和 C 口位控制字写入的是 同一个端口地址(控制口),如何区分?

答:通过 D7 位区分。D7=1 是方式控制字,D7=0 是位控制字。

5. 端口地址推算

8255A 占用 4 个连续端口地址,由 A1、A0 引脚选择:

A1 A0 选中端口 相对偏移
0 0 端口 A 基地址 + 0
0 1 端口 B 基地址 + 2
1 0 端口 C 基地址 + 4
1 1 控制口 基地址 + 6

[!example] 地址推算示例 已知 A 口地址 = 2F0H,则:

  • B 口 = 2F0H + 2 = 2F2H
  • C 口 = 2F0H + 4 = 2F4H
  • 控制口 = 2F0H + 6 = 2F6H

若 A 口地址 = 20H(小地址系统),则控制口 = 23H。

6. 初始化编程模板

; 8255A 初始化通用模板
; 假设控制口地址为 PORT_CTL

MOV DX, PORT_CTL    ; 控制口地址
MOV AL, 80H         ; 方式控制字(按需修改)
OUT DX, AL          ; 写入方式控制字

; 若需要对 C 口某位置位/复位:
MOV DX, PORT_CTL
MOV AL, 07H         ; 位控制字:PC3=1
OUT DX, AL

关联笔记