第十章
中断控制器
【 本章重点 】
本章重点介绍中断的概念、功能及可
编程中断控制器 8259A的基本结构、初始
化命令字( ICW)、状态寄存器( OCW)以
及编程步骤。
【 本章难点 】
本章难点是理解掌握微机系统中对中
断处理的过程和 8259A的硬件连接及应用
编程。
10.1 中断概述
10.1.1中断的基本概念
1.中断的概念
在 CPU执行程序的过程中, 由于某种突发事件的发生, 强迫
CPU暂时停止正在执行的程序, 转向对该突发事件进行处理,
对这个事件处理结束后又能回到原中止的程序,接着中止前的状
态继续执行原来的程序, 这一个过程就称为中断 。 把引起中断
的原因或触发中断请求的来源称为中断源 。
2.中断类型
根据中断源的位置不同可分为内中断和外中断。
根据中断是否可屏蔽, 分为不可屏蔽中断和可屏蔽中断 。
10.1.2 中断响应的过程
1.中断申请
1) 外部设备发中断请求的条件 。 当外设准备就绪或本
身工作已经完成时, 才向 CPU提出中断请求 。
2) 外部设备中断请求的标志 。 当外设要求和 CPU进行
数据交换时, 将中断请求信号送往中断请求触发器或中断
控制器, 经它们处理后, 向 CPU发出中断请求 。
2.中断响应
如果 CPU处于开中断状态,经判优后响应其中最高优
先级的中断请求,关中断,将断点压入堆栈中(有的微机
还将程序状态字和相关寄存器的内容压入堆栈)保存,以
备返回原程序,紧接着将相应的中断处理程序入口地址或
中断向量送 CPU,转入中断服务程序。
3.中断处理
1) 保护现场 。 首先要将在中断处理程序中使用的有关寄存
器的内容压入堆栈保护起来 。 对于有的微机现场保护是由硬件
自动完成的, 而有的微机则需要编程实现现场保护, 在现场保
护的过程中, 绝对不允许被中断 ( 应禁止中断 ), 否则现场将
被破坏 。 当现场保护好后应开中断 。
2) 执行中断服务程序 。 中断服务程序要根据具体情况编写 。
在编写时, 应使中断处理过程尽量简短, 使执行时间进可能缩
短, 以便尽快返回被中断的程序 。
3) 恢复现场 。 当中断服务结束后, 应用中断结束命令清除
中断标志, 立即关中断, 以保证恢复现场的过程不受干扰 。 恢
复现场就是把原来压入堆栈的有关寄存器的内容弹出 。 现场恢
复后应开中断, 以便 CPU响应更高级的中断请求 。
4.中断返回
中断返回是中断服务程序中的最后一条指令, 其操作是将
压入的断点地址弹出, 保证被中断的程序按原来状态执行下去 。
10.1.3中断优先级与中断嵌套
1.中断优先级
( 1) 如果有多个不同优先级的中断源同时提出中断请求时,
CPU应当先响应最高优先级的中断源 。
( 2) 如果 CPU正在对某一中断源服务时, 比它优先级更高
的中断源提出中断请求时, CPU能够暂停正在执行的中断
服务程序转向对优先级高的中断源进行服务, 当服务结束
后再返回原优先级较低的中断服务程序继续执行 。
2.中断嵌套
正在运行的中断处理程序, 被优先级高的中断源中断,
从而转入新的中断处理程序, 当新的中断处理程序执行完
再回到原来的中断处理程序, 这一现象称为中断嵌套 。
10.2 微机的中断系统
10.2.1微机系统的中断源
中断源可以分为两大类, 即外部中断和内部中断 。
1.内部中断
内部中断又称软件中断是通过软件调用的不可屏蔽中断,
其包括除法错中断、单步中断、断点中断、溢出中断,INTn指
令中断等。
总之, 可以将引起内部中断的原因归结为三种情况:
( 1) 由 CPU的某些错误引起的 。 如:除法错中断, 溢出中断 。
( 2) 为调试程序设置的中断 。 如:单步中断, 断点中断 。
( 3)由中断指令 INT引起的。如,INTn指令中断。
2.外部中断源
( 1) 非屏蔽中断 NMI。
( 2) 可屏蔽中断 INTR。
3.中断优先级
8086/88的中断优先级次序如表 10-1所示 。
中 断 优 先 级
内中断(除法错,INTO,INT) 最 高
最 低
非屏蔽中断 NMI
可屏蔽中断 INTR
单步中断
表 10-1 中断优先级次序
10.2.2中断向量表
中断向量表是存放中断服务程序入口地址的表格
CTS
000H
004H
008H
00CH
014H
080H
3FFH
IP偏移地址
CS段基地址
IP偏移地址
CS段基地址
IP偏移地址
CS段基地址
·
··
··
·
中断类型码 0( 除法错 )
中断类型码 1( 单步中断 )
中断类型码 2( NMI中断 )
中断类型码 3( 断点中断 )
中断类型码 4( 溢出中断 )
中断类型码 5( 保留 )
系统保留中断
用户自定义中断
图 10-1中断向量表
10.3可编程中断控制器 8259A
10.3.18259A芯片内部结构
8259A用 NMOS工艺制造, 使用单一 +5V电源, 采用 28引脚双
列直插式封装 。 其外部引脚和内部结构如图 10-2,10-3所示 。
CAS 0
D 7
D 6
D 5
D 4
D 3
D 2
D 1
CAS 2
IR 0
IR 1
IR 2
IR 3
IR 5
IR 6
IR 7
A 0
V CC
INT
IR 4
CS
WR
RD
SP / EN
INT A
CAS 1
D 0
GND
图 10-2 8259A芯片引脚
图 10-3 8259A内部框图
INTA INT
IR0
IR1
··
··
··
IR7
CAS0
CAS1
CAS2
SP/EN
数据总线
缓冲器
读 /写控
制电路
RD
WRA
0
CS
级联缓冲
器 /比较器
控制电路
中断
服务
寄存器
( ISR

优先级
判别器
( PR

中断
请求
寄存器
( IRR

中断屏蔽寄存器
( IMR)
内部总线
D7~ D0
1,8259A引脚的功能
介绍 10个引脚
2,8259A的内部结构
中断请求寄存器 ( IRR), 其内部保存着所有外部中断
源 IR0~ IR7的中断请求状态 。 任何一个中断源发生请求,
其相应位为 1;一旦得到响应, 则相应为复位 。
中断服务寄存器 ( ISR), 用来保存所有正在服务的中
断源 。 当 8259收到中断结束命令时, 其寄存的状态进行
调整 。
中断屏蔽寄存器 ( IMR), 保存着被屏蔽的所有中断
源 。 其屏蔽功能可用命令修改 。
10.3.28259A芯片的工作方式
1.中断优先级管理方式
(1)完全嵌套方式
(2)特殊全嵌套方式
(3)自动循环方式
(4)优先级特殊循环方式
2.中断结束方式
自动 EOI结束方式 普通中断结束方式 特殊中断结束方式
在级联方式下如果对从片采用命令结束方式时, 不管使用
哪种命令结束方式, 都必须发两次 EOI命令, 一次用于主片,
另一次用于从片 。
3.中断屏蔽方式
(1)普通屏蔽方式
(2)特殊屏蔽方式
4.循环优先级的循环方式
循环优先级方式与中断结束方式有关 。
(1)普通 EOI循环方式
(2)特殊 EOI循环方式 。
(3)自动 EOI循环方式 。
10.3.38259A控制字及其工作方式
8259A的命令字有两种。一种是初始化命令字( ICW),
在 8259A启动之前写入,使其处于预定的初始状态。另一
种是操作命令字 (OCW),使处于初始状态的 8259去执行具
体的某种操作方式。操作命令字可在 8259初始化后的任何
时刻写入。
1.初始化命令字
1)ICW1 — 芯片控制初始化命令字,在 A0=0,D4=1时写入,
各位功能图见图 10- 4.
1:需 ICW4
0:不需 ICW4
1:单 8259A
0:多片 8259A
1:间隔为 4
0:间隔为 8
1:电平触发
0:边沿触发
任 意 值
X 1 LTIM AX SNGL IC4X
A0 D7 D6 D5 D4 D3 D2 D1 D0
0
ICW1标志
图 10-4 初始化命令字 ICW1
2) ICW2— 设置中断向量码初始化命令字。
T5 T4 T3 0T6 0 0T7
A0 D7 D6 D5 D4 D3 D2 D1 D0
1
图 10-5 初始化命令字 ICW2
图 10-6 初始化命令字 ICW3
3) ICW3— 表示主片 /从片初始化命令字。
0 0 0 ID20 ID1 ID00
A0 D7 D6 D5 D4 D3 D2 D1 D0
1
三位编码对应从片接主控片的 IR编号
从属片 ICW3
A0 D7 D6 D5 D4 D3 D2 D1 D0
1
1:相应 IR端接从片
0:未接从片
主控片 ICW3
4) ICW4— 方式控制字初始化命令字。 ICW4用来设定
8259A的工作模式,只有在 ICW1的 D0=1且 A0=1时写入。各位
的功能如图 10-7所示。
1,86/88模式
0,80/85模式
1:自动 EOI
0:非自动结束
0X:非缓冲方法
10:缓冲方式 /从属片
11:缓冲方式 /主控片
1:特殊完全嵌套方式
0:一般完全嵌套方式
0 SFNM BUF M/S0 AEOI PM0
A0 D7 D6 D5 D4 D3 D2 D1 D0
1
ICW4标识码
图 10-7 初始化命令字 ICW4
综上所述, 8259A的初始化过程如图 10-8所示 。 ICW1和
ICW2必须写入, ICW3仅在多片级联时写入, 而 ICW4由 ICW1中的
D0位决定是否写入 。
N
N
N
Y
Y
Y
写入 ICW1
写入 ICW2
写 ICW3
指出连在主片哪一个端
写 ICW3
指出从片连接情况
写入 ICW4
要 ICW4?
是级联方式式

主 片?
初始化结束
图 10-8 8259初始化顺序
2.操作命令字
1) OCW1— 中断屏蔽操作命令字, 在 A0=1时写入到
中断屏蔽寄存器 IMR中, 当某一位为 1时, 就屏蔽与之相
应的 IR输入 。
M5 M4 M3 M2M6 M1 M0M7
A0 D7 D6 D5 D4 D3 D2 D1 D0
1
图 10-9 操作化命令字 OCW1
图 10-10 操作命令字 OCW2
2) OCW2— 优先循环方式和中断结束方式操作字 。
其格式如图 10-10所示 。 其中 R是优先级循环控制位,
R=1为循环优先级, R=0 为固定优先级 。
ISRi(IRi)序号
0不设 EIO命令
1设 EIO命令
EOI 0 0 L2SL L1 L0R
A0 D7 D6 D5 D4 D3 D2 D1 D0
0
OCW2标志
SL=0时, L2-L0无效
SL=1时, L2-L0有效
0非循环优先级方式
1循环优先级方式
SL表示 L2-L0是否有效, SL=1时, L2-L0有效, 按照
L2-L0编码指定的 IR级别上运行 。 SL=0时, L2-L0无效 。 表
10-2为 L2-L0编码与 IR号的对应关系 。
L2 L1 L0 000 001 010 011 100 101 110 111
对应的 IR号 0 1 2 3 4 5 6 7
表 10-2 L2-L0编码与 IR号的对应关系
R,SL,和 EOI三个标志位组合起来可以设置不同的工作
方式如表 10-3所示 。
INTA
R SL EOI 工作方式 说明
0 0 0 取消自动 EOI循环方式
0 0 1 普通 EOI结束方式 将 ISR中当前优先级最高位清 0
0 1 0 OCW2无意义
0 1 1 特殊 EOI结束方式 将 ISR中由 L2-L0指定位清 0
1 0 0 设置自动 EOI循环方式
收到第二个信号时复位 ISR中当前优先级最高位,
并将其降为最低, 其它位优先级发生相应的变

1 0 1 设置普通 EOI循环 方式 复位 ISR中当前优先级最高位, 并将其降为最低,其它位优先级发生相应的变化
1 1 0 优先级特殊循环 将 L2-L0规定的最初优先级置为最低, 其它位优先级发生相应的变化
1 1 1 特殊 EOI结束中断后优先级自循环动 复位 ISR中由 L2-L0指定的位后, 并将其降为最低, 其它位优先级发生相应的变化
表 10-3 R,SL、和 EOI三者对应的 不同的工作方式
3) OCW3— 特殊屏蔽方式和查询方式操作字 。 OCW3
的功能有三个方面:一是设置和撤消特殊屏蔽方式, 二
是设置中断查询方式, 三是用来设置对 8259A内部的寄
存器的读出命令 。 在 A0=0,D4D3=01时写入 OCW3。 OCW3的
功能如图 10-11所示 。
0×,无效
10:可读 IRR
11:可读 ISR
1:允许查询
0:不查询
0×,无效
10:复位特殊屏蔽
11:设置特殊屏蔽
SMM 0 1 PESMM RR RIS0
A0 D7 D6 D5 D4 D3 D2 D1 D0
0
OCW3标志
图 10-11 操作化命令字 OCW3
10.3.4 8259的级联使用
下面以一片主控 8259和两片从属 8259构成的级联为
例给出框图 10-12.




IN T A
CAS 0
CAS 1
CAS 2
IR 0 IR 3IR 6IR 7
INT
IR 4IR 7 IR 6 IR 0 IR 7 IR 6IR 0
D 7D 0 ~D 7D 0 ~D 7D 0 ~
D 7D 0 ~ D 7D 0 ~ D 7D 0 ~
IN T A
CAS 0CAS 0
CAS 1CAS 1
CAS 2CAS 2
INTINT
系统总线
+ 5 v主控
SP / ENSP / EN
I NT A
SP / EN
图 10-12 3片 8259级联图
10.3.58259A应用举例
【 例 10— 1】 单片 8259A的应用在某微机系统中只有一片
8259A,它的 I/O地址为 20H和 21H,8个中断源的中断向量码
为 08H~ 0FH,IR7的矢量地址为 3CH-3CF。 边沿触发, 非缓冲
器方式和命令结束方式, 系统连接图如图 10-13所示 。 运行程
序后, 当每次响应外部中断 IR7时 ( 按动 KK2+), 在显示器上
显示字符, 7”,中断 10次后, 程序退出 。
图 10-13 8088系统与 8259A的连接
STACK SEGMENT STACK ;定义堆栈
DW 64DUP (?)
STACK ENDS
CODE SEGMENT ;定义代码段
ASSUME CS:CODE
START,PUSH DS ;程序开始, 保护数据段
MOV AX,0000H
MOV DS,AX ;数据段清零
MOV AX,OFFSET IRQ7 ;取中断程序入口地址 ( 相对地址 )
ADD AX,2000H ;加装载 IP=2000H地址 ( 绝对地址 )
MOV SI,003CH ;填 8259中断 7的中断矢量
MOV [SI], AX
MOV AX,0000H ; 段地址 CS=0000H
MOV SI,003EH
MOV [SI], AX ;填 8259中断 7的段地址矢量
CLI ;关中断
POP DS ;弹栈
MOV AL,00010011B
OUT 20H,AL ; 写入 ICW1,设置工作方式是边沿触发,
需要 ICW4
MOV AL,00010011B
OUT 21H,AL ;写入 ICW2,设置中断类型码
MOV AL,00000001B
OUT 21H,AL ;写入 ICW4,设置为非缓冲方式, 完全嵌
套方式,86/88模式
IN AL,21H ;读 IMR寄存器, 值为 FFH,表示 8个中断
源都不允许中断 。 只要 A0=1,随时都可以
读出 IMR的内容
AND AL,01111111B
OUT 21H,AL ;写 OCW1,只允许 IR7产生中断
MOV CX,000AH ;置中断次数
A1,CMP CX,0000H
JNZ A2 ;判断是否为 0,不为 0则转
IN AL,21H ;读 8259中断屏蔽字
OR AL,80H
OUT 21H,AL ;关 8259中断 7
STI ;开中断
HLT
A2,STI
JMP A1
IRQ7,MOV AX,0137H ;中断程序
INT 10H ;显示, 7”
MOV AX,0120H
INT 10H ;显示, 空格,
MOV AL,20H
OUT 20H,AL ; 写入 OCW2,EOI位为 1,使 ISR寄存器清
0
CLI ;关中断
IRET ;中断返回
CODE ENDS
END START
本章到此结束