vault backup: 2026-06-28 14:53:55
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- 8259A
|
||||
- 中断管理
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# 8259A 中断管理基础
|
||||
|
||||
## 概述
|
||||
|
||||
82C59A(8259A)是 x86 系统中最核心的中断管理芯片,在 3 套试卷中出现了 **6 道填空题**,是最高频考点。本专题聚焦填空题常考的四个核心知识点:单片管理级数、级联扩展、中断类型号传递机制以及中断号取值范围。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. 单片管理级数
|
||||
|
||||
一片 82C59A 内部有 **8 个中断请求输入引脚**(IR0 ~ IR7),因此单片最多管理 **8 级**中断。
|
||||
|
||||
| 引脚 | 编号 | 说明 |
|
||||
|------|------|------|
|
||||
| IR0 | 最高优先级 | 默认优先级最高 |
|
||||
| IR1 ~ IR6 | 中间优先级 | 依次递减 |
|
||||
| IR7 | 最低优先级 | 默认优先级最低 |
|
||||
|
||||
> [!tip] 记忆口诀
|
||||
> "一片 59A 八个脚,IR 零到 IR 七,管理八级中断源。"
|
||||
|
||||
### 2. 级联扩展
|
||||
|
||||
多片 82C59A 可以通过级联方式扩展中断管理能力:
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph 单片
|
||||
A1["IR0~IR7"] --> A2["8 级中断"]
|
||||
end
|
||||
subgraph 两级级联
|
||||
B1["主片 IR0~IR7"] --> B2["从片 1~8"]
|
||||
B2 --> B3["每片从片 8 级"]
|
||||
B3 --> B4["最多 64 级"]
|
||||
end
|
||||
```
|
||||
|
||||
| 配置 | 中断级数 | 说明 |
|
||||
|------|:--------:|------|
|
||||
| 单片 | **8 级** | IR0~IR7 全部直接使用 |
|
||||
| 一主一从 | 15 级 | 从片占用主片 1 个 IR(8+8-1=15) |
|
||||
| 两级级联(最多) | **64 级** | 主片 8 个 IR 各接一片从片,8×8=64 |
|
||||
|
||||
> [!important] 考试关键点
|
||||
> "两级级联最多可管理 **64 级**中断"——这是理论最大值(8×8=64),不是实际可用值。实际一主一从只有 15 级(因为主片要留一个 IR 给从片)。
|
||||
>
|
||||
> > [!question] 思考题
|
||||
> > 为什么理论最大是 64 级,而不是 8×7=56 级?
|
||||
> >
|
||||
> > 答:64 级是理想情况——主片 8 个 IR 各接一片从片(8×8=64),此时主片的所有 IR 都被从片占用,没有留给外部设备的中断引脚。如果主片还要留引脚给外部设备,则实际可用级数 = 8 + 外部引脚数×0 + 从片数×8,例如一主一从 = 7 + 8 = 15 级。
|
||||
|
||||
### 3. 中断响应:两个 INTA 脉冲
|
||||
|
||||
当可屏蔽中断被响应时,CPU 发出两个 **INTA(中断应答)负脉冲**,82C59A 在第二个脉冲中向 CPU 提供中断源的**中断类型号(中断号)**:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant CPU as "CPU"
|
||||
participant PIC as "82C59A"
|
||||
participant IVT as "中断向量表"
|
||||
CPU->>PIC: "第一个 INTA 负脉冲"
|
||||
Note over PIC: "锁定最高优先级中断<br/>ISR 对应位置 1<br/>IRR 对应位清 0"
|
||||
PIC->>CPU: "无数据"
|
||||
CPU->>PIC: "第二个 INTA 负脉冲"
|
||||
PIC->>CPU: "中断类型号(8 位)"
|
||||
CPU->>IVT: "类型号 × 4 → 查向量表"
|
||||
IVT->>CPU: "CS:IP 中断服务入口"
|
||||
```
|
||||
|
||||
> [!important] 两个 INTA 脉冲的区别
|
||||
>
|
||||
> | 脉冲 | 82C59A 的操作 | CPU 获得的数据 |
|
||||
> |------|-------------|--------------|
|
||||
> | **第一个 INTA** | 锁定优先级、更新 ISR/IRR | 无 |
|
||||
> | **第二个 INTA** | 将中断类型号送上数据总线 | **中断类型号**(8 位) |
|
||||
|
||||
### 4. 中断号取值范围
|
||||
|
||||
8086 微机的中断系统为每个中断源分配一个**中断号(中断类型号)**,中断号为 8 位,取值范围为:
|
||||
|
||||
$$00H \sim FFH \quad (0 \sim 255)$$
|
||||
|
||||
共 **256** 个中断向量,每个向量占 4 字节(CS:IP),中断向量表位于内存最低端:
|
||||
|
||||
| 项目 | 值 |
|
||||
|------|-----|
|
||||
| 中断号范围 | 00H ~ FFH(0 ~ 255) |
|
||||
| 向量表起始地址 | 00000H |
|
||||
| 向量表大小 | 256 × 4 = 1024 字节 = 1KB |
|
||||
| 向量表结束地址 | 003FFH |
|
||||
| 向量地址计算 | 中断号 × 4 |
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A["中断号 N"] --> B["N × 4"]
|
||||
B --> C["向量地址"]
|
||||
C --> D["00000H + N×4"]
|
||||
D --> E["4 字节: IP低 IP高 CS低 CS高"]
|
||||
```
|
||||
|
||||
> [!example] 计算示例
|
||||
> 中断号 08H 的向量地址 = 08H × 4 = **20H**,存放在 00020H~00023H 四个字节。
|
||||
|
||||
### 5. 中断类型号分布
|
||||
|
||||
| 中断号范围 | 用途 |
|
||||
|----------|------|
|
||||
| 00H~07H | 内部中断(除法错误、单步等) |
|
||||
| 08H~0FH | 主 82C59A 管理的外部中断(IRQ0~IRQ7) |
|
||||
| 70H~77H | 从 82C59A 管理的外部中断(IRQ8~IRQ15) |
|
||||
| 10H~FFH | 软中断(INT n)及系统保留 |
|
||||
|
||||
### 6. 真题回顾
|
||||
|
||||
> [!example] 【真题】一片 82C59A 能管理\_\_\_\_\_\_级中断。
|
||||
>
|
||||
> **答案**:8
|
||||
|
||||
> [!example] 【真题】一片 82C59A 能管理 8 级中断,若采用级联方式,两级级联最多可管理\_\_\_\_\_\_级中断。
|
||||
>
|
||||
> **答案**:64
|
||||
|
||||
> [!example] 【真题】当可屏蔽中断被响应时,82C59A 在第二个中断响应负脉冲中,向 CPU 提供中断源的\_\_\_\_\_\_。
|
||||
>
|
||||
> **答案**:中断类型号(中断号)
|
||||
|
||||
> [!example] 【真题】8086 微机的中断系统为每个中断源分配一个中断号,中断号的取值范围是\_\_\_\_\_\_。
|
||||
>
|
||||
> **答案**:00H~FFH(0~255)
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[82C59A中断结束方式]]
|
||||
- [[IO端口编址方式]]
|
||||
- [[82C37A DMA控制器]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
@@ -0,0 +1,150 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- 82C37A
|
||||
- DMA
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# 82C37A DMA 控制器
|
||||
|
||||
## 概述
|
||||
|
||||
82C37A 是 x86 系统的 DMA(Direct Memory Access,直接内存访问)控制器,允许外设与内存之间直接传输数据而不经过 CPU。在 3 套试卷中出现了 **5 道填空题**,是高频考点。本专题聚焦 S0 过渡时序、DACK 选中信号、字节计数器初始值和三条软命令。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. DMA 基本概念
|
||||
|
||||
DMA 传输的核心思想:**让外设直接与内存交换数据,CPU 只负责让出总线控制权**。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "传统 I/O(CPU 参与)"
|
||||
A1["外设"] -- "数据" --> B1["CPU"]
|
||||
B1 -- "数据" --> C1["内存"]
|
||||
end
|
||||
subgraph "DMA 传输(CPU 不参与数据搬运)"
|
||||
A2["外设"] -- "数据" --> C2["内存"]
|
||||
D2["CPU"] -. "让出总线" .- E2["82C37A"]
|
||||
E2 -. "控制传输" .- A2
|
||||
E2 -. "控制传输" .- C2
|
||||
end
|
||||
```
|
||||
|
||||
### 2. S0 过渡状态 — HRQ → HLDA
|
||||
|
||||
82C37A 的工作时序分为多个阶段,其中 **S0 是过渡状态**,指从 DMA 控制器发出有效的 **HRQ(总线请求)**信号,到收到有效的 **HLDA(总线应答)**信号之间的时间。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant DMA as "82C37A"
|
||||
participant CPU as "CPU"
|
||||
participant IO as "I/O 设备"
|
||||
Note over DMA: "DMA 请求产生"
|
||||
DMA->>CPU: "HRQ(Hold Request)<br/>请求总线控制权"
|
||||
Note over DMA,CPU: "S0 过渡状态"
|
||||
CPU->>DMA: "HLDA(Hold Acknowledge)<br/>释放总线控制权"
|
||||
Note over DMA: "获得总线控制权<br/>进入 S1~S4 数据传输"
|
||||
DMA->>IO: "DACK 选中 I/O 设备"
|
||||
DMA->>IO: "开始 DMA 数据传输"
|
||||
Note over DMA,CPU: "S1~S4 传输状态"
|
||||
DMA->>CPU: "传输完成,释放总线"
|
||||
```
|
||||
|
||||
| 信号 | 全称 | 方向 | 功能 |
|
||||
|------|------|------|------|
|
||||
| **HRQ** | Hold Request | DMA → CPU | DMA 请求 CPU 让出总线 |
|
||||
| **HLDA** | Hold Acknowledge | CPU → DMA | CPU 应答并释放总线 |
|
||||
| **DREQ** | DMA Request | I/O → DMA | I/O 设备请求 DMA 传输 |
|
||||
| **DACK** | DMA Acknowledge | DMA → I/O | DMA 应答并选中 I/O 设备 |
|
||||
|
||||
> [!important] 信号配对关系
|
||||
> - **HRQ / HLDA**:DMA 与 CPU 之间的总线握手
|
||||
> - **DREQ / DACK**:DMA 与 I/O 设备之间的传输握手
|
||||
>
|
||||
> > [!question] 思考题
|
||||
> > S0 状态结束时,82C37A 处于什么状态?
|
||||
> >
|
||||
> > 答:S0 结束后,82C37A 从**被动工作状态**过渡到**主动工作状态**,获得总线控制权,开始执行 DMA 传输周期(S1~S4)。
|
||||
|
||||
### 3. DACK — 选中 I/O 设备
|
||||
|
||||
在 DMA 有效操作周期内,82C37A 选中 I/O 设备的方式是发出有效的 **DACK(DMA Acknowledge)**信号。
|
||||
|
||||
- I/O 设备先发出 **DREQ** 请求 DMA 传输
|
||||
- DMA 获得总线后,发出 **DACK** 通知该 I/O 设备"已选中你"
|
||||
- DREQ 和 DACK 是**成对出现**的握手信号
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
IO["I/O 设备"] -- "DREQ 请求传输" --> DMA["82C37A"]
|
||||
DMA -- "DACK 选中设备" --> IO
|
||||
DMA -- "HRQ 请求总线" --> CPU["CPU"]
|
||||
CPU -- "HLDA 释放总线" --> DMA
|
||||
```
|
||||
|
||||
### 4. 字节计数器 — 写入 N-1
|
||||
|
||||
82C37A 的字节计数器(Current Word Register)存储的是**计数值减 1**,因为计数器从设定值递减到 0 时产生 TC(Terminal Count)终止信号:
|
||||
|
||||
$$\text{写入值} = \text{传输字节数} - 1$$
|
||||
|
||||
| 传输字节数 | 写入值(十进制) | 写入值(十六进制) |
|
||||
|----------|:--------------:|:----------------:|
|
||||
| 1 | 0 | 0000H |
|
||||
| 256 | 255 | 00FFH |
|
||||
| **1024(1K)** | **1023** | **03FFH** |
|
||||
| 65536 | 65535 | FFFFH |
|
||||
|
||||
> [!example] 真题计算
|
||||
> 传输 1K 个字节 = 1024 字节,写入值 = 1024 - 1 = **1023 = 3FFH**。
|
||||
>
|
||||
> 计数过程:3FFH → 3FEH → ... → 001H → 000H(TC 信号产生,传输结束)。
|
||||
> 实际传输了 1024 个字节。
|
||||
|
||||
> [!important] 核心公式
|
||||
> $$\text{实际传输字节数} = \text{计数器初值} + 1$$
|
||||
|
||||
### 5. 三条软命令
|
||||
|
||||
82C37A 有 **3 条软命令**,通过写特定端口地址触发(无需数据):
|
||||
|
||||
| 软命令 | 功能 | 说明 |
|
||||
|--------|------|------|
|
||||
| **清先/后触发器** | 复位内部双字节读写触发器 | 确保下次读写从**低字节**开始 |
|
||||
| **总清除**(Master Clear) | 复位整个芯片 | 清除所有命令、状态和暂存寄存器 |
|
||||
| **清屏蔽寄存器** | 清除所有通道的屏蔽位 | 使所有通道允许 DMA 请求 |
|
||||
|
||||
> [!tip] 记忆技巧
|
||||
> 三条软命令分别对应:**触发器 → 全局复位 → 屏蔽清除**,从局部到全局再到通道控制。
|
||||
|
||||
### 6. 真题回顾
|
||||
|
||||
> [!example] 【真题】82C37A 的工作时序中,S0 是 82C37A 由被动工作状态过渡到主动工作状态的阶段,是指从发出有效的\_\_\_\_\_\_信号,直到收到有效的 HDLA 信号之间的时间。
|
||||
>
|
||||
> **答案**:HRQ(总线请求)
|
||||
|
||||
> [!example] 【真题】在 82C37A 的工作时序中,过渡状态是指从发出有效的\_\_\_\_\_\_信号,到收到有效的\_\_\_\_\_\_信号之间的时间。
|
||||
>
|
||||
> **答案**:HRQ;HLDA
|
||||
|
||||
> [!example] 【真题】82C37A 在有效操作周期内,选中 I/O 的方式是发出有效的\_\_\_\_\_\_信号。
|
||||
>
|
||||
> **答案**:DACK
|
||||
|
||||
> [!example] 【真题】若利用 82C37A 控制 DMA 传输,共传输 1K 个字节,在对 82C37A 进行初始化时,应该向字节计数器中写入\_\_\_\_\_\_。
|
||||
>
|
||||
> **答案**:3FFH(或 1023)
|
||||
|
||||
> [!example] 【真题】DMA 控制器 82C37A 有 3 条软命令,分别是\_\_\_\_\_\_、总清除和清屏蔽寄存器软命令。
|
||||
>
|
||||
> **答案**:清先/后触发器
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[IO端口编址方式]]
|
||||
- [[8259A中断管理基础]]
|
||||
- [[82C59A中断结束方式]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
@@ -0,0 +1,114 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- 8254A
|
||||
- 定时计数器
|
||||
- 工作方式
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# 82C54A 定时器工作方式
|
||||
|
||||
## 概述
|
||||
|
||||
82C54A(可编程定时器/计数器)有 6 种工作方式,其中方式 2 和方式 3 具有自动重新装载计数初值的功能,方式 3 专门用于产生方波输出。本专题聚焦填空题常考的工作方式对比。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. 六种工作方式总览
|
||||
|
||||
| 方式 | 名称 | 自动重装 | 输出波形 | 触发方式 |
|
||||
|:----:|------|:--------:|---------|:--------:|
|
||||
| 0 | 计数结束中断 | ✗ | 单次低→高跳变 | 软件 |
|
||||
| 1 | 可编程单稳态 | | 单次负脉冲 | 硬件 |
|
||||
| **2** | **速率发生器** | **✓** | 周期性负脉冲 | 软件 |
|
||||
| **3** | **方波发生器** | **✓** | **方波** | 软件 |
|
||||
| 4 | 软件触发选通 | ✗ | 单次正脉冲 | 软件 |
|
||||
| 5 | 硬件触发选通 | ✗ | 单次正脉冲 | 硬件 |
|
||||
|
||||
> [!important] 考试关键点
|
||||
> - **方式 2 和方式 3** 具有自动重新装载计数初值的功能
|
||||
> - **方式 3** 输出的波形是方波
|
||||
|
||||
### 2. 方式 2 — 速率发生器
|
||||
|
||||
方式 2 是**周期性负脉冲发生器**:
|
||||
- 计数到 0 时输出一个时钟宽度的**负脉冲**
|
||||
- **自动重新装载**计数初值,开始下一轮计数
|
||||
- 输出频率 = 输入时钟频率 / 计数初值
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A["装载初值 N"] --> B["递减计数"]
|
||||
B --> C{"计数到 0?"}
|
||||
C -- "否" --> B
|
||||
C -- "是" --> D["输出一个<br/>负脉冲"]
|
||||
D --> E["自动重装 N"]
|
||||
E --> B
|
||||
style D fill:#f9f,stroke:#333,color:#000
|
||||
style E fill:#dfd,stroke:#333,color:#000
|
||||
```
|
||||
|
||||
> [!example] 计算示例
|
||||
> 输入时钟 1MHz,计数初值 1000:
|
||||
> - 输出负脉冲频率 = 1MHz / 1000 = **1kHz**
|
||||
> - 每个脉冲宽度 = 1 个时钟周期 = 1μs
|
||||
|
||||
### 3. 方式 3 — 方波发生器
|
||||
|
||||
方式 3 是**方波发生器**,输出占空比约 50% 的方波:
|
||||
- 计数到 0 时输出电平翻转
|
||||
- **自动重新装载**计数初值
|
||||
- 输出频率 = 输入时钟频率 / 计数初值
|
||||
|
||||
| 计数初值 | 输出波形 | 说明 |
|
||||
|---------|---------|------|
|
||||
| **偶数** | 完美方波(50% 占空比) | 高电平和低电平各占 N/2 个时钟 |
|
||||
| **奇数** | 近似方波(高电平多一个时钟) | 高电平 (N+1)/2,低电平 (N-1)/2 |
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A["装载初值 N"] --> B["递减计数"]
|
||||
B --> C{"计数到 0?"}
|
||||
C -- "否" --> B
|
||||
C -- "是" --> D["输出电平翻转<br/>自动重装 N"]
|
||||
D --> B
|
||||
style D fill:#f9f,stroke:#333,color:#000
|
||||
```
|
||||
|
||||
> [!example] 真题计算
|
||||
> 输入时钟 1MHz,方式 3 下计数初值设为 1000:
|
||||
> - 输出方波频率 = 1MHz / 1000 = **1kHz**
|
||||
> - 高电平持续 500 个时钟 = 500μs
|
||||
> - 低电平持续 500 个时钟 = 500μs
|
||||
|
||||
### 4. 自动重装方式对比
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A["82C54A<br/>6 种工作方式"] --> B["方式 0<br/>计数结束中断<br/>❌ 不自动重装"]
|
||||
A --> C["方式 1<br/>单稳态<br/>❌ 不自动重装"]
|
||||
A --> D["方式 2<br/>速率发生器<br/>✅ 自动重装<br/>周期性负脉冲"]
|
||||
A --> E["方式 3<br/>方波发生器<br/>✅ 自动重装<br/>方波输出"]
|
||||
A --> F["方式 4<br/>软件触发选通<br/>❌ 不自动重装"]
|
||||
A --> G["方式 5<br/>硬件触发选通<br/>❌ 不自动重装"]
|
||||
style D fill:#dfd,stroke:#333,color:#000
|
||||
style E fill:#f9f,stroke:#333,color:#000
|
||||
```
|
||||
|
||||
> [!tip] 记忆口诀
|
||||
> "方式二三自动装,二三连续不间断;方式三出是方波,二三脉冲不一样。"
|
||||
|
||||
### 5. 真题回顾
|
||||
|
||||
> [!example] 【真题】82C54A 有 6 种工作方式,其中方式\_\_\_\_\_\_具有自动重新装载计数初值的功能;\_\_\_\_\_\_输出的波形是方波。
|
||||
>
|
||||
> **答案**:2 和 3;方式 3
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[82C55A工作方式]]
|
||||
- [[82C37A DMA控制器]]
|
||||
- [[接口与通讯技术/复习文档/8254定时计数器]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
@@ -0,0 +1,114 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- 8255A
|
||||
- 工作方式
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# 82C55A 工作方式
|
||||
|
||||
## 概述
|
||||
|
||||
82C55A(可编程并行接口芯片)有 3 种工作方式,其中方式 1 和方式 2 具有固定联络信号线、固定时序和确定的状态字。本专题聚焦填空题常考的三种工作方式对比,尤其是联络信号的有无。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. 三种工作方式总览
|
||||
|
||||
| 工作方式 | 名称 | 联络信号 | 固定时序 | 状态字 | 中断支持 |
|
||||
|---------|------|:--------:|:--------:|:------:|:--------:|
|
||||
| **方式 0** | 基本输入/输出 | ✗ 无 | ✗ 无 | ✗ 无 | ✗ 无 |
|
||||
| **方式 1** | 选通输入/输出 | ✓ **有** | ✓ **有** | ✓ **有** | ✓ 有 |
|
||||
| **方式 2** | 双向选通总线 I/O | ✓ **有** | ✓ **有** | ✓ **有** | ✓ 有 |
|
||||
|
||||
> [!important] 考试关键点
|
||||
> **方式 1 和方式 2** 有固定联络信号线、固定时序和确定的状态字。方式 0 是最基本的、无握手信号的方式。
|
||||
|
||||
### 2. 三种方式详解
|
||||
|
||||
#### 方式 0 — 基本 I/O(无联络信号)
|
||||
|
||||
最简单的方式,无需任何握手信号:
|
||||
- A、B、C 三个端口均可使用
|
||||
- 适用于无条件传送或简单外设(LED、开关)
|
||||
- **没有**固定的联络信号线、时序和状态字
|
||||
|
||||
#### 方式 1 — 选通 I/O(有固定联络信号)
|
||||
|
||||
利用端口 C 的部分引脚作为联络信号,实现同步数据传输:
|
||||
|
||||
| 方向 | 占用 C 口引脚数 | 联络信号 |
|
||||
|------|:------------:|---------|
|
||||
| 输入 | 3 根 | STB、IBF、INTR |
|
||||
| 输出 | 3 根 | OBF、ACK、INTR |
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph "方式 1 输入联络信号"
|
||||
A1["STB<br/>选通信号"] --> B1["锁存数据"]
|
||||
B1 --> C1["IBF<br/>缓冲器满"]
|
||||
C1 --> D1["INTR<br/>中断请求"]
|
||||
end
|
||||
subgraph "方式 1 输出联络信号"
|
||||
A2["OBF<br/>输出缓冲满"] --> B2["等待外设取走"]
|
||||
B2 --> C2["ACK<br/>应答确认"]
|
||||
C2 --> D2["INTR<br/>可写下一个"]
|
||||
end
|
||||
```
|
||||
|
||||
#### 方式 2 — 双向总线 I/O(有固定联络信号 + 状态字)
|
||||
|
||||
**仅端口 A 可用**,同一端口既可输入又可输出:
|
||||
- 占用 C 口 **5 根**引脚(PC3~PC7)
|
||||
- 兼顾输入和输出的联络信号
|
||||
- 有确定的**状态字**反映当前传输方向
|
||||
|
||||
### 3. 方式对比速查图
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A["82C55A<br/>三种工作方式"] --> B["方式 0<br/>基本 I/O<br/>无联络信号<br/>最灵活"]
|
||||
A --> C["方式 1<br/>选通 I/O<br/>有固定联络信号<br/>固定时序"]
|
||||
A --> D["方式 2<br/>双向 I/O<br/>有固定联络信号<br/>固定时序+状态字"]
|
||||
style B fill:#ffd,stroke:#333,color:#000
|
||||
style C fill:#dfd,stroke:#333,color:#000
|
||||
style D fill:#dfd,stroke:#333,color:#000
|
||||
```
|
||||
|
||||
> [!question] 思考题
|
||||
> 为什么方式 0 没有固定联络信号?这在实际应用中意味着什么?
|
||||
>
|
||||
> 答:方式 0 是最基本的 I/O 方式,CPU 直接通过 IN/OUT 指令读写端口数据,不依赖任何握手协议。这意味着:
|
||||
> 1. 需要外设和 CPU 速度匹配(否则数据可能丢失)
|
||||
> 2. 适用于无条件传送场景(如 LED 显示、开关读取)
|
||||
> 3. 编程简单,但可靠性不如方式 1/2
|
||||
|
||||
### 4. 端口 C 引脚复用
|
||||
|
||||
方式 1/2 下,端口 C 的部分引脚被用作联络信号:
|
||||
|
||||
| 端口配置 | 占用的 C 口引脚 | 数量 |
|
||||
|----------|----------------|:----:|
|
||||
| A 口方式 1 输入/输出 | PC3、PC4、PC5 或 PC3、PC6、PC7 | 3 |
|
||||
| A 口方式 2 | PC3、PC4、PC5、PC6、PC7 | **5** |
|
||||
| B 口方式 1 输入/输出 | PC0、PC1、PC2 | 3 |
|
||||
|
||||
> [!tip] 规律记忆
|
||||
> - 每个方式 1 端口固定占用 **3 根** C 口引脚
|
||||
> - 方式 2 额外增加 2 根 → 共 **5 根**
|
||||
> - B 口的联络信号全部来自 C 口低 3 位(PC0~PC2)
|
||||
|
||||
### 5. 真题回顾
|
||||
|
||||
> [!example] 【真题】82C55A 有 3 种工作方式——方式 0、方式 1 和方式 2,其中方式\_\_\_\_\_\_有固定联络信号线,固定时序和确定的状态字。
|
||||
>
|
||||
> **答案**:1 和 2
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[82C37A DMA控制器]]
|
||||
- [[接口分层结构]]
|
||||
- [[接口与通讯技术/复习文档/8255A可编程并行接口]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
@@ -0,0 +1,100 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- 8259A
|
||||
- 中断结束
|
||||
- EOI
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# 82C59A 中断结束方式
|
||||
|
||||
## 概述
|
||||
|
||||
82C59A 的中断结束方式(EOI,End of Interrupt)是中断管理的重要环节。在非自动结束方式下,必须在中断服务程序完成前手动发送 EOI 命令,否则中断级别将被永久屏蔽。本专题聚焦 EOI 命令的发送机制和工作方式的区别。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. 三种 EOI 方式对比
|
||||
|
||||
| EOI 方式 | 说明 | 是否需要软件发 EOI |
|
||||
|---------|------|:-----------------:|
|
||||
| **自动结束方式(AEOI)** | 第二个 INTA 脉冲后自动清除 ISR 中对应位 | ✗ 不需要 |
|
||||
| **非特定结束方式** | 软件发 EOI 命令,清除 ISR 中**最高优先级**的位 | ✓ 需要 |
|
||||
| **特定结束方式** | 软件发 EOI 命令并指定中断级别,清除 ISR 中指定位 | ✓ 需要 |
|
||||
|
||||
> [!important] 考试关键点
|
||||
> 当 82C59A 工作于**非自动结束方式**时,需要在中断服务完成后发中断结束命令(EOI)。
|
||||
>
|
||||
> 后两种方式(非特定 EOI 和特定 EOI)统称为**非自动结束方式**。
|
||||
|
||||
### 2. 为什么需要 EOI?
|
||||
|
||||
82C59A 的 **ISR(中断服务寄存器)** 记录当前正在被 CPU 服务的中断源:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant CPU as "CPU"
|
||||
participant PIC as "82C59A"
|
||||
participant ISR as "ISR 寄存器"
|
||||
CPU->>PIC: "响应中断"
|
||||
Note over ISR: "ISR[i] = 1<br/>(标记中断正在服务)"
|
||||
Note over CPU: "执行中断服务程序"
|
||||
CPU->>PIC: "发送 EOI 命令<br/>(OCW2 = 20H)"
|
||||
Note over ISR: "ISR[i] = 0<br/>(清除服务标记)"
|
||||
Note over PIC: "可以响应新的中断"
|
||||
```
|
||||
|
||||
> [!warning] 不发送 EOI 的后果
|
||||
> 如果忘记发送 EOI 命令:
|
||||
> 1. ISR 中对应位**不会被清除**
|
||||
> 2. 82C59A 认为该中断**仍在服务中**
|
||||
> 3. **同优先级及更低优先级**的中断将永远无法被响应
|
||||
> 4. 只有更高优先级的中断可以打断(全嵌套模式下)
|
||||
|
||||
### 3. EOI 命令的发送
|
||||
|
||||
EOI 命令通过 **OCW2** 写入偶地址端口(最小系统 = 20H):
|
||||
|
||||
| EOI 类型 | OCW2 值 | 二进制 | 说明 |
|
||||
|---------|:-------:|--------|------|
|
||||
| 普通 EOI | **20H** | `0010 0000` | 清除 ISR 中优先级最高的位 |
|
||||
| 特定 EOI | C0H + 级别 | `11xx x000` | 清除 ISR 中指定位 |
|
||||
|
||||
```asm
|
||||
; 普通 EOI 示例(中断服务程序末尾)
|
||||
MOV AL, 20H ; 非特定 EOI 命令
|
||||
OUT 20H, AL ; 发送到 82C59A(偶地址端口)
|
||||
IRET ; 中断返回
|
||||
```
|
||||
|
||||
### 4. 自动结束 vs 非自动结束
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A["82C59A 中断结束"] --> B{"ICW4 的 AEOI 位"}
|
||||
B -- "AEOI=1<br/>自动结束" --> C["第二个 INTA 脉冲后<br/>自动清除 ISR 位<br/>无需软件干预"]
|
||||
B -- "AEOI=0<br/>非自动结束" --> D["需要软件发送<br/>EOI 命令清除 ISR"]
|
||||
D --> E["OCW2=20H → 20H端口"]
|
||||
style C fill:#dfd,stroke:#333,color:#000
|
||||
style D fill:#fdd,stroke:#333,color:#000
|
||||
```
|
||||
|
||||
> [!question] 思考题
|
||||
> 自动结束方式既然如此方便,为什么还要用非自动结束方式?
|
||||
>
|
||||
> 答:自动结束方式在第二个 INTA 脉冲后**立即**清除 ISR 位,此时中断服务程序尚未执行完毕。如果此时有同级中断到来,可能会造成 ISR 状态混乱。非自动结束方式允许程序员在**服务程序真正完成时**才清除 ISR,更加可控和安全。
|
||||
|
||||
### 5. 真题回顾
|
||||
|
||||
> [!example] 【真题】当 82C59A 工作于\_\_\_\_\_\_方式时,需要在中断服务完成后发中断结束命令。
|
||||
>
|
||||
> **答案**:非自动结束方式
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[8259A中断管理基础]]
|
||||
- [[82C37A DMA控制器]]
|
||||
- [[接口与通讯技术/复习文档/8259A中断控制器]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
@@ -0,0 +1,74 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- DAC
|
||||
- 数模转换
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# DAC 分辨率
|
||||
|
||||
## 概述
|
||||
|
||||
DAC(数模转换器)的分辨率是模拟接口技术中的基础概念。在试卷中作为填空题出现,考查分辨率的决定因素。本专题讲解分辨率的定义、计算公式以及与位数的关系。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. 分辨率的定义
|
||||
|
||||
DAC 的分辨率定义为输出能够区分的**最小模拟量变化**,仅由输入数字量的**位数 n** 决定:
|
||||
|
||||
$$\text{分辨率} = \frac{1}{2^n - 1} \approx \frac{1}{2^n}$$
|
||||
|
||||
> [!important] 考试关键点
|
||||
> **DAC 的分辨率只与位数有关**,与参考电压、精度等其他因素无关。
|
||||
|
||||
### 2. 位数与分辨率对照
|
||||
|
||||
| 位数 n | 分辨率 | 量化等级数 | 典型应用 |
|
||||
|-------|--------|----------|---------|
|
||||
| 8 位 | 1/255 ≈ 0.39% | 256 | 音频播放(低质量) |
|
||||
| 10 位 | 1/1023 ≈ 0.098% | 1,024 | 工业控制 |
|
||||
| 12 位 | 1/4095 ≈ 0.024% | 4,096 | 音频播放(CD 质量) |
|
||||
| 16 位 | 1/65535 ≈ 0.0015% | 65,536 | 高保真音频 |
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A["DAC 分辨率"] --> B["只与位数 n 有关"]
|
||||
B --> C["分辨率 = 1/(2ⁿ-1)"]
|
||||
C --> D["位数越多<br/>分辨率越高<br/>输出越精细"]
|
||||
style B fill:#dfd,stroke:#333,color:#000
|
||||
```
|
||||
|
||||
### 3. 分辨率 vs 精度
|
||||
|
||||
> [!warning] 易混淆概念
|
||||
>
|
||||
> | 概念 | 决定因素 | 说明 |
|
||||
> |------|---------|------|
|
||||
> | **分辨率** | 仅位数 n | 理论最小可分辨的模拟量变化 |
|
||||
> | **精度** | 位数 + 参考电压稳定性 + 非线性误差 | 实际输出与理论值的偏差 |
|
||||
>
|
||||
> 分辨率高 ≠ 精度高。一个 16 位 DAC 如果参考电压不稳定,实际精度可能还不如一个稳定的 12 位 DAC。
|
||||
|
||||
### 4. 计算示例
|
||||
|
||||
> [!example] 例题
|
||||
>
|
||||
> 一个 10 位 DAC,参考电压 Vref = 5V,求分辨率(以电压表示)。
|
||||
>
|
||||
> $$\text{分辨率} = \frac{V_{ref}}{2^n - 1} = \frac{5V}{1023} \approx 4.89mV$$
|
||||
>
|
||||
> 即输出每变化 1 个 LSB,模拟电压变化约 4.89mV。
|
||||
|
||||
### 5. 真题回顾
|
||||
|
||||
> [!example] 【真题】DAC 的分辨率只与\_\_\_\_\_\_有关。
|
||||
>
|
||||
> **答案**:位数
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[串行通信基础]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
@@ -0,0 +1,114 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- I/O编址
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# I/O 端口编址方式
|
||||
|
||||
## 概述
|
||||
|
||||
I/O 端口编址方式是接口与通讯技术的核心基础概念,**在全部 3 套试卷中均有出现**。PC 系列微机采用独立编址方式,拥有专用的 I/O 访问指令和独立的地址空间。本专题涵盖两种编址方式的区别、直接寻址的范围限制以及 IN/OUT 指令的使用规则。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. 两种编址方式对比
|
||||
|
||||
| 特性 | **统一编址**(存储器映射 I/O) | **独立编址**(隔离 I/O) |
|
||||
|-----|--------------------------|----------------------|
|
||||
| 地址空间 | I/O 与内存**共用**同一地址空间 | I/O 有**独立**的地址空间 |
|
||||
| 访问指令 | 普通访存指令(MOV 等) | **专用** I/O 指令(IN/OUT) |
|
||||
| 地址范围 | 受内存地址空间限制(可达 1MB+) | 独立编码,通常较小(x86 为 64KB) |
|
||||
| 代表架构 | ARM、MIPS、PowerPC | **x86(PC 系列微机)** |
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A["I/O 编址方式"] --> B["统一编址<br/>存储器映射 I/O"]
|
||||
A --> C["独立编址<br/>隔离 I/O"]
|
||||
B --> D["与内存共用地址空间<br/>用 MOV 指令访问"]
|
||||
C --> E["独立 I/O 地址空间<br/>用 IN/OUT 指令访问"]
|
||||
E --> F["PC 系列采用此方式"]
|
||||
style C fill:#dfd,stroke:#333
|
||||
style F fill:#f9f,stroke:#333
|
||||
```
|
||||
|
||||
> [!question] 思考题
|
||||
> 为什么 x86 选择独立编址而非统一编址?
|
||||
>
|
||||
> 答:独立编址有以下优势:
|
||||
> 1. I/O 指令(IN/OUT)明确标识 I/O 操作,便于操作系统管理和保护
|
||||
> 2. 不占用宝贵的内存地址空间
|
||||
> 3. I/O 地址解码电路简单(只需 16 位地址线)
|
||||
> 4. I/O 操作和内存操作可以有不同的时序和等待周期
|
||||
|
||||
### 2. 独立编址的 I/O 端口地址范围
|
||||
|
||||
x86 的 I/O 指令有两种端口地址寻址方式:
|
||||
|
||||
| 寻址方式 | 端口地址范围 | 指令格式 | 说明 |
|
||||
|---------|------------|---------|------|
|
||||
| **直接寻址** | **00H ~ FFH**(8 位,共 256 个端口) | `IN AL, 端口号` | 端口号作为 8 位立即数嵌入指令中 |
|
||||
| **间接寻址** | 0000H ~ FFFFH(16 位,共 65536 个端口) | `IN AL, DX` | 端口号放在 DX 寄存器中 |
|
||||
|
||||
> [!important] 考试高频点
|
||||
> **直接寻址时端口地址范围为 00H~FFH(0~255)**,这是填空题的经典考法。
|
||||
>
|
||||
> 原因:直接寻址的端口号是 8 位立即数,8 位二进制最大表示 255(FFH),所以只能访问前 256 个端口。
|
||||
|
||||
```asm
|
||||
; 直接寻址示例(端口号 ≤ FFH)
|
||||
IN AL, 20H ; 从端口 20H 读取一个字节到 AL
|
||||
OUT 21H, AL ; 将 AL 的内容输出到端口 21H
|
||||
|
||||
; 间接寻址示例(端口号 > FFH 时必须用 DX)
|
||||
MOV DX, 300H ; 端口地址 > FFH,必须用 DX
|
||||
IN AL, DX ; 从 DX 指定的端口读取
|
||||
```
|
||||
|
||||
> [!tip] 记忆口诀
|
||||
> "直接寻址八位宽,零到二五五(FFH);超过范围用 DX,间接寻址十六位。"
|
||||
|
||||
### 3. IN/OUT 指令详解
|
||||
|
||||
IN/OUT 是 x86 的专用 I/O 指令,**只能在独立编址方式下使用**:
|
||||
|
||||
| 指令 | 功能 | 数据方向 |
|
||||
|------|------|---------|
|
||||
| `IN AL, port` | 从 I/O 端口读一个字节到 AL | 端口 → CPU |
|
||||
| `IN AX, port` | 从 I/O 端口读一个字到 AX | 端口 → CPU |
|
||||
| `OUT port, AL` | 将 AL 的内容写到 I/O 端口 | CPU → 端口 |
|
||||
| `OUT port, AX` | 将 AX 的内容写到 I/O 端口 | CPU → 端口 |
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant CPU as "CPU"
|
||||
participant IO as "I/O 端口"
|
||||
CPU->>IO: "OUT port, AL<br/>(写操作)"
|
||||
Note over IO: "端口接收 AL 的数据"
|
||||
IO->>CPU: "IN AL, port<br/>(读操作)"
|
||||
Note over CPU: "AL 接收端口数据"
|
||||
```
|
||||
|
||||
### 4. 真题回顾
|
||||
|
||||
> [!example] 【真题】I/O 端口的编址方式有两种,分别为\_\_\_\_\_\_和\_\_\_\_\_\_,PC 系列机 I/O 端口的编址方式采用的是后一种。
|
||||
>
|
||||
> **答案**:统一、独立
|
||||
|
||||
> [!example] 【真题】在 PC 系列微机中,输入/输出指令若采用直接寻址方式,I/O 端口地址的范围是\_\_\_\_\_\_。
|
||||
>
|
||||
> **答案**:00H~FFH(0~255)
|
||||
|
||||
> [!example] 【真题】I/O 端口的编址方式有两种,其中\_\_\_\_\_\_编址方式中有专用的 I/O 访问指令。
|
||||
>
|
||||
> **答案**:独立
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[IO端口编址方式]]
|
||||
- [[接口分层结构]]
|
||||
- [[8259A中断管理基础]]
|
||||
- [[82C37A DMA控制器]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
@@ -0,0 +1,118 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- 串行通信
|
||||
- 波特率
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# 串行通信基础
|
||||
|
||||
## 概述
|
||||
|
||||
串行通信是接口与通讯技术的重要组成部分,涉及波特率计算和传输方式分类。本专题覆盖波特率因子的计算方法以及并行/串行传输方式的区别。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. 波特率与波特率因子
|
||||
|
||||
串行通信中,实际波特率与波特率因子的关系为:
|
||||
|
||||
$$\text{波特率} = \frac{\text{时钟频率}}{\text{波特率因子}}$$
|
||||
|
||||
常见波特率因子有 **1、16、64** 三种。
|
||||
|
||||
| 波特率因子 | 说明 | 适用场景 |
|
||||
|:---------:|------|---------|
|
||||
| 1 | 时钟频率 = 波特率 | 同步通信 |
|
||||
| **16** | 时钟频率 = 16× 波特率 | 异步通信(最常用) |
|
||||
| 64 | 时钟频率 = 64× 波特率 | 异步通信(长距离) |
|
||||
|
||||
> [!question] 思考题
|
||||
> 为什么异步通信需要波特率因子?
|
||||
>
|
||||
> 答:异步通信没有共享时钟,接收方需要通过过采样(通常 16 倍)来准确定位每个数据位的起始和结束位置。波特率因子越大,采样精度越高,抗干扰能力越强,但对时钟频率的要求也越高。
|
||||
|
||||
### 2. 波特率因子计算
|
||||
|
||||
收发双方必须保持**相同的波特率**,但可以使用不同的时钟频率和波特率因子组合。
|
||||
|
||||
> [!example] 真题计算
|
||||
>
|
||||
> **题目**:甲乙两机采用串行通信,设甲的发送时钟频率(TxC)为 19200Hz,波特率因子取 16,若乙的接收时钟频率(RxC)为 76800Hz,则乙的波特率因子应该设置为\_\_\_\_\_\_。
|
||||
>
|
||||
> **解题步骤**:
|
||||
>
|
||||
> 第一步:计算甲的实际波特率(即双方共同的波特率)
|
||||
> $$\text{波特率} = \frac{TxC}{\text{波特率因子}} = \frac{19200}{16} = 1200 \text{ Baud}$$
|
||||
>
|
||||
> 第二步:计算乙需要的波特率因子
|
||||
> $$\text{乙的波特率因子} = \frac{RxC}{\text{波特率}} = \frac{76800}{1200} = \textbf{64}$$
|
||||
>
|
||||
> **答案**:64
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A["甲: TxC=19200Hz<br/>因子=16"] --> B["波特率=1200 Baud"]
|
||||
B --> C["乙: RxC=76800Hz<br/>因子=?"]
|
||||
C --> D["因子=76800/1200=64"]
|
||||
style D fill:#dfd,stroke:#333,color:#000
|
||||
```
|
||||
|
||||
> [!tip] 解题公式总结
|
||||
> $$\text{收发双方波特率相同} \Rightarrow \frac{TxC_{甲}}{K_{甲}} = \frac{RxC_{乙}}{K_{乙}}$$
|
||||
>
|
||||
> 因此:$K_{乙} = \frac{RxC_{乙} \times K_{甲}}{TxC_{甲}}$
|
||||
|
||||
### 3. 并行与串行传输方式
|
||||
|
||||
接口与**外部设备**之间的信息传送方式可分为两种:
|
||||
|
||||
| 特性 | **并行传输** | **串行传输** |
|
||||
|------|------------|------------|
|
||||
| 数据线数量 | 多根(8/16/32 位同时) | 1 根(逐位传输) |
|
||||
| 传输速度 | 快(单位时间传多位) | 慢(单位时间传 1 位) |
|
||||
| 传输距离 | 短(信号同步困难) | 长(抗干扰能力强) |
|
||||
| 成本 | 高(需要多根线) | 低(只需 1~3 根线) |
|
||||
| 典型接口 | LPT 打印机、IDE 硬盘 | RS-232、USB、SPI、I²C |
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph 并行
|
||||
direction LR
|
||||
A1["D7"] --- B1["D7"]
|
||||
A2["D6"] --- B2["D6"]
|
||||
A3["D5"] --- B3["D5"]
|
||||
A4["D4"] --- B4["D4"]
|
||||
A5["D3"] --- B5["D3"]
|
||||
A6["D2"] --- B6["D2"]
|
||||
A7["D1"] --- B7["D1"]
|
||||
A8["D0"] --- B8["D0"]
|
||||
C1["接口"] --- D1["外部设备"]
|
||||
end
|
||||
subgraph 串行
|
||||
direction LR
|
||||
E["接口"] ---|"1根线<br/>逐位传输"| F["外部设备"]
|
||||
end
|
||||
```
|
||||
|
||||
> [!info] 并行接口的定义
|
||||
> **并行接口**是指接口电路与**I/O 设备(外部设备)**之间采用多根数据线并行传输数据的接口。
|
||||
|
||||
### 4. 真题回顾
|
||||
|
||||
> [!example] 【真题】甲乙两机采用串行通信,设甲的发送时钟频率(TxC)为 19200Hz,波特率因子取 16,若乙的接收时钟频率(RxC)为 76800Hz,则乙的波特率因子应该设置为\_\_\_\_\_\_。
|
||||
>
|
||||
> **答案**:64
|
||||
|
||||
> [!example] 【真题】接口与\_\_\_\_\_\_之间的信息传送方式可分为并行和串行两种。
|
||||
>
|
||||
> **答案**:外部设备
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[接口分层结构]]
|
||||
- [[DAC分辨率]]
|
||||
- [[接口与通讯技术/复习文档/8251A串行通信接口]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
@@ -0,0 +1,140 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- 寄存器
|
||||
- 指令系统
|
||||
- 寻址方式
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# 寄存器与指令系统
|
||||
|
||||
## 概述
|
||||
|
||||
x86 指令系统中的寄存器使用规则和寻址方式是接口与通讯技术的基础知识。本专题覆盖 3 套试卷中出现的寄存器拼接、隐含寄存器、间接寻址寄存器以及 LEA 指令等高频考点。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. 16 位寄存器的字节拼接
|
||||
|
||||
x86 的 16 位通用寄存器可以由两个 8 位寄存器拼接而成:
|
||||
|
||||
| 16 位寄存器 | 高 8 位 | 低 8 位 | 拼接公式 |
|
||||
|:----------:|:------:|:------:|---------|
|
||||
| **AX** | AH | AL | AX = AH × 256 + AL |
|
||||
| **BX** | BH | BL | BX = BH × 256 + BL |
|
||||
| **CX** | CH | CL | CX = CH × 256 + CL |
|
||||
| **DX** | DH | DL | DX = DH × 256 + DL |
|
||||
|
||||
> [!important] 拼接规则
|
||||
> **高位在前,低位在后**。DH 存放高 8 位,DL 存放低 8 位。
|
||||
|
||||
> [!example] 真题计算
|
||||
> (DL) = 12H,(DH) = 34H,则 (DX) = ?
|
||||
>
|
||||
> $$DX = DH \times 100H + DL = 34H \times 100H + 12H = \textbf{3412H}$$
|
||||
>
|
||||
> 即 DH(34H)为高字节,DL(12H)为低字节,拼接后 DX = **3412H**。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A["DH = 34H"] --> C["DX"]
|
||||
B["DL = 12H"] --> C
|
||||
C --> D["DX = 3412H"]
|
||||
style A fill:#f9f,stroke:#333,color:#000
|
||||
style B fill:#bbf,stroke:#333,color:#000
|
||||
```
|
||||
|
||||
> [!question] 思考题
|
||||
> 如果 (AL) = FFH,(AH) = 00H,则 (AX) = ?
|
||||
>
|
||||
> 答:AX = 00H × 100H + FFH = **00FFH**。注意高位在前的拼接规则。
|
||||
|
||||
### 2. LOOP 指令隐含的寄存器
|
||||
|
||||
`LOOP` 指令的执行流程:
|
||||
1. **CX ← CX - 1**(自动递减计数器)
|
||||
2. 若 CX ≠ 0,跳转到目标地址;若 CX = 0,退出循环
|
||||
|
||||
CX 作为 **Count Register**(计数寄存器),是 LOOP 指令**隐含使用**的寄存器,无需在指令中显式指定。
|
||||
|
||||
```asm
|
||||
MOV CX, 10 ; 循环 10 次
|
||||
AGAIN:
|
||||
; 循环体
|
||||
LOOP AGAIN ; CX 自动减 1,不为 0 则跳回 AGAIN
|
||||
```
|
||||
|
||||
> [!warning] 易错点
|
||||
> 如果 CX 初始值为 0,LOOP 会执行 **65536 次**(16 位模式下 CX 从 0 减 1 变为 FFFFH,不为 0 继续循环,直到减到 0 才退出)。
|
||||
|
||||
### 3. 间接寻址的四个寄存器
|
||||
|
||||
x86(16 位模式)中,能够用于**寄存器间接寻址**的寄存器只有 4 个:
|
||||
|
||||
| 寄存器 | 默认段寄存器 | 常见用途 |
|
||||
|-------|------------|---------|
|
||||
| **BX** | DS | 基址寄存器,常用于数据访问 |
|
||||
| **BP** | SS | 基址指针,常用于栈帧访问 |
|
||||
| **SI** | DS | 源变址寄存器 |
|
||||
| **DI** | ES | 目的变址寄存器 |
|
||||
|
||||
> [!important] 考试关键点
|
||||
> 能够实现对存储单元进行间接寻址的寄存器有 **BX**、BP、SI 和 DI。
|
||||
>
|
||||
> AX、CX、DX **不能**直接用于内存间接寻址。
|
||||
|
||||
```asm
|
||||
MOV AL, [BX] ; 从 DS:BX 指向的内存单元读取
|
||||
MOV AL, [SI] ; 从 DS:SI 指向的内存单元读取
|
||||
MOV AL, [BP] ; 从 SS:BP 指向的内存单元读取(默认段为 SS)
|
||||
MOV AL, [DI] ; 从 ES:DI 指向的内存单元读取(串操作时默认段为 ES)
|
||||
```
|
||||
|
||||
### 4. LEA 指令
|
||||
|
||||
`LEA`(Load Effective Address)指令将源操作数的**有效地址(EA)**加载到目标寄存器中,而不是内存内容。
|
||||
|
||||
| 指令 | 功能 | 结果 |
|
||||
|------|------|------|
|
||||
| `LEA BX, [SI]` | 将 SI 的有效地址(偏移地址)加载到 BX | BX = SI 的值 |
|
||||
| `MOV BX, [SI]` | 将 SI 指向的内存单元内容加载到 BX | BX = 内存[SI] 的值 |
|
||||
|
||||
> [!example] 真题分析
|
||||
> (DS) = 2000H,(SI) = 3000H,(23000H) = 12H,(23001H) = 34H
|
||||
>
|
||||
> 执行 `LEA BX, [SI]` 后:
|
||||
> - LEA 取的是**有效地址**,即偏移地址 SI = 3000H
|
||||
> - 但题目答案为 **2000H**,可能存在特殊的考查角度
|
||||
>
|
||||
> > [!warning] 注意
|
||||
> > 此题答案 2000H 与标准 LEA 指令行为不完全吻合。若严格按照 `LEA BX,[SI]`,BX 应等于 SI = 3000H。建议结合教材确认具体考查意图。
|
||||
|
||||
> [!question] 思考题
|
||||
> `LEA BX, [BX+SI+10H]` 的作用是什么?
|
||||
>
|
||||
> 答:将 BX+SI+10H 的计算结果(有效地址)存入 BX。LEA 常用于地址计算而非单纯的地址加载。
|
||||
|
||||
### 5. 真题回顾
|
||||
|
||||
> [!example] 【真题】在 PC 系列微机中,如果各寄存器的内容为 (DL)=12H,(DH)=34H,则 (DX)=\_\_\_\_\_\_。
|
||||
>
|
||||
> **答案**:3412H
|
||||
|
||||
> [!example] 【真题】在 PC 系列微机指令系统中,循环指令 LOOP 隐含使用的寄存器是\_\_\_\_\_\_。
|
||||
>
|
||||
> **答案**:CX
|
||||
|
||||
> [!example] 【真题】在 PC 系列微机指令系统中,能够实现对存储单元进行间接寻址的寄存器有\_\_\_\_\_\_,BP,SI 和 DI。
|
||||
>
|
||||
> **答案**:BX
|
||||
|
||||
> [!example] 【真题】若当前各相关寄存器及存储单元的内容为:(DS)=2000H,(SI)=3000H,(23000H)=12H,(23001H)=34H,则执行完指令 `LEA BX,[SI]` 后,(BX)=\_\_\_\_\_\_。
|
||||
>
|
||||
> **答案**:2000H
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[IO端口编址方式]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
@@ -0,0 +1,132 @@
|
||||
---
|
||||
tags:
|
||||
- 接口与通讯技术
|
||||
- 接口分层
|
||||
- 总线接口
|
||||
- 重点复习
|
||||
create time: 2026-06-28 15:00
|
||||
---
|
||||
|
||||
# 接口分层结构
|
||||
|
||||
## 概述
|
||||
|
||||
现代微机系统由于总线结构的改变,接口在硬件上被分为**设备接口**和**总线接口**两个层次。这一分层模型是理解接口工作原理的基础,在 3 套试卷中均有考查。两个层次的信息传递方式不同:设备接口直接传递硬件信号,总线接口通过地址映射间接传递信息。
|
||||
|
||||
## 正文
|
||||
|
||||
### 1. 接口为什么需要分层?
|
||||
|
||||
早期微机系统中,CPU 直接通过专用线路连接外设。随着总线技术的发展,总线成为所有部件共享的通信通道,接口自然分化为两个层次:
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
CPU["CPU"] --> Bus["系统总线"]
|
||||
Bus --> Bridge["总线接口<br/>(桥 Bridge)"]
|
||||
Bridge --> DeviceIF["设备接口"]
|
||||
DeviceIF --> Peripheral["外部设备"]
|
||||
style Bridge fill:#f9f,stroke:#333
|
||||
style DeviceIF fill:#bbf,stroke:#333
|
||||
```
|
||||
|
||||
> [!question] 思考题
|
||||
> 为什么要分层?直接用一层接口不行吗?
|
||||
>
|
||||
> 答:分层的好处在于:
|
||||
> 1. **标准化**:总线接口遵循总线协议标准(如 PCI、USB),设备接口遵循外设协议标准
|
||||
> 2. **灵活性**:不同总线标准的设备可以通过"桥"芯片接入系统
|
||||
> 3. **复用性**:一个总线接口可以服务多种设备接口
|
||||
|
||||
### 2. 两个层次的对比
|
||||
|
||||
| 层次 | 名称 | 信息传递方式 | 特点 | 类比 |
|
||||
|-----|------|------------|------|------|
|
||||
| 下层 | **设备接口** | **直接传递** | 与具体外设直接相连,信号通过硬件线路直接传输,时序和电平由硬件决定 | 如同"翻译官",直接与外国人对话 |
|
||||
| 上层 | **总线接口**(桥) | **间接传递**(映射关系) | 面向系统总线,设备寄存器映射到总线地址空间,CPU 通过地址读写实现间接通信 | 如同"邮政系统",通过地址投递信息 |
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A["CPU 读写指令"] --> B["总线地址"]
|
||||
B --> C["总线接口<br/>地址映射"]
|
||||
C --> D["设备接口<br/>硬件信号转换"]
|
||||
D --> E["外设物理操作"]
|
||||
style C fill:#f9f,stroke:#333,color:#000
|
||||
style D fill:#bbf,stroke:#333,color:#000
|
||||
```
|
||||
|
||||
### 3. 设备接口 — 直接传递
|
||||
|
||||
设备接口负责与具体外设之间的信号匹配:
|
||||
|
||||
- **信号电平转换**:如 TTL 电平 ↔ RS-232 电平
|
||||
- **时序协调**:匹配 CPU 总线时序与外设响应速度
|
||||
- **数据格式转换**:并行 ↔ 串行、编码转换等
|
||||
- 信息通过**硬件线路直接传递**,两端的信号是物理对应的
|
||||
|
||||
> [!example] 实例
|
||||
> 打印机接口(LPT):CPU 输出的并行数据通过设备接口直接送到打印机的数据引脚,信号是一一对应的。
|
||||
|
||||
### 4. 总线接口(桥)— 间接传递(映射)
|
||||
|
||||
总线接口将设备功能"映射"为总线地址空间中的寄存器:
|
||||
|
||||
- CPU 对某个地址的读写操作,实际上是在操作远端设备的寄存器
|
||||
- 两端的信息是一种**映射关系**,而非直接的物理信号对应
|
||||
- 典型的"桥"芯片:PCI 桥、USB 主机控制器等
|
||||
|
||||
> [!example] 实例
|
||||
> 内存映射 I/O(MMIO):CPU 写入地址 0xFEC00000,实际上是在向网卡的控制寄存器发送命令。CPU 并不知道这个地址背后是网卡——它只是"映射"过去的。
|
||||
|
||||
### 5. 并行与串行传输方式
|
||||
|
||||
接口与**外部设备**之间的信息传送方式分为两种:
|
||||
|
||||
| 传输方式 | 数据线数量 | 传输特点 | 适用场景 | 典型接口 |
|
||||
|---------|-----------|---------|---------|---------|
|
||||
| **并行传输** | 多根(8/16/32 位) | 多位同时传输,速度快 | 近距离、高速设备 | LPT 打印机接口 |
|
||||
| **串行传输** | 1 根 | 逐位依次传输,距离远 | 远距离、低速设备 | RS-232、USB |
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph 并行传输
|
||||
A1["D0"] --> B1["D0"]
|
||||
A2["D1"] --> B2["D1"]
|
||||
A3["D2"] --> B3["D2"]
|
||||
A4["D3"] --> B4["D3"]
|
||||
A5["D4"] --> B5["D4"]
|
||||
A6["D5"] --> B6["D5"]
|
||||
A7["D6"] --> B7["D6"]
|
||||
A8["D7"] --> B8["D7"]
|
||||
end
|
||||
subgraph 串行传输
|
||||
C["接口"] -- "1根线逐位传输" --> D["外部设备"]
|
||||
end
|
||||
```
|
||||
|
||||
> [!info] 并行接口的定义
|
||||
> **并行接口**是指接口电路与**I/O 设备(外部设备)**之间采用多根数据线并行传输数据的接口。
|
||||
|
||||
### 6. 真题回顾
|
||||
|
||||
> [!example] 【真题】现代微机系统,总线结构的改变,使得接口在连接设备时,在硬件上分为设备接口和\_\_\_\_\_\_两个层次。
|
||||
>
|
||||
> **答案**:总线接口(桥)
|
||||
|
||||
> [!example] 【真题】现代微机中接口分为两个层次:设备接口和总线接口,它们传递信息的方式不同,其中\_\_\_\_\_\_是直接传递信息,两端的信息通过硬件传递;\_\_\_\_\_\_是间接传递信息,两端的信息是一种映射关系。
|
||||
>
|
||||
> **答案**:设备接口、总线接口
|
||||
|
||||
> [!example] 【真题】接口与\_\_\_\_\_\_之间的信息传送方式可分为并行和串行两种。
|
||||
>
|
||||
> **答案**:外部设备
|
||||
|
||||
> [!example] 【真题】并行接口,是指接口电路与\_\_\_\_\_\_之间采用多根数据线并行传输数据。
|
||||
>
|
||||
> **答案**:I/O 设备(外部设备)
|
||||
|
||||
## 关联笔记
|
||||
|
||||
- [[IO端口编址方式]]
|
||||
- [[接口分层结构]]
|
||||
- [[串行通信基础]]
|
||||
- [[接口与通讯技术/试题册/index|试题册索引]]
|
||||
Reference in New Issue
Block a user