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

195 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
tags:
- 接口与通讯技术
- 8255A
- 并行接口
- 可编程芯片
create time: 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 个功能模块** 组成:
```mermaid
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)作为联络信号。
```mermaid
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. 初始化编程模板
```asm
; 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
```
## 关联笔记
- [[8254定时计数器]]
- [[8259A中断控制器]]
- [[8251A串行通信接口]]
- [[接口与通讯技术/试题册/index|试题册索引]]