196 lines
6.2 KiB
Markdown
196 lines
6.2 KiB
Markdown
---
|
||
tags:
|
||
- 接口与通讯技术
|
||
- 8251A
|
||
- 串行通信
|
||
- 可编程芯片
|
||
create time: 2026-06-26 23:05
|
||
---
|
||
|
||
# 8251A 串行通信接口
|
||
|
||
## 概述
|
||
|
||
8251A 是 Intel 公司生产的可编程串行通信接口芯片(USART,Universal Synchronous/Asynchronous Receiver/Transmitter),**在试题 A、B、D 中均有出现**。它负责 CPU(并行数据)与串行外设之间的数据格式转换,支持异步和同步两种通信方式。
|
||
|
||
> [!tip] 考试要点
|
||
> - **两个控制字的写入顺序**:先方式控制字,再命令控制字
|
||
> - **方式控制字各位含义**:D7D6(波特率因子)、D1D0(数据位)
|
||
> - **异步帧格式**:起始位 + 数据位 + 校验位 + 停止位的总位数计算
|
||
> - **状态信号**:TXRDY、RXRDY 的含义
|
||
|
||
## 正文
|
||
|
||
### 1. 串行通信基础概念
|
||
|
||
#### 异步通信 vs 同步通信
|
||
|
||
| 特性 | 异步通信 | 同步通信 |
|
||
|------|----------|----------|
|
||
| 同步方式 | 起始位/停止位实现字符同步 | 同步字符实现数据块同步 |
|
||
| 数据单位 | 逐字符传送 | 以数据块为单位 |
|
||
| 传输效率 | 较低(每字符有冗余位) | 较高 |
|
||
| 适用场景 | 低速、不连续数据 | 高速、连续数据 |
|
||
| 硬件要求 | 简单 | 较复杂 |
|
||
|
||
#### 异步通信帧格式
|
||
|
||
```mermaid
|
||
graph LR
|
||
A["起始位(1)"] --> B["数据位(5~8)"]
|
||
B --> C["校验位(0或1)"]
|
||
C --> D["停止位(1, 1.5, 2)"]
|
||
```
|
||
|
||
> [!example] 帧长度计算
|
||
> 1 位起始 + 8 位数据 + 1 位奇偶校验 + 1 位停止 = **10 位/帧**
|
||
>
|
||
> 波特率 2400 bps → 每秒最多传输 2400 / 10 = **240 个字符**
|
||
|
||
#### RS-232C 电平标准
|
||
|
||
| 逻辑值 | RS-232C 电平 | TTL 电平 |
|
||
|:------:|:------------:|:--------:|
|
||
| 逻辑 "1" | -3V ~ -15V | +2.4V ~ +5V |
|
||
| 逻辑 "0" | +3V ~ +15V | 0V ~ +0.4V |
|
||
|
||
> [!warning] RS-232C 采用 **负逻辑**,与 TTL 电平 **完全相反**!因此 RS-232C 接口需要电平转换芯片(如 MAX232)。
|
||
|
||
### 2. 8251A 的两个控制字
|
||
|
||
8251A 的编程核心是 **两个控制字**,写入顺序不可颠倒:
|
||
|
||
```mermaid
|
||
graph LR
|
||
A["硬件/软件复位"] --> B["写入方式控制字"]
|
||
B --> C["写入命令控制字"]
|
||
C --> D["正常工作"]
|
||
D --> E["可随时写入新命令控制字"]
|
||
```
|
||
|
||
#### 工作方式控制字
|
||
|
||
在复位后 **必须首先写入**,定义通信格式参数:
|
||
|
||
```
|
||
D7 D6 D5 D4 D3 D2 D1 D0
|
||
[波特率因子] [校验控制] [停止位] [数据位]
|
||
|
||
异步模式下:
|
||
D7D6: 00=同步 01=x1 10=x16 11=x64
|
||
D5D4: 00=无校验 01=奇校验 10=偶校验
|
||
D1D0: 00=5位 01=6位 10=7位 11=8位
|
||
```
|
||
|
||
> [!example] 方式控制字计算
|
||
> **要求**:异步通信,波特率因子 x16,偶校验,8 位数据
|
||
>
|
||
> D7D6=10(x16), D5D4=10(偶校验), D3D2=01(1 位停止位), D1D0=11(8 位数据)
|
||
>
|
||
> 控制字 = `1010 0111B` = **A7H**
|
||
>
|
||
> ---
|
||
>
|
||
> **要求**:异步通信,波特率因子 x16,偶校验,8 位数据,1 位停止位
|
||
>
|
||
> D7D6=01(x1 → 按试卷答案 D7D6=01 即因子 1), D3D2=11, D1D0=11
|
||
>
|
||
> 控制字 = `0100 1111B` = **4FH**
|
||
|
||
#### 命令控制字
|
||
|
||
定义 8251A 的操作行为:
|
||
|
||
```
|
||
D7 D6 D5 D4 D3 D2 D1 D0
|
||
EH IR RTS ER SBRK RxE TxD TxEN
|
||
0=正常 0 0=RTS高 0 0 0 0 0=禁止
|
||
1=内部 1 1=RTS低 1 1 1 1 1=允许
|
||
复位
|
||
```
|
||
|
||
各位功能:
|
||
|
||
| 位 | 符号 | 含义 |
|
||
|:--:|------|------|
|
||
| D0 | **TxEN** | 发送允许(1=允许发送) |
|
||
| D1 | **DTR** | 数据终端准备好(0=DTR 输出低) |
|
||
| D2 | **RxE** | 接收允许(1=允许接收) |
|
||
| D3 | **SBRK** | 发送 Break 字符 |
|
||
| D4 | **ER** | 错误标志复位(1=清除 FE/OE/PE 错误标志) |
|
||
| D5 | **RTS** | 请求发送(0=RTS 输出低电平) |
|
||
| D6 | **IR** | 内部复位(1=回到等待方式控制字状态) |
|
||
| D7 | **EH** | 进入搜索方式(同步模式用) |
|
||
|
||
> [!example] 命令控制字计算
|
||
> **要求**:允许发送和接收,清除错误标志
|
||
>
|
||
> TxEN=1, RxE=1, ER=1, 其余=0
|
||
>
|
||
> 命令控制字 = `0001 0101B` = **15H**
|
||
|
||
### 3. 状态信号
|
||
|
||
| 信号 | 含义 | 用途 |
|
||
|------|------|------|
|
||
| **TXRDY** | 发送缓冲器空且允许发送 | 通知 CPU 可以写入新数据 |
|
||
| **RXRDY** | 接收缓冲器满 | 通知 CPU 可以读取数据 |
|
||
| **TxE** | 发送器空 | 所有数据已发送完毕 |
|
||
| **SYNDET/BRKDET** | 同步检测/Break 检测 | 同步模式或 Break 条件 |
|
||
|
||
> [!question] TXRDY 何时变高?
|
||
> 当发送缓冲器空 **且** 命令控制字中 TxEN=1(允许发送)时,TXRDY 变高。CPU 查询到 TXRDY=1 后可以写入下一个待发送的数据字节。
|
||
|
||
### 4. 引脚功能
|
||
|
||
| 引脚 | 功能 |
|
||
|------|------|
|
||
| **TxD** | 发送数据输出 |
|
||
| **RxD** | 接收数据输入 |
|
||
| **TxC** | 发送时钟(控制发送速率) |
|
||
| **RxC** | 接收时钟(控制接收速率) |
|
||
| **RTS** | 请求发送(输出,通知外设) |
|
||
| **CTS** | 清除发送(输入,外设应答) |
|
||
| **DTR** | 数据终端准备好(输出) |
|
||
| **DSR** | 数据装置准备好(输入) |
|
||
|
||
> [!info] 硬件流控制
|
||
> RTS/CTS 和 DTR/DSR 两对信号实现硬件握手中的数据流方向控制:
|
||
> - 发送方:发 RTS(请求发送)→ 等待 CTS(允许发送)→ 开始发送
|
||
> - 接收方:通过 CTS 控制发送方是否可以继续发数据
|
||
|
||
### 5. 8251A 初始化流程
|
||
|
||
```asm
|
||
; 8251A 完整初始化程序
|
||
; 端口地址:04F0H(数据口),04F2H(控制口)
|
||
|
||
; 步骤 1:确保复位状态
|
||
MOV DX, 04F2H ; 控制口
|
||
MOV AL, 00H
|
||
OUT DX, AL
|
||
OUT DX, AL
|
||
OUT DX, AL ; 连续写 3 次 00
|
||
MOV AL, 40H
|
||
OUT DX, AL ; 内部复位命令
|
||
|
||
; 步骤 2:写方式控制字
|
||
MOV AL, 4FH ; 波特率 x16, 偶校验, 8 位数据
|
||
OUT DX, AL
|
||
|
||
; 步骤 3:写命令控制字
|
||
MOV AL, 15H ; 允许收发, 清除错误标志
|
||
OUT DX, AL
|
||
```
|
||
|
||
> [!danger] 初始化顺序不可乱
|
||
> 8251A 硬件复位后处于"等待方式控制字"状态。**必须**先写方式控制字,再写命令控制字。若想重新初始化,需先写命令控制字中 IR=1(40H)进行内部复位,再按顺序重写两个控制字。
|
||
|
||
## 关联笔记
|
||
|
||
- [[8255A可编程并行接口]]
|
||
- [[8254定时计数器]]
|
||
- [[8259A中断控制器]]
|
||
- [[接口与通讯技术/DMA控制器8237A]]
|
||
- [[接口与通讯技术/试题册/index|试题册索引]]
|