# 第 7 章 可编程接口芯片 —— 期末复习总结 > **本章导读**:所谓"可编程接口芯片",即芯片本身可被设计成具有多项功能或多种工作方式,使用时由 CPU 通过"写控制字"来选择所需功能或工作方式。本章介绍三大经典芯片: > - **7.1 可编程并行接口芯片 8255A** > - **7.2 可编程定时/计数器接口芯片 8253** > - **7.3 可编程串行通信接口芯片 8251A** --- ## 一、详细内容分析 ### 7.1 可编程并行输入/输出接口芯片 8255A #### 7.1.1 8255A 的内部结构与引脚功能 **基本特性**: - Intel 8255A 是通用的可编程**并行 I/O** 接口芯片。 - 内部结构由 4 部分组成:① 数据端口;② A 组/B 组控制电路;③ 数据总线缓冲器;④ 读/写控制逻辑。 - 有 **3 个 8 位并行数据端口**:端口 A(PA7-PA0)、端口 B(PB7-PB0)、端口 C(PC7-PC0)。 - 端口分为 **A 组**(A 口 + C 口高 4 位 PC7-PC4)和 **B 组**(B 口 + C 口低 4 位 PC3-PC0)两组独立管理。 - 支持 3 种工作方式:**方式 0、方式 1、方式 2**。 **CPU 接口信号**: - D7-D0:三态 8 位双向数据总线缓冲器,与系统数据总线相连。 - RESET:复位信号(高电平有效),复位后所有端口置为输入方式。 - CS:片选信号,低电平有效。 - RD、WR:读、写控制信号,低电平有效。 - A1、A0:端口选择信号,配合 RD/WR/CS 选中 4 个内部寄存器。 **端口地址(A1、A0 编码)**: | A1 | A0 | 选中端口 | |----|----|---------------| | 0 | 0 | A 口(数据口)| | 0 | 1 | B 口(数据口)| | 1 | 0 | C 口(数据口)| | 1 | 1 | 控制口 | **端口读写功能表**(CS=0): | 操作 | A1 | A0 | RD | WR | 功能 | |---------|----|----|----|----|----------------------------| | 读操作 | 0 | 0 | 0 | 1 | 数据总线 ← A 口(CPU 读 A) | | 读操作 | 0 | 1 | 0 | 1 | 数据总线 ← B 口 | | 读操作 | 1 | 0 | 0 | 1 | 数据总线 ← C 口 | | 写操作 | 0 | 0 | 1 | 0 | A 口 ← 数据总线 | | 写操作 | 0 | 1 | 1 | 0 | B 口 ← 数据总线 | | 写操作 | 1 | 0 | 1 | 0 | C 口 ← 数据总线 | | 写操作 | 1 | 1 | 1 | 0 | 控制寄存器 ← 数据总线 | #### 7.1.2 8255A 的控制字(两类) **(1) 方式选择控制字(D7=1)** ``` D7 D6 D5 D4 D3 D2 D1 D0 1 M1 M0 C2 B A CH CL │ └A组方式 └C口高4位 └B口 ┘ └C口低4位 ┘ 特征位 00=方式0 01=方式1 1x=方式2 0=输出 1=输入 ``` | D7 | D6 D5 | D4 | D3 | D2 | D1 | D0 | 含义 | |----|-------|----|----|----|----|----|---------------------------------| | 1 | A 组方式 | C 口高 4 位 I/O(0=出,1=入) | B 组方式(0=方式 0, 1=方式 1) | B 口 I/O | C 口低 4 位 I/O | A 口 I/O | **(2) C 口置位/复位控制字(D7=0)** 用于单独对 C 口某一位(PC0-PC7)置 1 或清 0,不影响其它位。 - D7=0(特征位) - D6 D5 D4 = 任意(不用) - D3 D2 D1 = 位选择(000 对应 PC0,111 对应 PC7) - D0 = 0 复位,1 置位 ```assembly ; 例如:把 PC3 置 1 MOV AL, 00000111B ; D7=0, D3D2D1=011(PC3), D0=1 置位 OUT 63H, AL ``` #### 7.1.3 8255A 的工作方式 | 方式 | 适用端口 | 特点 | |------|---------------------|-------------------------------------------------------------| | 0 | A 口、B 口、C 口 | **基本的输入/输出**;无握手联络信号;分两个 8 位(A、B)和两个 4 位(CH、CL)独立设置方向;CPU 直接 IN/OUT | | 1 | A 口、B 口 | **选通(握手)的输入/输出**;C 口引脚作为联络/握手信号;可中断;分输入与输出两种情形 | | 2 | 仅 A 口 | **双向选通 I/O**;A 口分时双向传输;C 口的 PC3-PC7 作双向联络信号 | **方式 1 输入(A 口、B 口)的联络线**: - STB(输入):选通信号,**低电平有效**,由外设送来,把外设数据打入端口锁存器。 - IBF(输入缓冲器满):高电平有效,由 8255A 输出,通知外设"数据已收到"。 - INTR(中断请求):高电平有效,INTE=1 且 IBF=1 且 RD 上升沿时产生。 - INTE(中断允许):A 口用 **PC4** 置位/复位控制;B 口用 **PC2** 置位/复位控制。 - A 口输入时:PC4=STB、PC5=IBF、PC3=INTRA - B 口输入时:PC2=STB、PC1=IBF、PC0=INTRB - PC7-PC6:I/O(仍可作普通 I/O) **方式 1 输出(A 口、B 口)的联络线**: - OBF(输出缓冲器满):低电平有效,CPU 已把数据送到端口。 - ACK(响应):低电平有效,由外设送来,通知 8255A 数据已收到。 - INTR(中断请求):高电平有效,ACK 上升沿后产生。 - INTE:输出 A 口由 **PC6** 置位/复位;输出 B 口由 **PC2** 置位/复位。 - A 口输出:PC7=OBF、PC6=ACK、PC3=INTRA - B 口输出:PC1=OBF、PC2=ACK、PC0=INTRB - PC5-PC4:I/O **方式 2(A 口双向)**: - 仅 A 口适用,PC3-PC7 共 5 个联络信号,含义与方式 1 类似。 - INTE1(输出中断允许)由 **PC6** 置/复位;INTE2(输入中断允许)由 **PC4** 置/复位。 - INTRA 在输入或输出时都可以产生。 #### 7.1.4 8255A 的应用举例(例 7.1.1:方式 0 产生波形) **题目**:8255A 在方式 0 工作,使其在 PC0、PC3 引脚产生如图所示波形,端口地址 60H/61H/62H/63H。 **硬件连接分析**: - 高位地址 A7-A2 通过 74LS138 译码产生片选 CS(要求 Y0 有效,A7-A2=011000)。 - 低位地址 A1、A0 直接连 8255A 的 A1、A0,所以: - A 口地址 = 0110 00 00 = **60H** - B 口地址 = **61H** - C 口地址 = **62H** - 控制口地址 = **63H** **应用基本过程**: 1. **端口地址归纳**(设计):根据硬件连接确定端口地址,或根据接口要求设计硬件。 2. **控制字归纳**:根据工作方式,按方式选择控制字格式归纳控制字。 3. **编写程序**:先初始化(写控制字),再写功能程序。 **初始化与波形程序**(方式 0 输出,A/B/C 全输出,故控制字 D7=1,方式 0 → D6D5=00,PC3、PC0 输出 → D3、D0 都要是 0 = 1000 0000B = 80H): ```assembly START: MOV AL, 80H ; 方式 0 输出控制字(A/B/C 全部为输出) OUT 63H, AL A1: MOV AL, 01H ; PC0=1, PC3=1 → 0000 1001? 注意波形图中PC3=0,PC0=1时为01H OUT 62H, AL CALL D1ms MOV AL, 09H ; 1001B → PC3=1, PC0=0 OUT 62H, AL CALL D1ms MOV AL, 00H ; PC3=0, PC0=0 OUT 62H, AL CALL D1ms MOV AL, 08H ; PC3=1, PC0=0 OUT 62H, AL CALL D1ms JMP A1 ``` > 注:本题也可使用 C 口置位/复位控制字单独控制 PC3、PC0,避免整体重写。 --- ### 7.2 可编程计数器/定时器 8253 #### 7.2.1 8253 的基本功能 1. **3 个独立的 16 位计数器**(计数器 0、1、2),每个能完成 16 位减法计数。 2. 每个计数器有 **6 种工作方式**(方式 0~5)。 3. 能进行 **二进制/十进制(BCD)减法计数**。所谓十进制计数是指 BCD 码计数。 4. 计数频率范围 0~2 MHz。 5. 既可作**计数器**也可作**定时器**使用。 #### 7.2.2 8253 内部结构与引脚 **4 个可寻址的端口(A1、A0 编码)**: | A1 | A0 | 端口 | |----|----|--------------------| | 0 | 0 | 计数器 0(数据口) | | 0 | 1 | 计数器 1(数据口) | | 1 | 0 | 计数器 2(数据口) | | 1 | 1 | 控制口 | **每个计数器 3 条外部信号**: - **CLK**:计数脉冲输入,上升沿触发计数。 - **GATE**:门控信号,启动或禁止计数器。 - **OUT**:计数器状态输出,当减到 0 时按工作方式输出相应波形。 **每个计数器内部 4 个寄存器**(每个 16 位): 1. 8 位控制寄存器(实际只用 6 位)。 2. 16 位计数初值寄存器(保存 CPU 写入的初值)。 3. 16 位减 1 计数器(实际执行减 1 操作)。 4. 16 位输出锁存器(CPU 读取当前计数值时使用)。 **计数初值计算**: - **计数方式**:计数初值 = 要求的计数次数 N。 - **定时方式**:计数初值 = 定时时间 t / 时钟脉冲周期 TCLK = t × fCLK。 **计数初值 0 等价于最大值**:十进制 = 10000,二进制 = 65536(0000H 等于 10000H / FFFFH+1)。 **读/写格式(RL1、RL0 决定)**: - 00 = 锁存命令(锁存当前计数值供 CPU 读) - 01 = 只读/写低 8 位,高 8 位自动为 0 - 10 = 只读/写高 8 位,低 8 位自动为 0 - 11 = 先低 8 位后高 8 位(读写 16 位) #### 7.2.3 8253 的控制字格式 控制字写入 **控制口(A1A0=11)**: ``` D7 D6 D5 D4 D3 D2 D1 D0 SC1 SC0 RL1 RL0 M2 M1 M0 BCD └计数器选择┘ └读/写格式┘ └工作方式┘ └计数方式┘ ``` | 字段 | 编码与含义 | |-----------|----------------------------------------------------------------------------------| | SC1 SC0 | 00=计数器 0,01=计数器 1,10=计数器 2,11=非法 | | RL1 RL0 | 00=锁存命令,01=只读/写低 8 位,10=只读/写高 8 位,11=先低 8 位后高 8 位 | | M2 M1 M0 | 000=方式 0,001=方式 1,×10=方式 2,×11=方式 3,100=方式 4,101=方式 5 | | BCD | 0=二进制计数,1=BCD(十进制)计数 | **编程原则**: 1. 控制字必须在计数初值之前写入;写入控制字有复位作用,使 OUT 变为各方式规定的初始状态。 2. 16 位计数(初)值的读写必须遵守控制字 RL1、RL0 规定的顺序。 3. 读取计数值有 2 种方法:**简单读出**(直接读,先锁存再读)和**锁存读出**(先发锁存命令再读)。 #### 7.2.4 8253 的六种工作方式(核心考点) | 方式 | 名称 | OUT 输出波形 | 启动方式 | 计数值使用 | |------|------------------|-------------------------------|----------|------------| | 0 | 计数结束中断方式 | 上升沿(计数到 0 时变高) | 软启动 | 一次有效 | | 1 | 可编程单稳方式 | N 个 CLK 的单个负脉冲 | 硬启动 | 多次有效 | | 2 | 脉冲频率发生器 | 1 个 CLK 宽的负脉冲(重复) | 软、硬 | 重复有效 | | 3 | 方波发生器 | 占空比 ≈ 50% 方波(重复) | 软、硬 | 重复有效 | | 4 | 软件触发选通 | 计数到 0 后 1 个 CLK 负脉冲 | 软启动 | 一次有效 | | 5 | 硬件触发选通 | 计数到 0 后 1 个 CLK 负脉冲 | 硬启动 | 多次有效 | - **软启动**:写入计数初值后即开始计数(GATE=1)。 - **硬启动**:必须等到 GATE 上升沿才启动计数。 - **一次有效**:送入计数初值后只能计一轮,结束后停止。 - **多次有效**(重复有效):计数结束后自动重新装入初值开始新的一轮计数。 **方式 0(计数结束中断方式)**: - 写入控制字后 OUT 立即变为低电平; - 写入初值后开始减 1 计数,计数到 0 时 OUT 变高(产生正跳变),可作中断请求; - 计数过程中 GATE=0 禁止计数,GATE=1 继续计数; - 计数过程中可改写新的初值,下一个 CLK 按新初值开始计数。 **方式 1(可编程单稳)**: - 硬启动(GATE 上升沿触发),每触发一次输出一个宽度为 N×TCLK 的负脉冲; - 在脉冲期间再次触发可重新开始(再触发单稳)。 **方式 2(脉冲频率发生器 / 速率发生器)**: - 写入初值后即开始计数,OUT 平时为高,计数到 1 时 OUT 变低 1 个 CLK,再自动重新装入初值继续; - **典型应用**:分频器(产生固定周期的窄负脉冲); - GATE=0 停止计数,GATE 上升沿可重新同步启动。 **方式 3(方波发生器)**: - 写入初值后开始计数,OUT 输出占空比近似 50% 的方波; - 初值为**偶数**时,前半段高、后半段低严格对称; - 初值为**奇数**时,高电平多 1 个 CLK 周期(高电平 = (N+1)/2 × TCLK,低电平 = (N-1)/2 × TCLK); - 重复有效,计数到 0 后自动重装初值。 **方式 4(软件触发选通)**: - 写入初值即启动,OUT 平时为高,计数到 0 时输出 1 个 CLK 的负脉冲; - 一次有效(与方式 0 类似但多 1 个负脉冲输出)。 **方式 5(硬件触发选通)**: - 硬启动,GATE 上升沿触发;触发后 OUT 平时为高,计数到 0 时输出 1 个 CLK 的负脉冲; - 多次有效:每次 GATE 上升沿都重新开始一轮。 #### 7.2.5 8253 的应用举例(例 7.2.1:初始化设计) **题目**:8253 通道 1 工作于方式 0,按 BCD 方式计数,初值 400。计数器 0/1/2 和控制寄存器端口地址依次为 80H-83H。 **分析步骤**: 1. **端口地址**:80H/81H/82H/83H。 2. **控制字**:通道 1(SC1SC0=01)、方式 0(M2M1M0=000)、只写低 8 位(RL1RL0=01,因为初值 400 < 256 不需要高字节,也可写 11=16 位)、BCD 计数(BCD=1)。 → 控制字 = 01 01 000 1 = 0111 0001B = **71H**(若选 16 位读写则为 0111 1011 = 7BH)。 3. **计数初值**:400,BCD 格式 → 04 00H(送两次:先低 00H,后高 04H)。 **初始化程序**(按 RL1RL0=01 只写低 8 位示例): ```assembly MOV AL, 71H ; 控制字:通道1, 方式0, BCD, 只写低8位 OUT 83H, AL MOV AL, 00H ; 低 8 位计数值 OUT 81H, AL MOV AL, 04H ; 高 8 位计数值(虽 RL=01 也常按 16 位分两次写) OUT 81H, AL ``` > **常考点**:计数初值公式 = 输入时钟频率 / 期望输出频率(对方式 2、3 而言,输出频率即 OUT 引脚信号频率)。 --- ### 7.3 可编程串行通信接口芯片 8251A #### 7.3.1 串行通信概述 **基本通信方式**:并行通信 vs 串行通信。 **两种传输方式**: - **基带传输**:直接用电平传送数字信号(如 RS-232)。 - **频带传输**:用数字信号调制载波,需 Modem(调制解调器),按调制方式分调幅、调频、调相。 **传送方向**: - **单工**:只能 A→B 单方向。 - **半双工**:双方都可收发,但不能同时。 - **全双工**:双方可同时收发(需 2 条独立信道)。 **传输速率**: - **信息传输速率(比特率)**:单位 bit/s 或 bps。 - **码元传输速率(波特率)**:单位 Baud。 **异步 vs 同步通信**: - **异步通信**:以字节(字符)为单位,一帧包括 **起始位 + 数据位(5~8 位) + 奇偶校验位(可选) + 停止位(1/1.5/2 位)**。字符间空闲位为高电平。传送效率较低但简单。 - **同步通信**:以数据块(字节组)为单位,一帧含 **同步字符 + 数据块**,需收发双方时钟严格同步,传送效率高。 #### 7.3.2 8251A 内部结构 8251A 是串行通讯接口,可工作于**异步方式**或**同步方式**,字符长度 5/6/7/8 位任选。 **5 个组成部分**: 1. 数据总线缓冲器(与 CPU 数据总线接口)。 2. 发送缓冲器(并行→串行,从 TXD 发出)。 3. 接收缓冲器(RXD 接收串行数据→并行)。 4. 读/写控制逻辑(接收 CPU 的 CS、RD、WR、C/D 等)。 5. 调制解调器控制电路(DTR、RTS、DSR、CTS)。 #### 7.3.3 8251A 的引脚 **与 CPU 连接的引脚**: - D7-D0、RD、WR、CS、RESET、CLK - **C/D**:控制/数据端口选择。C/D=0 选数据口;C/D=1 选控制/状态口。 - **TXRDY**:发送器准备好(状态位),通知 CPU 可写入新数据。 - **TXEMPTY**:发送移位寄存器空,高电平有效。 - **TXC**:发送时钟。 - **RXRDY**:接收器准备好(状态位),CPU 可读取数据。 - **RXC**:接收时钟。 - **SYNDET**:同步检测(同步方式下使用)。 **与调制解调器(Modem)的接口信号**: - DTR:数据终端准备好,8251A 通知 Modem 已就绪。 - RTS:请求发送,8251A 要求发送数据。 - DSR:数据装置准备好,Modem 已就绪。 - CTS:清除发送(请求发送响应),允许 8251A 发送。 - RXD:接收数据线;TXD:发送数据线。 **读写操作功能表(C/D + RD + WR + CS)**: | C/D | RD | WR | CS | 操作 | |-----|----|----|----|-----------------------------| | 0 | 0 | 1 | 0 | 数据总线 ← 8251A 数据(CPU 读接收数据)| | 0 | 1 | 0 | 0 | 8251A 数据 ← 数据总线(CPU 写发送数据)| | 1 | 0 | 1 | 0 | 数据总线 ← 8251A 状态(CPU 读状态字)| | 1 | 1 | 0 | 0 | 8251A 控制字 ← 数据总线(CPU 写控制字)| | × | 1 | 1 | 0 | 高阻 | | × | × | × | 1 | 高阻(未选中) | #### 7.3.4 8251A 的控制字 **(1) 方式选择控制字**(**8251A 复位之后**第一个写入;写入"控制口",即 C/D=1): ``` D7 D6 D5 D4 D3 D2 D1 D0 └停止位┘ └字符长度┘ └奇偶校验┘ └通信方式┘ ``` - **D1D0(通信方式选择)**: - 00 = 同步方式 - 01 = 异步方式(×1,时钟 = 波特率) - 10 = 异步方式(×16,时钟 = 16×波特率) - 11 = 异步方式(×64,时钟 = 64×波特率) - **D3D2(字符长度)**:00=5 位,01=6 位,10=7 位,11=8 位。 - **D5D4(奇偶校验)**:0=不用,1=使用奇偶校验。 - **D7D6(异步时停止位)**:00=无效,01=1 位停止位,10=1.5 位停止位,11=2 位停止位。 - **D7D6(同步时同步字符个数)**:00=2 个同步字符(内同步),01=2 个(外同步),10=1 个(内同步),11=1 个(外同步)。 **(2) 命令控制字**(方式选择字之后任何时间可写入;写入"控制口"): ``` D7 D6 D5 D4 D3 D2 D1 D0 EH IR RTS ER SBRK RXE DTR TXEN 搜索同步 内部复位 请求发送 错误复位 发中止 接收允许 终端准备好 发送允许 ``` - **注意**:命令字的 D5(RTS)、D1(DTR) **与引脚反相**(写入 1,引脚输出低)。 - **D3(SBRK)**=1:强迫 TXD 变低(发中止字符)。 - **D6(IR)**=1:内部复位(8251A 复位回到初始状态,等同于 RESET)。 - **D4(ER)**=1:清除错误标志(PE/OE/FE)。 - **D0(TXEN)**=1:允许发送;**D2(RXE)**=1:允许接收;**D7(EH)**=1:异步时无意义,同步方式下允许搜索同步字符。 **(3) 状态字**(只读,反映当前状态;读"状态口"即 C/D=1、RD=0): ``` D7 D6 D5 D4 D3 D2 D1 D0 DSR SYNDET/BD FE OE PE TXEMPTY RXRDY TXRDY ``` - **DSR/SYNDET/BD/TXEMPTY/RXRDY/TXRDY**:与同名引脚状态相同。 - **PE=1**:奇偶错;**OE=1**:溢出错(上一字符还没被 CPU 取走,新字符又到了);**FE=1**:格式错(异步方式下未检测到停止位)。 - **状态位 TXRDY 与引脚 TXRDY 有区别**:状态位 TXRDY 表示**数据输出缓冲器空**;引脚 TXRDY 只有当 **CTS=0**、**TXEN=1** 时才置位(表示可以接收 CPU 数据)。CPU 输出一个字符后状态位 TXRDY 会自动清 0。 #### 7.3.4.4 8251A 初始化流程(重要) **关键顺序**:方式选择控制字 → 命令控制字。**两者必须分两次写入同一个控制口**,且**方式选择字必须在复位之后第一个送入**。如果写完方式选择字立刻又写了命令字,CPU 不会执行命令字内容。 完整流程: 1. 系统 **RESET**(或写命令字 D6=1 内部复位)。 2. 写入 **方式选择控制字**。 3. 异步方式:跳过;同步方式:输出 1~2 个同步字符。 4. 写入 **命令控制字**(允许发送/接收、清错误标志等)。 5. 进行数据传送;发送时查 TXRDY=1,接收时查 RXRDY=1。 6. 工作中若需要可再次写命令字(含内部复位 IR=1)。 #### 7.3.5 8251A 的应用举例(例 7.3.1:异步方式初始化) **题目**:8251A 异步方式,波特率因子 16,每字符 7 位数据位,偶校验,2 个停止位,允许发送和接收。数据口地址 200H,控制口地址 201H。 **方式选择控制字**: - 通信方式:异步×16 → D1D0 = 10 - 字符长度 7 位 → D3D2 = 10 - 偶校验(使用奇偶校验,校验类型由命令字决定) → D5 = 1,D4 = 1(偶校验=1) - 2 位停止位 → D7D6 = 11 控制字 = 11 1 1 1 0 10 = **1111 1110B = FAH** **命令控制字**: - 允许发送 → D0(TXEN)=1 - 允许接收 → D2(RXE)=1 - 清错误标志 → D4(ER)=1 - 其他位取 0(IR=0 不内部复位;SBRK=0 不发中止;RTS=0;DTR=0;EH=0) 命令字 = 00 0 0 1 0 1 0 1 = **0011 0111B = 37H** **初始化程序**: ```assembly MOV AL, 0FAH ; 方式选择控制字 MOV DX, 201H ; 控制端口地址 OUT DX, AL MOV AL, 37H ; 命令控制字:允许收发,清错误标志 OUT DX, AL ; ... 发送/接收数据时再读写 200H 端口 ``` --- ## 二、考点总结 ### (一)8255A 考点 - 【高频】**3 个端口 PA/PB/PC** 的结构,**A 组**(A 口 + C 高 4 位)、**B 组**(B 口 + C 低 4 位)。 - 【高频】**三种工作方式**对比: - **方式 0**:基本输入/输出,**无握手**,A/B/C 口都可工作(适用端口最广)。 - **方式 1**:**选通(握手)输入/输出**,仅 A、B 口适用,C 口做联络信号,**可产生中断**。 - **方式 2**:**仅 A 口**可用的**双向**选通 I/O。 - 【高频】**方式选择控制字(D7=1)**:8 位含义、归纳方法。 - 【高频】**C 口置位/复位控制字(D7=0)**:单独操作 PC0-PC7 中任意一位。 - 【高频】**端口地址归纳**:A1A0 编码(00/01/10/11 选 A/B/C/控制);CS 由高位地址译码得到;通过 74LS138 等译码器确定 CS 后才能算出 A/B/C/控制口地址。 - 【高频】**方式 1 的联络线**: - 输入:STB、IBF、INTR、INTE(A 口 INTE 用 PC4 控,B 口 INTE 用 PC2 控)。 - 输出:OBF、ACK、INTR、INTE(A 口输出 INTE 用 PC6 控,B 口输出 INTE 用 PC2 控)。 - 【高频】**8255A 初始化编程步骤**:归纳端口地址 → 归纳控制字 → 写控制字到控制口 → 通过数据口读写数据。 - 【常考】**74LS138(3-8 译码器)**功能表。 ### (二)8253 考点 - 【高频】**3 个独立 16 位计数器**、**6 种工作方式**、**二进制/BCD 计数**、**最高 2 MHz**。 - 【高频】**计数初值计算公式**: - 计数方式:初值 N = 要求的计数次数。 - 定时方式:初值 N = 定时时间 t / 时钟周期 TCLK = t × fCLK。 - **频率换算**:N = 输入时钟频率 fCLK / 输出信号频率 fout(方式 2、3 适用)。 - 【高频】**控制字格式(8 位)**:SC1/SC0(计数器选择)+ RL1/RL0(读写格式)+ M2/M1/M0(方式)+ BCD(计数制)。 - 【高频】**6 种工作方式对比表**(方式 0~5 名称、波形、启动方式、计数值使用): - **方式 0**:计数结束中断,**软启动**,一次有效,OUT 输出正跃变。 - **方式 1**:可编程单稳,**硬启动**,多次有效。 - **方式 2**:**脉冲频率发生器 / 速率发生器**,**软/硬启动**,**重复有效**,常作分频器。 - **方式 3**:**方波发生器**,**软/硬启动**,**重复有效**,占空比近似 50%;**奇初值时高电平多 1 个 CLK**。 - **方式 4**:软件触发选通,软启动,一次有效。 - **方式 5**:硬件触发选通,硬启动,多次有效。 - 【高频】**GATE 门控信号在各方式中的作用**:电平控制(0 禁/1 允)vs 边沿触发(上升沿启动)。 - 【高频】**端口地址**(A1A0=00/01/10/11 选 计数器 0/1/2/控制口)。 - 【高频】**编程顺序**:**先写控制字,再写计数初值**;16 位数据**先低 8 位后高 8 位**。 - 【常考】**读计数器当前值的两种方法**:简单读出(先锁存再读)和直接读。 - 【常考】**最大计数初值 0 等价于 10000(BCD)或 65536(二进制)**。 ### (三)8251A 考点 - 【高频】**异步串行帧格式**:起始位 + 数据位(5~8)+ 奇偶校验位(可选)+ 停止位(1/1.5/2)。**起始位为 0,停止位为 1**。 - 【高频】**波特率因子**:×1、×16、×64 三种异步方式(时钟 = 波特率因子 × 波特率)。 - 【高频】**3 类引脚**: - 与 CPU:D7-D0、RD、WR、CS、CLK、RESET、**C/D**(区分控制口/数据口)、TXRDY、TXEMPTY、TXC、RXRDY、RXC、SYNDET。 - 与 Modem:DTR、RTS、DSR、CTS、RXD、TXD。 - 【高频】**两类控制字格式**(都写入"控制口"即 C/D=1): - **方式选择控制字**:D1D0 通信方式、D3D2 字符长度、D5D4 奇偶校验、D7D6(异步停止位 / 同步字符)。 - **命令控制字**:EH、IR、RTS、ER、SBRK、RXE、DTR、TXEN。**RTS/DTR 位与引脚反相**。 - 【高频】**状态字**(读"状态口"):DSR、SYNDET/BD、FE、OE、PE、TXEMPTY、RXRDY、TXRDY;PE/OE/FE 三个错误标志由命令字 ER 位清除。 - 【高频】**初始化顺序**(**顺序错则失败**): 1. **RESET**(或命令字 D6=1 内部复位); 2. **写方式选择控制字**; 3. 同步方式还要输出 1~2 个同步字符; 4. **写命令控制字**(允许收发、清错误标志等); 5. 进行数据通信。 - 【高频】**状态位 TXRDY ≠ 引脚 TXRDY**:状态位 TXRDY 表示发送缓冲器空,引脚 TXRDY 还要 CTS=0 且 TXEN=1 时才置位。 ### (四)三大芯片共性考点 - 【高频】**端口地址归纳**:由 CS(高位译码)+ A1A0(低位地址)共同决定。 - 【高频】**控制字/方式字各位含义**——能根据题意写控制字(初始化编程核心)。 - 【高频】**初始化编程** = 写控制字(控制口) + 写数据/初值(数据口)。 - 【常考】**74LS138(3-8 译码器)**、**74LS245 收发器**等辅助芯片功能。 --- ### 三、常见题型与答题思路 #### 1. 编程题:给定硬件连线,写 8255A / 8253 / 8251A 初始化程序 - **步骤 ①**:根据 CS(74LS138 译码输出)和 A1、A0 推出 A/B/C/控制口地址(或计数器 0/1/2/控制口地址)。 - **步骤 ②**:根据题意要求(如方式 0 输出、A 组方式 2、异步 7 位偶校验、计数器 1 方式 2 二进制等)按控制字格式**逐位归纳**。 - **步骤 ③**:按顺序写程序:先 `OUT 控制口, AL`(写控制字),再 `OUT 数据口, AL`(写初值或数据)。 #### 2. 计算题:已知输入频率与输出频率求计数初值 - 公式:**N = fCLK / fout**(针对 8253 方式 2、3)。 - 例:fCLK = 2 MHz,要求输出 1 kHz 方波 → N = 2 000 000 / 1 000 = **2000**。 - 进一步:若要求输出方波(方式 3),2000 为偶数,占空比严格 50%。 #### 3. 分析题:判断 8253 哪种工作方式产生何种波形 - 看 OUT 输出波形形状:单个负脉冲宽度 N×TCLK → **方式 1 单稳**; - 周期重复、窄负脉冲 → **方式 2 速率发生器**; - 占空比近似 50% 方波 → **方式 3 方波发生器**; - 一次正跃变(计数结束中断) → **方式 0**; - 单个 CLK 宽负脉冲、一次有效 → **方式 4**; - 硬触发多次有效 → **方式 5**。 #### 4. 简答题:8255A 方式 1 与方式 0 的区别 / 8253 各方式特点对比 - **8255A 方式 0 vs 方式 1**: - 方式 0:基本 I/O,无握手,CPU 直接 IN/OUT 同步读写。 - 方式 1:选通 I/O,C 口做联络线(STB/IBF/OBF/ACK/INTR),可中断或查询,工作节奏由外设决定。 - **8253 6 种方式对比**:抓住 **启动方式(软/硬)+ 计数值使用(一次/多次)+ 输出波形**三要素即可答全。 --- > **复习建议**:本章编程与计算并重。务必**熟练画出三种芯片的控制字格式**,能根据题目要求在 1 分钟内写出控制字二进制串,再转十六进制送 AL。重点练 8253 的**计数初值计算**和 8255A 的**端口地址归纳 + 方式选择控制字归纳**两大套路。