资源描述
微机原理第八章: 中断系统
第八章: 中断系统
输入, 输出设备是人机交换信息的必要外设., 中断控制方式是CPU经I/O接口与外设传送数据的最佳方式, CPU被动响应外设的中断请求, 提高CPU的工作效率
§8.1 8086CPU的中断结构
一: 8086CPU的中断源
1: 内部中断源 (软中断)
由中断指令INT 获得的中断
2: 外部中断源 (硬中断)
A: 非屏蔽中断源 —— 8086CPU引脚NMI获得上升沿触发
B: 可屏蔽中断源 —— 8086CPU引脚 INTR获得高电平触发
二: 8086CPU中断优先级别
1: 软中断
2: 不可屏蔽中断NMI
3: 可屏蔽中断INTR
三: 8086CPU中断处理过程 (311页图2.8)
1: CPU获得中断请求
2: CPU执行完当前指令
3: CPU判断中断请求的优先级别
4: 保护现场, F ,CS, IP 入栈
5: CPU执行中断服务程序
6: 恢复现场, IP, CS, F出栈
7: CPU执行下一条指令
重复1 ~ 7
四: 中断向量表的设置
将中断服务程序的入口地址置入中断向量表中
1: 编程写入法
A: 数据段定义法
DATA SEGMENT AT 0000H ; 定义数据段(DS) = 0000H
ORG n * 4 ; n为中断类型号
SUB DW noffset ; 中断服务程序的入口IP
DW nseg ; 中断服务程序的入口CS
DATA ENDS
B: 指令传送法
DATA SEGMENT AT 0000H
ORG n * 4
SUB DW 2DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
MOV AX, DATA
MOV DS, AX
MOV SUB, noffset ; 中断服务程序的入口IP
MOV SUB + 2, nseg ; 中断服务程序的入口CS
2: INT 21H功能设置法
A: 置中断向量功能
1): 功能号 25H → AH
2): 中断号 n → AL
3): 入口参数 中断服务程的入口地址CS:IP → DS:DX
4): INT 21H
注: 中断服务程的入口地址CS:IP值将放入
中断向量表的n * 4处连续4个存储单元中
B: 读中断向量功能
1): 功能号 35H → AH
2): 中断号 n → AL
3): INT 21H
4): 出口参数 ES:BX
注: ES:BX中为中断号n的中断服务程的入口地址CS:IP值
《例》 某中断服务程序的中断号为40H,
中断服务程序的入口地址CS:IP = 3500H:4830H,
用INT 21H功置中断向量到中断向量表
解:
MOV AH, 25H
MOV AL, 40H
PUSH DS ; 下述指要用DS, 故暂时放入堆栈
MOV AX, 3500H
MOV DS, AX ; (DS) = (CS) = 3500H
MOV DX, 4830H ; (DX) = (IP) = 4830H
INT 21H
POP DS ; 恢复原DS值
中断向量表中的数据
30H
48H
00H
35H
40H*4
§8.2 外部中断方式
一: PC/XT的外部中断源
314页图8.3示外部中断源
二: INTR中断源
1: 8259A与8个外部中断源
A: 8253定时器, 键盘中断源直接到主机板
B: 其余6个中断源经扩展槽到主机板
2: 8259A与8086CPU的连接
A: 8259A获得外部中断请求
B: 8259A的INT = H输出
C: 8086CPU的INTR = H, 获得中断请求输入
3: 中断请求, 中断屏蔽, 中断响应
A: 中断请求 —— 输入INTR ← H
B: 中断屏蔽 —— 清中断屏蔽控制标志位IF = 0
中断允许 —— 置中断屏蔽控制标志位IF = 1
C: 中断无响应 —— 若IF = 0, 输出/INTA = H
中断有响应 —— 若IF = 1, 输出/INTA = L
4: INTR的中断过程
A: 8086CPU引脚INTR ← H
B: 程序判断中断控制标志IF的值
C: 若IF = 0, 8086CPU引脚/INTA → H, 无中断响应
D: 若IF = 1, 8086CPU引脚/INTA → L, 有中断响应
E: 程序判断多中断优先级
F: 执行中断类型号08H ~ 0FH中的一个中断服务程序
注: 对可屏蔽中断, 当中断请求有效时,
要获得中断响应的条件是置IF = 1
三: NMI中断源
1: PC/XT的NMI外部中断源
2: NMI中断请求 NMI ←
3: NMI无中断响应输出, NMI与标志位IF无关
4: NMI的中断过程
A: 8086CPU的引脚NMI ←
B: 执行02H中断类型号中断服务过程
§8.3 中断优先级管理
当外部中断源为多个时, 必须定义其优先级别并对其管理
一: 软件查询法
1: 硬件电路
A: 多中断源输入
B: 或门输出接8086CPU的INTR
2: 功能
A: 输入中断源有一个为高时输出为高
B: 可屏蔽中断请求由多中断源提供
3: 优先级流程法
先判断那一个输入中断源, 则此中断源优先级最高
二: 硬件菊花链法
由数字逻辑电路构成优先级电路, 现己不常用
三: 专用芯片法
软件法, 硬件法的结合——可编程中断控制器
§8.4 可编程中断控制芯片 —— 8259A
ü 特点 A: 可程序控制芯片的功能
B: 可提供中断源的中断类型码
C: 可屏蔽输入端的中断源
ü 形式 A: 单片方式 —— 有8个中断源
B: 级联方式 —— 最多64个中断源
一: 8259A的结构及功能
1: 8259A的内部逻辑结构
A: 中断请求寄存器 —— IRR
1): 可输入IR0 ~ IR8共8个外部中断源
2): IRR寄存器中的值可经DB读入CPU
注: IRR有口地址, 即可编程读
B: 中断服务寄存器 —— ISR
1): 为中断源IR0 ~ IR8服务, 为CPU服务
若IRR请求, CPU响应, 则ISR中相对应位为1
若中断服务程序结束, 则ISR中相对应位为0
2): ISR寄存器中的值可经DB读入CPU
注: ISR有口地址, 即可编程读
C: 中断屏蔽寄存器 —— IMR
1): IMR中IMR0 ~ IMR7与IRR中IR0 ~ IR7位对应
若IMRn = 1, 则对应中断源IRn屏蔽
若IMRn = 0, 则对应中断源IRn允许
2): 寄存器IMR与中断标志IF的区别
IMR屏蔽IRR, 当IMRn = 1时
IF屏蔽CPU的中断请求INTR, 当IF = 0时
IF的级别比IMR高
3): IMR寄存器与CPU间可经DB读写操作
注: IMR有口地址, 即可编程读写
D: 优先权分析器 —— PR
1): 对IRR中的IRR0 ~ IRR7中断源进行优先权分析
2): IRR0 ~ IRR7的优先权分配可编程确定
注: PR有口地址, 即可编程写
E: 芯片控制逻辑
1): 8259A的中断请求INT → 8086CPU的INTR
2): 8086CPU的/INTA → 8259A的/INTA
F: 芯片读写逻辑
1): 8259A的片内地址线仅有A0(一线二址)
注: 学习8259A的难点, 解决多寄存器读写与一线两址的矛盾
2): 8259A的片选线/CS由地址译码产生
注: PC/XT微机中8259A的地址为20H, 21H
3): 8259A的读写线/RD, /WR直接与8086CPU的/RD, /WR连接
G: 芯片数据线
8259A的数据线为8位即D0 ~ D7
H: 芯片的级联线
1): 当外部中断源≤8个时, 仅有单片8259A
当外部中断源>8个时, 需用多片8259A级联
2): 级联线仅在8259A级联方式下有作用
注: 级联线CAS0 ~ CAS2, /EN即/SP接线方式
2: 8259A的引脚图
A: 8259A为DIP28封装
B: 8259A为+5V供电
二 : 8259A的中断优先权
中断源IR0 ~ IR7的优先权序可编程确定
1: 固定优先权(完全嵌套方式)
A: 优先权序 IR0(高) → IR7(低)
B: 该优先权序始终不变
2: 等优先权(普通循环方式)
A: 初始优先权序 IR0(高) → IR7(低)
B: 若响应了IRn中断, 则IRn中断权最低, IRn-1中断权最高
C: 每个中断优先权相同
3: 特殊优先权(特殊循环方式)
A: 初始优先权序由编程确定
若定义IR5为初始最高优先权,
则初始优先权序 IR5 → IR7 → IR0 → IR4
B: 其后工作同等优先权
三 : 中断源IR0 ~ IR7的中断触发方式
1: 电平触发方式 —— IR0 ~ IR7输入高电平有效
A: 现象 —— 中断源持续高电平
B: 问题 —— 造成连续中断请求
C: 解决 —— 在中服程序中令IF = 0
2: 边沿触发方式 —— IR0 ~ IR7输入上升沿有效
A: 特点 —— IRR寄存器锁存触发信号
B: 脉宽 —— 上升沿脉冲宽度符合要求
C: 方法 —— 采用负脉冲的后沿触发
四 : 8259A的初始化命令字和操作命令字
ü 若要使用8259A, 必须按规定向其写入初始化命令字
使8259A进入工作状态(一般由系统程序完成)
ü 若要改变8259A的功能, 可随时向其写入操作命令字
使8259A按要求工作(一般由用户程序完成)
(一): 8259A口地址讨论
1: 8259A实际口地址
一线二址, 址1 — A = 0, 址2 — A = 1
2: 8259A操作口地址
A: 4个写初始化命令字操作
B: 3个写操作命令字操作
C: 3个读寄存器IRR, ISR, IMR操作
D: 1个读中断类型号操作
注: 2个地址怎样完成11个读写操作
3: 地址分配表及应用特点
表8.2 8259A的读写操作
A0
对应的读/写操作
0
0
1
0
读IRR、ISR或中断状态查询码
1
0
1
0
读IMR
0
1
0
0
写OCW2、OCW3或ICW1
1
1
0
0
写OCW1、ICW2、ICW3或ICW4
×
1
1
0
无操作,数据线呈高阻态
×
×
×
1
无操作,数据线呈高阻态
A: A0 = 0时的读操作, IRR, ISR, 中断类型号 → CPU
注: 解决1址3读问题, 用位控制定义读入法
B: A0 = 1时的读操作, 仅IMR → CPU
C: A0 = 0时的写操作, CPU → OCW2, OCW3, ICW1
注: 解决1址3写问题, 用同址顺序写入法
D: A0 = 1时的写操作, CPU → OCW1, ICW2, ICW3, ICW4
注: 解决1址4写问题, 用位识别写入法
(二): 初始化命令字ICW的写入方法
1: ICW1 ~ ICW4的写入流程
A: ICW1, ICW2为必写初始化命令字
ICW3, ICW4为选写初始化命令字
B: ICW2, ICW3, ICW4采用同址顺序写入法
2: ICW1 —— 芯片控制初始化命令字
A: 口地址 A0 = 0, PC/XT口地址 = 20H
B: 位定义
1): D4 = 1 为同址识别位
注: 若D4 = 1 CPU对ICW1命令字写操作
若D4 = 0 CPU对0CW2, OCW3命令字写操作
2): D0 = 0 不写ICW4命令字
D0 = 1 要写ICW4命令字
3): D1 = 0 多片8259A方式, 要写ICW3命令字
D1 = 1 单片8259A方式, 不写ICW3命令字
4): D3 = 0 IR0 ~ IR7为边沿触发方式
D3 = 1 IR0 ~ IR7为电平触发方式
5): D2, D5, D6, D7位不用(8086CPU时)
3: ICW2 —— 中断类型号初始化命令字
A: 口地址 A0 = 1, PC/XT口地址 = 21H
B: 位定义
1): D2 ~ D0 IR0 ~ IR7的编码, 即中断类型号的低3位
2): D7 ~ D3 中断类型号的高5位
注: 中断类型号的高5位由用户编程定义,
中断类型号的低3位自动产生, 保证IR0 ~ IR7连续
《例》定义8259A的8个中断类型号为08H ~ 0FH
解: 08H = 00001000B, 0FH = 00001111B
低3位为000B ~ 111B表示中断源IR0 ~ IR7的编码
高5位为00001B
MOV AL, 08H
OUT 21H, AL
4: ICW3 —— 主/从8259A初始化命令字
A: 写操作条件 在ICW1中, D1 = 0
B: 口地址 A0 = 1, PC/XT口地址 = 21H
C: 写操作方法 同址顺序写入法
注: ICW2, ICW3, ICW4, OCW1均为同址( A0 = 1), 写顺序为
写ICW2→ 写ICW3(若要)→ 写ICW4(若要)→ 写OCW1
D: 主8259A位定义
1): 若D0 ~ D7 为1, 则IR0 ~ IR7对应端接有从8259A芯片
2): 若D0 ~ D7 为0, 则IR0 ~ IR7对应端未接从8259A芯片
E: 从8259A位定义
1): D2 ~ D0 从8259A的INT端接主8259A的IRn端编码
2): D7 ~ D3 未用
5: ICW4 —— 方式控制初始化命令字
A: 写操作条件 在ICW1中, D0 = 1
B: 口地址 A0 = 1, PC/XT口地址 = 21H
C: 写操作方法 同址顺序写入法
D: 位定义
1): D0 = 0 用于8080CPU
D0 = 1 用于8086CPU
2): D1 = 0 普通, 特殊EIO结束方式
D1 = 1 自动EIO结束方式
3): D3,D2 = 00, 01 级联非缓冲方式
D3,D2 = 10, 11 级联缓冲方式
4): D4 = 0 单片8259A固定优先权
D4 = 1 级联8259A固定优先权
5): D7 ~ D5 未用
《例》PC/XT系统BIOS对8259A的初始化命令字写入程序
MOV AL, 00010011B ; D0 = 1, 要写ICW4, D1 = 1, 不写ICW3
OUT 20H, AL ; 写ICW1, D3 = 0, IR0 ~ IR7为边沿触发方式
MOV AL, 00001000B ; IR0 ~ IR7 对应中断类型号为08H ~ 0FH
OUT 21H, AL ; 写ICW2
MOV AL, 00001001B ;D0 = 1, 8086方式, D1 = 0, 非自动EIO
OUT 21H, AL ; 写ICW4, ,D4 = 0, 固定优先权
(三): 操作命令字OCW的写入方法
注: ICW按顺序写入(先写), OCW按需要写入(后写)
1: OCW1 —— 写IMR寄存器命令字
A: 口地址 A0 = 1, PC/XT口地址 = 21H
B: 位定义
1): D0 ~ D7对应寄存器IMR中的IMR0 ~ IMR7
2): Dn = 0 对应中断源IRn中断允许
Dn = 1 对应中断源IRn中断屏蔽
2: OCW2 —— 中断优先权选择命令字
注: ICW4可定义8259A工作于固定优先权, 8259A的
等优先权, 特殊优先权在此定义
A: 口地址 A0 = 0, PC/XT口地址 = 20H
B: 识别位 D4, D3 = 0, 0 (同址识别位法, 对OCW2, OCW3)
C: 位定义
1): D2 ~ D0 特殊优先权中断源IRn编码
2): D6 = 0 自动循环优先权
D6 = 1 特殊循环优先权
3): D7 = 0 固定优先权
D7 = 1 循环优先权
注: 仅当D6 = 1, D7 = 1时, D2 ~ D0值才有意义
4): D5 = 0 自动EIO结束方式
D5 = 1 非自动EIO结束方式
3: OCW3 —— 运行方式命令字
A: 口地址 A0 = 0, PC/XT口地址 = 20H
B: 识别位 D4, D3 = 0, 1 (同址识别位法, 对OCW2, OCW3)
C: 位定义
1): D2 = 0 CPU下次同址读操作读入IRR, ISR中的值
D2 = 1 CPU下次同址读操作读入中断类型号的值
2): D1,D0 = 00, 01 无意义
D1,D0 = 10 CPU下次同址读操作读入IRR中的值
D1,D0 = 11 CPU下次同址读操作读入ISR中的值
3): D6, D5 级联方式下中断屏蔽的应用(约)
4): D7 未用
(四): 8259A的读操作方法
1: 读IMR寄存器
A: 口地址 A0 = 1, PC/XT口地址 = 21H
B: 地址唯一, 无同址
2: 读IRR寄存器
A: 口地址 A0 = 0, PC/XT口地址 = 20H
B: 条件 先写OCW3中的D2,D1,D0 = 010
3: 读ISR寄存器
A: 口地址 A0 = 0, PC/XT口地址 = 20H
B: 条件 先写OCW3中的D2,D1,D0 = 011
4: 读中断类型号
A: 口地址 A0 = 0, PC/XT口地址 = 20H
B: 条件 先写OCW3中的D2 = 1
C: 读入数据位定义
1): D7 = 0 无中断请求IR0 ~ IR7
D7 = 1 有中断请求IR0 ~ IR7
2): D2 ~ D0 为IR0 ~ IR7编码(当D7 = 1时)
3): D6 ~ D3 未用
微机原理 第 11 页
展开阅读全文