《微机原理与接口技术》知识点总结
文章目录
- 一、8086/8088微处理器
-
- 寄存器类型:
-
- 通用寄存器
- 段寄存器
- 标志寄存器
-
- 状态标志寄存器(FLAGS)
第二部分:8086 CPU 指令系统
* 除法指令DIV/IDIV
* * 无符号除数指令DIV
* 带符号数的除法指令IDIV
* 符号扩展指令CBW,CWD
* * CBW
* CWD
* 逻辑运算指令
* * (1)与指令AND
* * 指令格式
* (2)或指令OR
* (3)非指令NOT
* (4)异或指令XOR
* (5)测试指令TEST
-
移位操作
-
- 非循环的移位操作
-
- 执行逻辑左移操作的命令是SHL
-
执行逻辑右移操作的命令是 SHR
-
执行算术左移操作的命令是SAL
-
执行算术右移操作的命令是SAR
* 循环移位指令 * * (1)不带 CF 的循环移位指令-
(2)带 CF 的循环移位指令
-
四、汇编语言程序设计
-
- 伪指令
-
-
第5章 存储器
- 存储器件
-
地址输入端子
- 数据输入端子
- 由芯片选择线(/CS)控制的数据总线
- 通过读写控制线(/OE 和 /WE)实现对存储单元的读取与写入操作
-
6264芯片
-
- 6264芯片与系统的连接
- 6264芯片的编址
-
- 译码方式
-
- 全地址译码
- 部分地址译码
-
存储器接口设计注意点
-
- 存储器件
-
六、输入输出
-
-
输入输出界面概述:
-
-
- 输入输出接口
-
- 主设备
外围设备
输入输出接口应具备以下功能
- 主设备
-
2. I/O端口及其编址
-
3. I/O地址译码
-
-
简单接口电路
-
- 1. 接口的分类及特点
- 2. 三态门接口
- 3. 锁存器接口
-
- 74L273
-
-
-
基本输入/输出方法
-
1. 无条件传输
-
2. 查询处理机制
-
3. 中断管理策略
-
4. DMA传输策略
-
综上所述
-
简单I/O接口电路设计
-
- 例1:
- 例2:
-
七、可编程数字接口
方式0——基本的输入/输出模式
方式1输入
* 方式2——双向传送方式
* 4\. 方式控制字及位控制字
* 5\. 8255芯片的应用
基于可编程并行数字接口的应用示例
应用中的注意点
应用中的注意点
* 8253应用例
-
八、模拟输入/输出接口
- D/A转换器
- 1-1. D/A转换器的工作原理概述
- 2-2. 关键技术参数分析
- 3-3. 常见型号DAC0832介绍
- 4-4. 基本工作状态分类
- 单缓冲工作模式
- 双缓冲模式(标准配置)
- 无缓冲工作状态
- 4-4. 应用实例解析
- 1-1. D/A转换器的工作原理概述
- D/A转换器
-
A/D转换器
-
- 1. A/D转换器的运作模式
- 2. 关键性能参数
- 3. 常用的ADC0809系列芯片
-
- 主要引脚功能描述
- 1. A/D转换器的运作模式
-
内部组成
-
操作步骤
-
接口配置
-
数据采集策略
- 中断
-
-
中断的概念
-
- 中断源
-
中断处理的基本过程
-
- 1. 中断请求
- 2. 中断判优
-
- (1)软件判优
-
(2)硬件判优
- 3. 中断响应
- 4. 中断服务
- 5. 中断返回
-
中断向量和中断向量表
-
- 8086/8088CPU专用中断类型有5个
-
硬件中断
-
- (1)非屏蔽中断
- (2)可屏蔽中断
-
中断处理流程
-
- 堆栈的变化
-
可编程中断控制器8259A
-
- 内部结构
- 引脚功能
- 8259A编程
-
- 1. 初始化命令字
-
- (1)ICW1
- (2)ICW2
- (4)ICW4
-
2. 操作命令字
-
- (1)OCW1
- (2)OCW2
-
一、8086/8088微处理器
寄存器类型:
通用寄存器
-
AX: AL, AH
BX: BL, BH
CX: CL, CH
DX: DL, DH -
栈操作指令中的指示器:SP
-
基址指令中的指示器缩写形式BP
-
源操作地址缩写形式SI
-
目标操作地址缩写形式DI
段寄存器
CS, DS, SS,ES
标志寄存器
IP,FLAGS
状态标志寄存器(FLAGS)
状态管理:用于存储运算结果的状态变量;
(CF, SF, AF, PF, OF, ZF)
CF 为进位标记字段;
PF 为奇偶性标记字段;
AF 为辅助进位标记字段;
ZF 为零性标记字段;
SF 为符号性标记字段;
OF 为溢出性标记字段。
控制标记:负责特定的操作;
(IF, TF, DF)
该变量用于跟踪中断允许状态;
此处使用TF表示状态信息;
IF指示中断被允许的状态;
DF代表方向信息。
二、8086CPU指令系统
数据传送指令MOV
MOV指令格式:MOV dst, src
立即数到通用寄存器的数据传送
MOV AL, 4 ;AL=4
MOV AX, 1000 ;AX=1000
MOV SI, 037BH ;SI=037BH
CS,DS,SS,ES,IP,FLAGS不能用立即数赋值。
mov ax, 2000
mov ds, ax
立即数到存储单元的数据传送
注意:MOV指令的两个操作数类型是确定的。
MOV [1500H], 9
这种形式不可行。\9可作为字节型或字符型。1500H既可以表示单个内存单元的位置;也可以指代起始地址所指向的第一块内存单元。\应当写成以下几种形式:例如`\ MOV BYTE PTR1500H, 9 `\ ;`\ MOV BYTE PTRSI, 9 `\ 依此类推。\
CPU内部寄存器之间的数据传送
MOV AL,BL
MOV AX, BX
MOV DS, AX
-
MOV指令的两个操作数类型必须相同;
MOV AX, BL -
两个操作数不能同时为存储操作数;
MOV [BX],[SI] -
两个操作数不能同时为段寄存器;
MOV DS, ES
寄存器与存储单元之间的数据传送
MOV AL,[2000H]
MOV AX,[SI]
MOV [3200H], CX
MOV ARRY[DI], DL
MOV DL, [BX][SI]
- MOV指令的操作数可以使用各种寻址方式。
除法指令DIV/IDIV
- 被除数的字长标准为其对应的除去系统的两倍长度。
当处理对象为单个字符数据(即字符型变量)时,在执行运算之前需要确保操作对象符合相应的数据类型的定义。
当处理对象为双字符数据(即字符串型变量)时,在执行运算之前需要确保操作对象符合相应的数据类型的定义,并将其正确地传递给相应的计算单元以完成运算过程。
此指令暗示着被除源为AX或DX:AX字段;操作数可选用寄存器或存储器操作码;然而必须避免使用立即数值。
无符号除数指令DIV
DIV BL$ :该操作会将当前数值除以BL寄存器中的值,并将商结果储存在AL寄存器内;同时会将其余数值储存在AH寄存器内。
DIV BX$ :该操作会将当前数值除以BX寄存器中的值,并将其结果商储存在AX寄存器内;同时将其余数值储存在DX寄存器内。
DIV BYTE PTR[SI]$ :该操作会计算当前数值与BYTE PTR[SI]指针指向内存位置的值之比,并将其结果商储放在AL寄存器里;同时将其余数值储放在AH寄存器里。
DIV WORD PTR[DI]$ :该操作会计算当前数值与WORD PTR[DI]指针指向内存位置的值之比,并将其结果商储放在AX寄存器里;同时将其余数值储放在DX寄存器里。
说明
- 在指令执行之前需要确保被处理的数据长度符合规定;若不符合标准,则应使用位扩展指令进行转换。
- 不允许为零。
- 除数不得过低。当除数过小时会导致结果溢出。
带符号数的除法指令IDIV
余数符号与被除数符号保持一致。
符号扩展指令CBW,CWD
使用符号扩展指令对数据类型进行调整。指令不影响标志位。
CBW
该功能模块实现了一种高效的字符编码转换算法。具体而言,该算法能够将AL寄存器中的数值符号位扩展至16位,并将其高位8位的数据通过逐个移位操作依次存入AH寄存器中,从而使得AX寄存器最终包含原来的AL值,实现了一次完整的数值扩展过程
CWD
功能
逻辑运算指令
慕课:逻辑运算指令
逻辑运算指令可以对操作数的任意位进行置位、清0。逻辑运算指令的执行影响6个状态标志位,其中CF 和OF 标志位会被清0,其他状态位的变化与运算结果有关。
因为逻辑运算不会进位也不会溢出。
(1)与指令AND
指令格式
AND ,OPRD1, OPRD2
AND AL, 0FH ;取AL的低4位,屏蔽高4位。
AND AX, BX ;AX与BX进行与运算,结果保存在AX中。
AND [SI], AL ;内存单元[SI]与AL与,结果存回内存单元
AND DX, [BX+SI]
- 从AL寄存器中提取某一位或几位数值。常用与运算。
- 多用于将特定位置清零的同时保留其他位值。
- 使用与运算来清除CF和OF字段:
AND AX, AX ; 该操作后会使得CF和OF字段被置零
该操作后会使得CF和OF字段被置零;同时A字段的值也会随之确定下来。
在完成该操作后:
- SF和PF字段的值不会受到影响;
- 然而,在ZF标志位上会产生相应的影响。
(2)或指令OR
OR指令实现或运算。
OR AX, CX
OR [DI], AL
OR AL, 0FH ;AL的低4位被置1,高4位不变。
OR AL, 80H ;AL的符号位置1,其它位保持不变。
例子:对AL进行偶校验 :
OR AL, AL ;改变PF的值,若为奇数个1发送,如果为偶数个1,将最高位置位1
JPE CONTINUE
OR AL,80H
CONTINUE: ...
- 逻辑或指令常用于将某些位置1,其余位保持不变。
(3)非指令NOT
指令格式 :NOT OPRD
功能 :将OPRD逐位取反,结果返回OPRD中。
例如 :
MOV AL, 0FH
NOT AL ;AL=F0H
NOT BYTE PTR[SI]
(4)异或指令XOR
功能 :OPRD1与OPRD2按位进行异或操作,结果回送OPRD1中。
例如 :
XOR AX, CX
XOR BYTE PTR[DI], 4AH
XOR AX, AX ;AX=0,同时标志位CF=0F=0,这条指令常用于算术运算指令之前清理运算环境。
(5)测试指令TEST
指令格式如下:TEST OPRD1, OPRD2
功能描述:该指令对O PRD1和O PRD2进行按位与运算操作;然而,在本次操作中结果不会被返回至O PRD1中;因此,在完成该指令后两个操作数的数值将保持不变。
运算完成后将触发一系列标志寄存器的状态变化:其中CF和OF均为零;AF字段数值保持不变;而SF、PF字段不受影响(仅ZF字段发生变化)。通常情况下,ZF字段的变化最为显著。
TEST AL, 04H
TEST [SI], 80H
AL采用二进制形式表示为xxxx xxxxB;运算器中常数4的十六进制编码对应的二进制形式为:4H等于十进制4对应的十六进制编码是4H;若AL寄存器第2位数值为零,则相与操作后的结果必然是零值,则ZF标志位设为1;否则相与操作后的结果不等于零值,则ZF标志位设为高位置位。
- 这条指令主要用于验证操作码寄存器(一)中指定的一位是否正确。
操作码寄存器(二)则用于指示需要验证的操作码寄存器(一)中的具体某一位。 - 常见的操作码寄存器(二)取值包括:01H、02H、04H、08H、10H、2O H、4O H及8O H等。
例如欲测试AL寄存器中第零位的状态时,请按照以下指令执行:
TEST AL, OIH
执行该指令后将不影响AL寄存器的内容但会修改相关标志位的状态。若ZF=O表示被测位为I;若ZF=I则表示被测位为O。
移位指令
非循环移位指令
逻辑左移指令SHL,逻辑右移指令SHR,算术左移指令SAL,算术右移指令SAR
逻辑左移指令SHL
指令格式:SHL OPRD, COUNT
功能描述:该指令用于对OPRD进行逐位左移操作。具体而言,在每次操作中将OPRD的所有数据字段按二进制形式向左移动一位,并使最低有效位置移出(即被右移出去),同时最高有效位置则被截断丢失信息。
操作结果:将处理后的数据从OPRD字段输出到标志寄存器CF字段中;其中第0位置留空并填充为零以避免溢出错误。
说明部分:该指令支持的操作对象OPRD既可以是通用寄存器或特定存储设备中的数据块(如内存区域),也可以是其他类型的存储操作数;其控制参数COUNT可取值范围包括但不限于单步执行(COUNT=1)或连续执行至当前程序计数器结束(COUNT=CL)。
逻辑右移指令 SHR
指令格式 :SHR OPRD, COUNT
功能 :将 OPRD 逐位进行右移,最高位向右移到次高位,依次移动,第0位移出 OPRD,移到标志寄存器的 CF 中;最高位空出,用0填补。
说明 :OPRD 可以是寄存器或存储器操作数,COUNT 可以为1或 CL。
算术左移指令 SAL
指令格式 :SAL OPRD, COUNT
说明 :算术左移指令与逻辑左移指令的功能相同,这里不再赘述,但算术左移指令将操
作数作为带符号数处理。
算术右移指令 SAR
指令格式 :按SAR指令操作OPRD字段
功能 :将OPRD字段每一位向右移动一位,并将最高有效位被移至次高位位置;同时将最低位移出OPRD字段,并将其值存入标志寄存器CF字段中;最高有效位保持不变。
说明 :OPRD字段可以是通用寄存器或存储器操作数字段;COUNT参数可取1或CL值。
循环移位指令
循环移位意为首尾相连形成一个环状结构,在左方向完成一次循环移位后可以通过右方向的循环移位来恢复原始数据状态;反之亦然成立。在执行过程中依据CF标志位的状态将其划分为两类:一类是在判断时不受CF标志影响的操作称为不带CF的循环移位指令;另一类则是在判断时会参考CF标志的状态变化被称为带CF的循环移位指令。
(1)不带 CF 的循环移位指令
循环左移的指令格式 :ROL OPRD, COUNT
功能 :该指令实现数据字段OPRD的循环左移操作。具体而言,在每次操作中将OPRD字段中的每一位依次向左移位一次,并将最高位的数据值移至标志寄存器CF字段中对应的位置。
按位循环右移指令用于将O PR D中的每一位向右移动一位。
该指令的功能是执行逐位按方向移动的操作。
具体来说,在完成该操作后:
- 操作源O PR D中的每一位都会被向右侧平移一格
- 最高位会被移到次高位的位置上
- 次高位会被依次平移到右边
- 最后一位会被移到最高位置上
同时,在这一过程中, - 最高位会被移到标志寄存器CF中以供后续使用
该指令支持O PR D作为操作源,
并且能够指定移动次数,
其默认值为1,
也可以通过CL来指定特定次数。
(2)带 CF 的循环移位指令
该指令用于执行循环左移操作。其功能为:将OPRD字段中的每一位向左移动一位,并按顺序依次向前移动一位。其中最低有效位将被移至高位依次向前移动一位;最高有效位将被移至CF字段;而CF字段则会被移回至OPRD字段的最低有效位位置。
依次右移的指令格式:RCR OPRD, COUNT
功能:该指令的作用是依次将OPRD各位向右移动一位,并使最高位被移至次高位位置。同时,在此过程中CF位会被赋值为最高位的值,并将最高位被移至CF位。
说明:其中OPRD字段可作为寄存器或存储器的操作数,在该指令中COUNT字段可取1或CL值。
四、汇编语言程序设计
伪指令
也被称作伪操作语句 ,它负责指导汇编语言源程序的处理流程。例如,在编写软件时会用到此类语句来说明如何定义变量、为数据分配存储空间以及对源程序进行处理等具体操作。这些伪操作语句是由专门的汇编程序进行解析和转换,并由相应的系统组件执行相应的任务步骤。在最终生成的目标代码中不会出现这类语句本身的内容,并因此被统称为伪指令 (directive)。需要注意的是这类指令并不属于计算机处理器(CPU)直接执行的操作指令序列,并且其功能完全依赖于与之配合使用的特定集成调试系统(如MASM)。
五、存储器
存储器件

所有存储器件均具备地址输入端口、数据输出/输入端口以及用于选择单片存储芯片的选中端口,并通过这些控制端子来执行读写操作。
地址输入引脚
CPU接收过来的地址信息,并用于确定存储芯片内部某个存储单元的位置。芯片上的地址线按照顺序从A0开始一直到An
当存储芯片的地址线设定为A₀至A₉时,则其该存储单元的地址范围是从二进制数……到……B(即从……H到……H)。而当该芯片拥有更多的地址线(如至A₁₀)时,则其对应的存储单元地址范围扩大至从二进制数……到……B(即从……H到……H)。
- 地址线数量与芯片内含有的存储单元个数存在一一对应关系。例如,在包含有10根地址线(A₀至A₉)的芯片上,应包含2^{10}=1024个存储单元;而包含有11根地址线(A₀至A₁₀)的芯片则具有2^{11}=2048个存储单元的能力。
数据输入引脚
芯片选择线(/CS)
所有存储器件都配备有芯片选择线,并且每款存储器件最少配置一根用于选择激活该芯片。这些关键控制线路通常标记为CS#片选(Chip Select)或CE#片使能(Chip Enable)等标准标识符。当多根片选线同时有效时,在所有片选线上存在低电平信号的情况下,则该存储芯片才会被激活。在这种情况下,默认情况下只有单个存储单元处于启用状态;如果需要允许多个单元同时启用,则应将相应的片选信号设置为高电平状态以允许更多的数据输入输出通道得以工作运行。
读写控制线(/OE、/WE)
每个存储器都有控制输入输出的控制线,常常标记为#OE,#WE。
当#OE处于低电平状态时, 存储单元存放的数据被依次发送至系统总线, 而当/WE也为低电平时, 存储器则会从数据线上接收信息并存入内部.
ROM类型的存储器件由于无法进行写入操作, 因此通常仅配备一个输出选通/OE引脚, 但部分芯片将其标记为#G.
某些RAM类型受制于物理设计限制, 只能配置一个用于控制输入输出的引脚, 常常标示为R或#W. 在R/#W引脚呈高电平状态下, 芯片执行读取操作; 当其处于低电平时,则负责发送信息至存储器.
RAM芯片若同时具备两个控制端口#WE和#OE, 这两个引脚将无法正常工作. 当它们都呈高电平状态时, 芯片处在一个无效模式下, 既不接收也不发送任何数据.
6264芯片
6264芯片与系统的连接
识别目标单元格所在的存储器芯片 * 系统中可能有几片存储器芯片存在,但目标单元格仅存于其中一片。
- 定位目标后 确定该芯片上的目标单元 * 6264 芯片由 8K(即 2^13)个单元构成。
- 每片 6264 芯片的第一个单元在芯片上的起始地址为:0。
- 每片 6264 芯片的末尾单元在芯片上的地址值为:8191(即 2^13 - 1)。
因此用芯片的13位地址码A0-A12寻址片内的每个单元
6264芯片的编址
| A19~ A13 | A12 ~ A0 | 位置 |
|---|---|---|
| xxxx xxx | 0 0000 0000 0000 | 片首地址 |
| xxxx xxx | 1 1111 1111 1111 | 片尾地址 |
- 所有单元共同拥有相同的高位地址(片选地址 )
- 从片首地址至片位地址所占据的内存空间中的位置范围
译码:通过转换过程实现高地址编码的有效生成,并以确定所选中的存储器芯片;从而计算出该存储器芯片对应的内存地址范围。
完成二进制编码到特定输出信号的转换过程。
译码方式
全地址译码
用最高有效位地址信号作为解码控制信号,则可确保存储器芯片中的每个数据存储单元都对应一个独立且唯一的内存地址空间
部分地址译码
部分高位地址信号被采用(而非全部)作为译码信号时,则会导致被选中的存储器芯片持有几个无法使用的地址范围。
存储器接口设计注意点
- 内部地址负责寻址芯片上的单元,高地址负责选择芯片(片选)
- M/M/W与M/M/R/仅在对存储器芯片执行读或写操作时,能够有效工作,因此这些信号必须作为译码器的有效输入
- 74LS138译码器的启用端及输入端均不能悬空
- 在全规模任务中,最高位始终会成为最终解密结果
六、输入输出
I/O接口概述:
I/O接口的基本功能
I/O接口及其编制方式
I/O地址译码
1. I/O接口
接口要解决的问题
- 速率匹配 ---- 数据缓存与临时存储
- 信号驱动功能 ---- 信号驱动
- 数据类型转换 ---- 数据编码方式转换
- 时间同步机制 ---- 总线隔离模块
高速微处理器与低速外围设备之间需要实现高效协同工作:其核心功能应包含数据缓存能力、动态编码转换能力以及精确的时间同步控制,并提供对外部设备状态的有效反馈;为此设计了一种独立的功能模块——输入输出接口电路。
系统设备
programmable interrupt controller, DMA controller, PCI bus, real-time clock unit, speaker, timer are essential components of the system and are commonly referred to as system components.
外围设备
传统输入输出设备如传统键盘鼠标显示器等属于外围设备常称为外部设备
I/O接口应具有以下能力
-
地址解码:中央处理器通过为输入端口分配唯一的IP地址来识别输入端口,并通过地址总线将该地址信息传递至相应的输入端口。每个输入端口都应具备相应的解码功能。
-
数据传输
-
发送同步控制信号
由于外设运行速度远低于中央处理器的速度,在中央处理器发送指令后外设无法及时读取数据而导致信息丢失的现象普遍存在。因此必须通过发送同步控制信号来确保中央处理器与外设之间的有效协调运作。
I/O接口必须能够提供以下两种基本功能:
a) 外部设备的状态信息;
b) 根据中央处理器的命令输出相应的控制信号以实现对外部设备的实时控制。 -
数据格式转换 5. 信号电平转换 外部设备大多为复杂的机电装置 其信号电平通常与TTL或MOS电路不相容 通常需要借助接口电路来实现信号电平的转换
-
错误检测功能
数据传输过程中时有受到干扰影响(如电磁波干扰),导致信息出现异常;为此系统必须配备基础的错误检测机制,并对传递过来的信息进行验证

2. I/O端口及其编址
端口:接口电路中用于缓存数据及控制信息的部件

计算机系统中包含各类不同功能的接口电路。
每个接口中含有1个或多个端口
端口地址
* 为确保CPU能够访问到每个不同的端口
寻址端口的方法:
- 先识别端口所处的接口电路芯片 —> 片选
- 并从该芯片内部进行定位具体访问的端口 ---->片内寻址
每个端口地址 = 片选地址(高位地址)+ 片选地址
8086/8088寻址端口的能力:
* 64K个端口
端口的编址方式:
- 采用统一的内存编址方式
- 独立编址策略(充分利用内存地址资源,并减少了用于端口指令的数量)
8088/8086的I/O端口编址
- 该系统采用I/O独立编址方式,并通过共享地址总线实现内存访问;在信号控制方面,则利用IO/#M信号状态进行区分。
- 在访问端口中仅使用地址总线的部分对应于A15至A0位。
- 该系统支持最多64K(即65536)个可寻址的I/O端口;其I/O地址范围定义为0至FFFFH。
3. I/O地址译码
-
目的:
- 确定端口的地址
-
参加译码的信号:
- #IOR,#IOW,高位地址信号
-
对端口读/写信号的产生条件
- IO/#M = 1
- #RD = 0 ——> #IOR = 0
- #WR = 0 -——> #IOW = 0
OUT 指令将使总线的**#IOW信号有效
IN 指令将使总线的#IOR**信号有效
I/O地址译码
-
若该接口仅配置一个端口:
-
无片内本地地址的情况下,默认所有地址信号均设置为高位地址(均可参与译码操作),解码输出直接指定该端口;
-
若一接口包含多个端口时:
-
其中高位用于译码以确定接口的基础地址,而低位则指定要访问的具体端口。
由于端口资源丰富,端口地址译码常采用部分地址译码。

简单接口电路
了解和掌握:
- 不同类型接口的特点
- 三态门接口
- 锁存器接口
1. 接口的分类及特点
根据传递信息的方向进行分类:
输入接口(具备对数据进行有效控制的功能)
输出接口(具备对数据进行永久存储功能的需求)
-
按传输信息的类型分类: * 数字接口
- 模拟接口
-
按传输信息的方式分类 * 并行接口
- 串行接口

2. 三态门接口
- 特点:
- 具有对数据的控制能力,但不具备对数据的锁存能力。



3. 锁存器接口
**特点:**具有对数据的锁存能力
- 该类型的锁存器:
- 74LS273:一种不具备数据控制能力的八位锁存器。
- 74LS373:一种支持三位状态的八位锁存器,并且能够实现对数据的有效控制。
- 不仅可作为输入接口使用,
- 还可作为输出接口使用。
74L273
无论是哪种类型的接口(IO或存储器),都必须将读写控制信号作为译码器的输入。


基本输入/输出方法
无条件传送
查询式传送
中断方式传送
直接存储器存取(DMA)
1. 无条件传送

2. 查询工作方式
- 仅在条件得到满足的情况下才能实现数据传输;
-
每次条件被满足时只能执行一次数据传输操作。
-
适用场景:
- 设备通常不会立即准备好状态,并且对传输速度和效率的要求较低。
-
工作条件:
- 外设应提供设备状态信息
- 接口应具备状态端口
-

优点:软硬件比较简单
缺点:CPU效率低,数据传输的实时性差,速度较慢
3. 中断控制方式
- 特点:当外设需要执行操作时会主动向CPU发送请求, CPU接收到请求后会立即处理相应的服务.这些服务完成之后或者当外设不再需要这些服务时,CPU就可以转而执行自己的任务.
- 优点:该系统具有较高的处理效率,能够保证良好的实时响应能力,运行速度也非常快.
- 缺点:由于系统中涉及的程序设计相对较为复杂,因此开发难度较高.
4. DMA控制方式
特点:
- 外设通过存储器进行数据交换,CPU不再承担数据传输的中介职责。
- 总线由DMA控制器管理(CPU不得再主导总线操作),内存及外设的相关地址信息和读写权限均由DMA控制器负责提供。
总结

简单I/O接口电路设计
例1:





例2:




七、可编程数字接口
可编程并行接口芯片8255
1. 并行接口8255的特点
通道式接口:主要用于实现数据输入与输出功能 包含三个独立的8位并行输入/输出端口
- 两种为8位的端⼝(分别用PA和PB表⽰);
- 一种能够分解为两个4位⼝(PC⼝)
所有这些⼝都具有对数据进行控制和存储的功能
- 一种能够分解为两个4位⼝(PC⼝)
*既可以作为输入端口同样可以作为输出端口通过编程实现各端口在特定状态下配置
2. 8255内部的主要部件

有3个8位的数据端口,每个端口都可以作为输入端口,或设置为输出端口。
- 端口A:A接口属于A组,并由A组的控制电路负责实现其功能。它具备输入缓冲能力以及输出锁存的功能。
- 端口B:B接口属于B组,并由B组的控制电路负责实现其功能。它同样具备输入缓冲能力和输出锁存的功能。
- 端口C:它可以被配置为一个8位的数据接口用于输入或输出数据传输,并且还可以分割成两个独立的4位接口以满足不同的需求。
3. 8255引脚信号
链接系统端的主要引线:
- D0——D7
- #CS
- #RD
- #WR
- A0,A1(区分内部的4个端口)
- REAST
| A1 | A0 | 选中端口 |
|---|---|---|
| 0 | 0 | A端口 |
| 0 | 1 | B端口 |
| 1 | 0 | C端口 |
| 1 | 1 | 控制寄存器 |
连接外设端的引脚:
- PA0 —— PA7
- PB0 —— PB7
- PC0 —— PC7
分别对应A、B、C三个端口
4. 8255的工作方式
方式0——基本的输入/输出方式
- 等同于三组独立的八位级简单接口
- 程序能够将任一A/B/C端口配置为八位输入或输出接口。
- C子接口分为高低两部分(每位四字节),各自可被配置为输入或输出段。
- 通常连接较为简单的外围设备,在无需条件判断时可以直接读写数据,并未规定固定 dedicated 的响应专用通信线缆。
习惯上:
A端口与B端口分别承担着8位数据的输入或输出功能
部分C口用作状态输入
注:
设置C端口低位的某一位作为输入端,则其余各位也被配置为输入端。同时可以将高位配置为输出端。

方式1——选通工作方式
- 通过使用一组选通控制信号来实现对A端和B端数据输入输出的管理。
- 其中A端和B端分别作为输入或输出接口,并且C端的部分位被用作选通控制信号。
- 当A端和B端分别作为输入与输出时所使用的选通控制信号各不相同。
方式1输入


方式1输出


方式2——双向传送方式
双向输入输出方式
- 可以既作为输入口,又作为输出口。
只有A端口可以工作在方式2下
方式2的应用:
- 将A端配置为双向端口的所有接口
- 用于实现中断控制功能
- 当A端运行于方式2时:
-
B端可采用方式1进行配置
此时C端的所有位将被用来作为选通控制信号的输入和输出。 -
B口也可工作于方式0
此时C口的剩余位也可工作于方式0
-
4. 方式控制字及位控制字
- 方式控制字 * 用于确定3个端口的工作方式及数据传送方向;

- 该控制字专为C端口设计
- 可配置C端口某一位的初始逻辑状态(设定期望值为高电平或低电平)
- 在运行于方式0并作为输出端时,默认需对输出位初始化

5. 8255芯片的应用
- 芯片与系统的连接
- 芯片的初始化
- 相应的控制程序



MOV DX, 1023H ;控制寄存器地址
MOV AL, 10010000B ;
OUT DX, AL
MOV AL, 0 ;设置PC0为低电平
OUT DX, AL
MOV DX, 1021H ;PB端口
MOV AL, 80H ;PB7输出高电平,启动布防
OUT DX, AL
A: MOV DX, 1020H ;从A端口读数据
IN AL, DX
CMP AL, 0 ;判断是否全为0
JZ A ;
MOV CX, 10 ;循环次数
MOV DX, 1022H ;C端口
MOV AL,1 ;高电平闪烁
B: OUT DX, AL ;亮
CALL DELAY
NOT AL ;反转为0,灭
CALL DELAY
LOOP B
可编程并行数字接口应用例
利用8255和8253构造报警系统


系统软件设计
8255_INIT PROC ;初始化子程序
PUSH AX ;压栈
PUSH DX
MOV DX, 3E3H ;写8255控制字
MOV AL, 90H(10010000B);PA方式0输入,PB方式0输出,PC方式0输出
OUT DX, AL
MOV AL, 0CH (00001100B) ;PC6置0
OUT DX, AL
MOV AL, 0FH (00001111B) ;PC7置1
OUT DX, AL
PUSH DX
PUSH AX
RET
8255 INIT ENDP
8253_INIT PROC
PUSH AX
PUSH DX
MOV DX, 3E7H ;8253控制字
MOV AL, 16H(00010110B);计数器0,读/写低字节,方式3(方波),二进制计数
OUT DX, AL
MOV DX, 3E4H ;8253计数器0
MOV AL, 189;
OUT DX, AL
PUSH DX
PUSH AX
RET
8253 INIT ENDP
L1: MOV DX, 3E0H ;PA口,8个监测点
MOV CX, 5 ;循环5次
L2: IN AL, DX ;读监测点数据
CMP AL, 0 ;是否有异常
JZ L1 ;若无异常继续L1程序段检测
LOOP L2 ;否则检查是否连续5次都有异常
MOV DX, 3E2H ;PC口,报警器+警灯
L3: MOV AL, 40H(01000000B) ;PC6高电平\PC7低电平
OUT DX, AL ;警报
CALL DELAY
MOV AL, 0C0H(11000000B) ;PC6\PC7高电平
OUT DX, AL ;警报+警灯
CALL DELAY
MOV AH, 1;键盘按下执行下一条程序---》MOV AL, 80H
INT 16H
JZ L3
MOV AL, 80H
OUT DX, AL
可编程定时计数器8253
计数与定时
以时钟脉冲为基准的计数与定时系统是一种关键的技术基础。
当计数值稳定后即完成定时操作。
其持续时间由时钟频率和触发次数共同决定。
加法计数
减法计数
8253芯片特点
programmable digital circuits;
non-through-type interface, which possesses specific functionality;
it can perform counting and timing functions;
(for example, it can be used to schedule air conditioning)
工作方式:
- 计数器执行减法运算
- 当计数值降至零时会触发特定控制信号
- 系统允许通过软件界面设定并显示控制型号
认识学习8253主要从这几个方面:
- 外部主要引脚信号功能即内部结构
- 计数启动方式
- 工作方式
- 控制命令字格式
- 应用
1. 外部引线及内部结构

连接系统端的主要引线:
- 从D0到D7的8-bit数据信号
-
#CS: 燃烧选择引脚
-
#RD: 读取权限指示
-
#WR: 写入权限指示
A0, A1: 内部地址, 片内共有四个端口
主要连接外设段的引线 -
CLK–时钟脉冲输入
-
GATE–门控信号输入(计数)
-
OUT–定时输出(输出波形)
-
由三个完全相同且相互独立的16位计数器构成。每个计数器均分配了一个专用端口地址。其中一个是用于存储初始数值的16位初值寄存器,另一个是用于累加计数的16位计数寄存器。
在这两个寄存器中均被初始化赋值。然而,在这种情况下,其数值保持不变。其中的数值自初始开始逐步下降至零。
- 三个独立运行的16位定时/计数器以及一个控制寄存器共同使用4个端口地址。
- 4个端口地址编码:
| A1 | A0 | 选中端口 |
|---|---|---|
| 0 | 0 | CNT0 |
| 0 | 1 | CNT1 |
| 1 | 0 | CNT2 |
| 1 | 1 | 控制寄存器 |
2. 计数启动方式
软件启动由GATE端的高电平状态来决定
硬件启动条件:GATE端出现上升沿
3. 工作方式
方式0
- 软件启动,不自动重复计数;
- 计数结束输出高电平。
先写命令字后写初值
① 当GATE处于高电平状态时,在输入初始值之后立即启动计数过程。
② 在计数值达到预定目标后完成并返回高电平。
③ 该输出信号不仅可以直接用于外部中断请求的处理功能,并且还具备屏蔽不可用中断的功能。
方式1
-
硬件被启动后不会自动进行重复计数。
- 开始时输出低电平,在结束时恢复高电平。
①一旦启动了计数值,在GATE端即使出现低电平也不会停止该数值。
②可以重复触发:当完成一次数值归零后,在无需重新设置初始值的情况下(即初始值仍保留在存储器中),只需响应下一次GATE上升沿即可生成与之前相同宽度的负脉冲。
方式2
- 开始时输出低电平,在结束时恢复高电平。
-
软件与硬件初始化并支持自动循环计数功能
- 当完成最后一个输入脉冲后会输出低电平信号
①该模块能够产生频率为(1/N)倍基频输入时钟 CLK 的连续方波波形信号。
②每一个OUT端触发信号包含(N-1)次正向 CLK 脉冲和一个倒向 CLK 脉冲。
第三种方式
- 当完成最后一个输入脉冲后会输出低电平信号
-
软件驱动型初始化与硬件驱动型初始化并存并支持自动重复计数功能
- 对称方波信号生成器
①当输入参数N为偶数值时:
输出频率等于1/(N)倍时钟周期的连续对称方波信号
②当输入参数N为奇数值时:
输出其包含(N+1)/2个正脉冲与(N-1)/2个负脉冲交替组成的完整对称方波
方案4
①采用软件驱动型初始化方式运行而不进行自动重复计数
输出完成后将触发一个单个时钟周期内的低电平状态
方案5
①采用硬件驱动型初始化方式运行而不进行自动重复计数
输出端口功能与方案4完全一致
- 对称方波信号生成器
小结
-
必须完成两次主控操作以完成数据存储
-
在第一个主控周期内完成数据初始化设置
-
在第二个主控周期内执行数值起始设置
-
基于不同运行模式的系统具有不同的计数器启动机制。
- 可根据输出波形特性的要求来采用相应的运行模式。
- 仅限于采用方式2和3时才能生成连续波形。
控制字
- 用于设定各计数器的工作方式
4. 控制字

5. 8253的应用
硬件设计:
- 与系统的连接
软件设计
- 初始化程序设计
- 写入控制字
- 置计数初值
与系统的连接示意

应用中的注意点
每一次启动计数,需要有2次写操作 :
- 配置写操作参数
- 初始化计数值
- 当计数值设置为8位长度时,则一次性完成;若设定为16位长度,则需分两步操作。
每个计数器的控制命令字均送入控制寄存器
各计数器的计数初值送到该计数器的计数寄存器及初值寄存器。
初始化程序流程
原则:先写入控制字,后写入计数初值
8253应用例
- 采用8253作定时/计数器,器接口地址为0120H~0123H
- 输入8253的时钟频率为2MH。
- 要求:



初始化程序:
CNT0:
MOV DX, 0123H
MOV AL, 34H
OUT DX, AL
MOV DX, 0120H
MOV AX, 20000
OUT DX, AL
MOV AL, AH
OUT DX, AL
八、模拟输入/输出接口
D/A转换器
1. D/A转换器的基本工作原理
- 当使用8位二进制代码控制其中的S1至S8电路(当Di=0时Si断开)时,则每种二进制编码对应不同的输出电压V;
- 随着代码从0到FFH范围变化时,则V0的输出范围随之变为从0到(255/256) Vref。

2. D/A转换器的主要技术指标
-
分辨率 * 输入的二进制数每±1个最低有效位,是输出的变化的程度。
-
分辨率表征方式 * 最小有效二进制数(LSB)
-
可以通过输入数据所占用的有效二进制数来表征其精度水平;例如使用8bit、10bit等数据宽度。
-
同样可以通过每个LSB所引起的输出变化幅度来表征其精度水平。
-
示例:
一个满量程为5V的10bit D/A转换器的分辨率可计算如下:
\text{分辨率} = \frac{5}{2^{10} - 1} \approx \frac{5}{1023} \approx 4.89\,\text{mV}
响应时间是从开始直到模拟量达到满量程值减去或加上半个最低有效二进制位(LSB)的状态所需的时间。
3. 典型D/A转换器DAC0832
特点:
- 8位电流输出型D/A转换器
- T型电阻网络
- 差动输出
主要引脚功能

-
输入寄存器控制信号
D7至D0引脚作为数据传输线使用
ILE引脚用于判断输入是否处于锁存状态
#CS引脚为芯片选通端口
#WR1引脚负责发送指令以完成数据写入操作-
DAC寄存器的控制信号
#WR2:写DAC寄存器 -
输出型号
IOUT1
IOUT2
-

有两道缓冲门
单缓冲模式
- 配置输入寄存器或DAC寄存器中的一个进入直连模式,在这种情况下芯片仅占用单个端口地址。
- CPU只需执行一次写入操作即可启动转换过程;用于处理数据的程序流程为:
MOV DX, PORT
MOV AL, DATA
OUT DX, AL
- #XFER和#WR2接地,表示DAC寄存器为常通状态。

输出三角波:(不考虑频率和赋值调整)
MOV DX, 0278H ;端口
MOV AL, 0 ;从0开始增加
NET1: OUT DX, AL ;输出电压
INC AL ;增加1
CMP AL, 0FFH ;比较是否达到峰值
JNZ NET1 ;未到达,跳转
DEC AL ;到达峰值,开始减
NET2: OUT DX, AL ;输出电压
DEC AL ;减少1
CMP AL, 0 ;比较是否到达0
JNZ NET2 ;否,跳转NET2,继续减1
JMP NET1 ;是,跳转NET1,重新开始
双缓冲模式(标准模式)
-
输入寄存器 * 和 * DAC 寄存器 * 均需保持受控状态。
当 * 输入寄存器 * 的控制信号处于有效状态时,在其内部接收数据后也会传递至 DAC 寄存器的输入端。
与此同时,在 DAC 寄存器的控制信号有效期间,则会在其内部接收相应的数据并触发相应的变换过程。 -
此时芯片目前使用两个端口地址。
-
优点:
- 能够实现数据接收与D/A转换的异步操作;
- 支持多路DAC的同步转换输出。
-
应用场景:分时写入,同步转换
-
在本设计中采用了两片0832 的DAC寄存器配置方案,在这种方案下,两个DAC寄存器共享相同的地址空间,并形成了一个串联结构来共同采用了PORT3的地址资源


MOV AL, DATA
MOV DX, PORT1; 0832-1的输入寄存器地址
OUT DX, AL
MOV DX, PORT2; 0832-2的输入寄存器地址
OUT DX, AL
MOV DX, PORT3; DAC寄存器地址
OUT DX, AL
HLT
无缓冲器模式
- 这两个内部寄存器均处于直通状态。
- 通常情况下,在无缓冲模式下无法直接与CPU建立连接;也就是说,在0832与CPU之间必须插入一个数字接口(如74LS373、8255等)。
4. D/A转换器的应用
- 信号发生器:在D/A转换器中输入遵循一定规律变化的数据后,在输出端能够呈现所需的各种波形。
- 适用于闭环控制系统的场景。
A/D转换器
- ADC的工作原理概述
- ADC的关键性能参数分析
- ADC的实际应用领域探讨
- 设备间的接口配置
- 软件开发流程中的核心环节
ADC作为用于将模拟信号转换为数字信号的核心设备,在数据处理系统中扮演着关键角色。它通过将连续变换的模拟信号转化为离散形式的数据信号,并采用简称为ADC的方式连接到计算机系统中,在整个数据处理链路中起到桥梁作用。
1. A/D转换器的工作原理
- 逐位反馈型A/D转换器 类似于天平称重时使用的试探法,在逐位反馈型A/D转换器中,则通过逐步累加砝码重量来逼近被测信号的大小。

2. 主要技术指标

- 转换能力
-
转化时间 * 完成一次转换所需的时间。位数越多(字长越长),效率越低。
-
动态范围 * 允许转换的电压范围。
-
3. 典型的A/D转换器芯片–ADC0809
ADC0809:
- 8通道(8路)输入
- 8位字长
- 逐位逼近型
- 转换时间100us
- 内置三态输出缓冲器
主要引脚功能

内部结构


工作流程


与系统的连接

采集方式
- 采集单路模拟量
此时通道由硬件自动识别,则系统无需输出任何通道编码信息,并因此也不必进行地址锁定操作。

- 轮流采集模拟量
系统采用软件手段持续输出各通道的寻址信号,并从而实现寻址信号的稳定存储。


中断
中断的概念
中段断就是指当程序运行到某个阶段时,因为突发情况导致CPU暂时停止当前任务,并启动专门处理该情况的任务——中断服务机制完成处理后会立即切换回主进程继续工作,这个过程我们称之为中段断或中断循环
中断源
中断源
- 中断源可以简单分为两类:CPU内所产生的称为内部中段;其他则为外部中段。
- 内部中段具体包括:CPU自身导致的中段、控制器引发的中段以及程序员故意设置的指令所导致的中段。
- 外部中段按照间隔时间紧急程度划分为可屏蔽间段和不可屏蔽间段。
常见中断源
(1)由常规输入输出设备触发的中断请求包括但不限于键盘、打印机等外围设备的操作信号。
(2)通过数据传输通道引发的中断请求主要涉及键盘输入及打印操作。
(3)由实时时钟电路引发的中断请求具体包括定时芯片8253提供的定时输出信号。
(4)硬件异常所导致的中断包括电源供应突然断电及存储芯片出现奇偶校验错误等情况。
(5)软件层面的问题可能引起多个类型的中断事件:例如程序运行过程中执行除法运算时除数为零的操作;或者在数组访问过程中出现越界访问的情况;又或者程序中调用未定义的操作指令均会导致相应的系统响应机制被激活进而引发相应的硬件响应动作。
(6)通过软件配置参数设置变更所引发的相关事件会直接导致系统产生相应的响应行为并进行相应的处理操作
中断处理的基本过程
中断处理的主要环节具体包括:首先在系统中触发一个中断请求;接着进行优化选择以确定最优先级的事件;随后启动响应处理机制;随后进入服务处理流程;最后完成返回处理操作。这些步骤共同构成了完整的中断处理流程。
1. 中断请求
由CPU本体引发的中断事件无需外部中断信号,在这种情况下,相关的控制逻辑能够自动执行处理流程。
(2)外部中断请求由外设中的"中继器"驱动。外设中的"中继器"通过将地址空间映射到目标设备上以实现通信功能。通常情况下,在这种多处理器系统中存在多个处理器可以被同一个主处理器访问并进行操作;其核心特征是能够实现跨处理器间的高效数据交换与同步操作。
(3)中断请求触发器:
每个中断源的中断请求信号发出时间具有不确定性;而CPU响应这些中断的时间也是不确定的;因此,每个中断源都配备了一个独立的中断请求触发器来锁存自己的信号;该触发器会在CPU完成响应该中断请求之后才将其清除。
(4)中断允许触发器
在CPU内部系统中存在一个中断允许触发器,在其状态为'1'时能够被允许执行相应的操作而产生响应(称为开中断)。当触发器状态为'0'时则被阻止执行相应操作而不产生响应(称为关中断)。
在CPU发生复位事件时,在CPU发生复位事件时,在CPU发生复位事件时,在CPU发生复位事件时,在CPU发生复位事件时,在CPU发生复位事件时,在CPU发生复位事件时,在CPU发生复位事件时,在CPU发生复位事件时,在 CPU 发生 复 位 事 件 时 , 中 断 允 许 的 触 发 器 也 复 位 成 "0" , 即 关 闭 中 断 。 当 CPU 检测到 中断响应 事 件 发生后 , CPU 自动地 关闭 中断 并 阻止接收 另一个 新的 中断 。
2. 中断判优
(1)软件判优

当CPU检测到中断信号时,在系统总线上传递的信息中包含了相应的控制信号,在硬件层面通过解析中断标志寄存器的状态来识别出对应的设备存在未处理的中断需求,并立即调用相应的子程序进行处理以完成对这些设备需求的响应
首先进行的是哪一个具有较高的优先权随后应按照一定的逻辑依次处理剩下的部分整个流程应遵循各中断源的优先级顺序
输入端口地址为67FFH。查询程序:
MOV DX, 87FFH
IN AL, DX ;读中断请求寄存器内容
SHR AL, 1 ;右移一位,移到CF位置上
JC IR0 ;IRQ0有请求,转IR0
SHR AL, 1
JC IR1 ;IRQ1有请求,转IR1
SHR AL, 1
JC IR2 ;IRQ2有请求,转IR2
在软件优先级判断方面耗时过长。当中断源数量较多时,在系统响应速度上会明显下降。尽管如此,在系统设计中仍能实现根据具体需求灵活配置优先级。
(2)硬件判优
采用特定硬件电路来判断中断源的重要性顺序有两种主要方法:菊花链判优电路 和中断控制器判优
该芯片支持多种配置方式以设定不同中断源的优先级等级。该芯片内置优先级鉴定电路能够智能识别当前最高优先级的中断源并将其中断向量码发送至数据总线以便中央处理器接收后完成相应的服务程序调用过程

3. 中断响应
在进行中断优先级判定后,系统将触发中断响应流程。在此过程中:
① 确保硬件工作状态不受影响;
② 关闭当前的中断请求;
③ 断开电源供应;
④ 获取相应服务入口地址。
4. 中断服务
中断服务程序的一般结构为:
- 建立并保护中断现场:在进入一个新进程之前,在内存空间中为该进程预先预留一定的内存空间,并将各寄存器的内容依次压栈(压入堆栈)保存。
- 开启并处理更高优先级的中断:允许处于同一优先级之外、但处于同一优先级之内、在同一进程中正在执行中的某条指令被更高优先级的中断请求所取代(实现嵌套式的多重中断)。
- 处理特定类型的异常情况:由特定类型和数量的异常情况触发相应的事件处理过程。
- 复原并保持当前工作状态:当一个进程因某种原因被强行暂停时,在该进程重新启动之前必须将当前工作状态的信息从堆栈中取出(弹出),恢复到原来的寄存器配置状态。
- 返回至原操作位置:当某个被挂起的操作重新唤醒时,在完成本操作后会立即返回至被唤醒的操作位置处继续执行后续操作。
5. 中断返回
从原程序的断点处跳转至硬件现场进行重置,并随后执行相应的指令。中断返回操作相当于中断响应操作的反向流程。
中断向量和中断向量表
- 8086/8088CPU的终端系统支持256种不同的中断事件。
- 每个中断事件都有相应的中断服务子程序。
- 中断服务程序的入口地址即为\texttt{INTERRUPT\_VECTOR}。
- 这256个\texttt{INTERRUPT\_VECTOR}被存储在内存中形成一个表格结构。
- 因此存放一个\texttt{INTERRUPT\_VECTOR}就需要占用4个内存单元。
- 所有256个这样的表项总共占用1千个内存单元。
存储在内存起始地址$[bank account]H$~$[bank account]H$之间的区域中存放着一系列用于管理硬件中断事件的信息。以起始地址为$[bank account]H$~$[bank account]H$的内存区域为基础,每个中断向量占用连续的4个字节存储空间。其中,前两位字节用于编码该中断向量对应的段基址信息,后两位字节则用于编码对应于该段中的特定位置信息**。**这些信息按照从低到高的顺序依次排列,总共提供了256个可寻址的中断向量供系统调用处理

在中断向量表中存储的位置首地址被定义为向量地址,其数值等于中断类型码乘以4
- 如DOS系统调用的中断类型号为21H,向量地址为:nx4=84H。
当CPU在处理中断类型码为n的中断服务程序时

8086/8088CPU专用中断类型有5个





硬件中断
该CPU芯片具备两个专门用于处理外部中断信号的输入端口:NMI端口和INTR端口。其中NMI端口主要用于响应未屏蔽的中断事件;而INTR端口则专门用于处理可被用户或系统进行屏蔽管理的中断信号。

(1)非屏蔽中断

(2)可屏蔽中断


中断处理流程
CPU在每条指令的最后一个时钟周期按照下列顺序检测有无中断请求:
- 执行指令时是否有异常现象发生?例如,在除法操作中出现错误。
- 是否存在单步中断标志位TF=1?
- 是否存在NMI非屏蔽中断标志位?
- 是否存在协处理器段溢出标志位?
- 是否设置了可屏蔽中断标志位?
- 是否属于interrupt instruction类别?
当存在至少一个中断条件时,CPU将响应中断。
当检测到内部终端或者非屏蔽中断时(即内部终端或者非屏蔽类型),CPU能够从内部系统获取相应的中断类型码。
当遇到可屏蔽的中断请求时(即当前状态为可被屏蔽的中断请求),CPU会执行进一步操作:首先检查IF标志位的状态;如果IF标志位为1,则CPU将进入间隔总线周期,并从总线控制器中获取最新的类型码信息。
获得中断类型码后, 不同类型的中断具有相同的处理流程. CPU将中断类型码加载到寄存器中, 其操作序列如下:
- 将标志寄存器中的内容压入栈中;
- 清除中断标志IF与TF;
- 将CS中的内容压入栈中;
- 将IP中的内容压入栈中;
- 根据所确定的中断类型码,在预定义的中断向量表中查找对应记录,并取出相应的服务向量并传递至IP和CS字段。
- 运行指定的中断服务程序。
- 完成服务后返回。

堆栈的变化
CPU在检测到中断时会将状态表制导器的内容推送到堆栈中用于保护现场状况。随后,在中断服务程序结束后会执行IRET指令使堆栈指针SP递减2。接着CPU会将主程序中的断点CS和IP字段推送到堆栈中保存断点并使SP递减4。最后当中断服务程序退出时IRET指令会从堆栈中弹出IP、CS以及FLAGS字段然后使堆栈恢复正常状态。
当发生中断响应时:
(1)保护硬件现场;
(2)关闭中断;
(3)保留断点;
(4)获取相应的中断服务入口地址
可编程中断控制器8259A
Intel 8259A可编程中断控制器 支持管理外部中断源,在单片情况下最多支持8个外部中断源,在级联连接的情况下最多支持64个外部中断源(包含1个主片和8个从片),无需额外电路即可实现。该控制器具有多种功能模式。当CPU检测到中断时,则会调用相应的处理程序,并将所关注的中断源的地址信息传递给相应的处理程序。
内部结构

8259A内部结构由以下组件构成:
(1)数据总线缓冲器电路模块 ,负责CPU与8259A之间的数据传输接口功能;其输出包括控制信号 、状态信号 和中断信号 。
(2)实现读写操作的控制机制。
8259只提供单一地址线功能,则表明其内部仅有两个端口配置。
当A0端口处于低电平(A0=0)时,则表示系统处于偶地址工作状态;而当A0端口被拉高(A0=1)时,则表示系统进入奇地址工作模式。
(3)支持多级中断扩展的级联控制电路组组别设计,在此架构下可将单个中断源扩展至最高64个中断源管理范围之内。
(4)中断请求指示器IRRR寄存器 ,用于接收并存储IR0至IR7范围内的所有中断请求信号;当系统出现中断事件时,在该寄存器对应位位置置"1"以标记相关中断请求信息的存在。
(5)当前被激活处理的中断请求位于中断服务寄存器ISR寄存器中 ,即当CPU针对某一个外设执行服务任务时,在ISR寄存器中对应位位置置"1";若ISR全部置"0"则表明当前无任何外设处于待机服务状态等待处理中。
(6)通过**优先级判定电路组PRR电路组组别实现对各类外设发送中断请求事件进行优先级比较排序功能;该机制能够动态地根据系统运行需求对各类外设发送来的中断事件进行优先级排序判断并给予相应的响应处理顺序安排以确保系统的高效运行与稳定性保障水平最大化提升能力目标达成优化效果最佳状态运行状态下的硬件配置方案设计目标实现路径规划方案制定过程中得以充分应用并得到有效验证与支持
引脚功能

A0:地址输入引脚,选择8259A内部不同的寄存器。
A0 = 0 ICW1 \ OCW2 \ OCW3
A0 = 1 ICW~ICW4\ OCW1
CAS2至CAS0:级联引脚用于决定是否作为主芯片使用。当当前单元被设定为主芯片时,在非缓存模式下表现为输出端子;若被配置为从单元,则表现为输入端子状态,并与其它单元进行连接以完成级联操作。
#SP/#EN端子:一种双重功能端子,在非缓存模式下用于判断当前单元是否为主芯片或副芯片。
当其设置为1时,则当前单元被指定为主芯片;当其设置为0时则成为副(从)单元。
在缓存模式下则变为输出端子状态,并负责将外部数据总线上的信号进行缓存处理。
8259A编程


1. 初始化命令字
(1)ICW1


(2)ICW2

(4)ICW4

2. 操作命令字
当8259A处于运行状态时, 操作字段负责调节其功能. 例如, 在配置模式时可编辑相应参数; 另外, 在程序执行阶段需读取一些存储单元的信息.
(1)OCW1
中断屏蔽标识符。用于配置或访问中断屏蔽器IMR,该设备负责处理IR7至IR0的所有中断请求输入。

ICW1 EQU 00010011B ;13H写入20端口
ICW2 EQU 00100000B ;20H写入21端口,设置8个中断源的中断向量码
ICW4 EQU 00000011B ;03H写入21端口,中断结束方式是自动结束
OCW 1 EQU 00000000B ;00H写入21端口,8个中断源都没有屏蔽
Init PROC
MOV DX, CS8259A
MOV AL, ICW1
OUT DX, AL
MOV DX, CS8259B
MOV AL, ICW2
OUT DX, AL
MOV DX, CS8259B
MOV AL, ICW4
OUT DX, AL
MOV DX, CS8259B
MOV AL, OCW1
OUT DX, AL
STI ;开中断
RET
Init ENDP
