? 有关中断的基本概念
8259A可编程中断控制器
8086中断系统
8086CPU中断响应流程本章内容
掌握中断技术的基本概念
了解 8086中断系统及其对各种类型中断的响应流程
了解 8259A中涉及到的有关概念
掌握 8259A的编程应用学习目的
9.1 中断系统的基本概念一,什么叫中断?
中断申请主程序 中断服务程序返回中断示意图所谓中断,是指这样一个过程:当 CPU正在执行程序过程中,由于某一 突然 事件的发生,暂时中止 正在执行的程序,转去处理突然发生的事件 ( 执行 中断服 务程序 ),处理完毕,再返回 原来被中止的程序继续运行 。
日常生活中类似,中断,的例子:
例 1:门铃响时,放下手中正在做的事情,
跑去开门,招待客人;客人走后,接着做原来的事情 。
例 2:教师讲课过程中,同学遇有疑问,不同理解之处,随时向老师提问 。
问题:请同学们列举类似,中断,的例子 。
二、应用中断技术的优点
1.实现 CPU 与外设的并行工作,提高了
CPU 的效率 。
N
Y
READY?
输入状态信息输入数据查询方式的数据输入 中断方式的数据输入外设请求中断
INTR有效主程序中断服务程序输入数据外设准备数据二、应用中断技术的优点
1,实现 CPU 与外设的并行工作,提高了 CPU 的效率。
2,实现实时处理。
3,实现故障处理。
三、中断源引起中断的原因,产生中断请求的来源。
通常有以下几种:
1,一般的 I/O 设备,如键盘、打印机等。
2,实时时钟。
3,故障源。
4,为了调试程序而设置的中断。
(例如设置断点,单步运行等 )
四、中断系统的功能计算机系统中,用于实现中断功能的硬件和软件的集合,称为 中断系统 。
中断系统应解决如下问题:
1,中断请求信号的产生 ( 中断源如何申请中断? )
2,CPU如何响应? (如何知道有中断请求?
是否有求必应? 响应后的处理过程? )
3,中断优先权问题
4,中断的具体服务
5,中断服务完毕,如何返回原程序?
五、实现中断优先权的方法判断和确定中断源的中断优先权,可以采用 软件 和 硬件 两种方法 。
当系统中有多个中断源存在时,若有几个中断源同时提出申请,CPU先响应谁?
当 CPU正响应某一中断过程中,又有另外的中断源提出中断请求,CPU是否响应?
为此提出了中断优先权的概念 。
1,用软件确定中断优先权优先权管理电路三态缓冲器译码锁存器G
INTR
D7 ~D0
A15~A0
RD
中 断 源 A
中 断 源 B
中 断 源 C……

M / IO
1.用软件确定中断优先权软件查询流程图优先权管理电路三态缓冲器译码锁存器
G
INTR
D7 ~D0
A15~A0
RD
中 断 源 A
中 断 源 B
中 断 源 C
……

IOM
在 中 断 服 务 中读 入 请 求 状 态
A 申 请?
B 申 请?
中 断 返 回为中断源 A
服务的程序段
Y
C 申 请?
为中断源 B
服务的程序段为中断源 C
服务的程序段
……
Y
Y
采用软件查询方式的特点:
询问的次序,即为优先权的次序。
硬件简单。
由查询转至相应的服务程序的时间长,
尤其在中断源较多的情况。
2.硬件方式
( 1) 若 CPU 未处理任何中断,则,优先权失 效,信号为高,当任一中断源请求中断时,通过门 2发出 INTR 信号 。
1
2
8-3
优先权编码器优先权寄存器
A <B
比较器
A2
A1
A0
B2
B1
B0
比较失效中断请求 0
中断请求 1
中断请求 2
…………7
D7 ~ D0
INTR
编码器和比较器的优先权排队电路
( 2) 若 CPU 正在进行中断处理,当某一中断源请求中断时,能否向 CPU 发出
INTR信号,受比较器的控制 。
2.硬件方式
1
2
8-3
优先权编码器优先权寄存器
A <B
比较器
A2
A1
A0
B2
B1
B0
比较失效中断请求 0
中断请求 1
中断请求 2
…………7
D7 ~ D0
INTR
编码器和比较器的优先权排队电路
×
××
2,硬件方式
1
2
8-3
优先权编码器优先权寄存器
A <B
比较器
A2
A1
A0
B2
B1
B0
比较失效中断请求 0
中断请求 1
中断请求 2
…………7
D7 ~ D0
INTR
编码器和比较器的优先权排队电路思考题:与软件查询方式比较,采用硬件方式有何特点?
六,8086CPU 响应外部中断的过程
CPU 在每一个指令周期的最后一个总线周期的最后一个 T状态采样 INTR 或 NMI
信号线。
下面以 INTR 为例,说明 8086 CPU 响应中断的过程。
执行一条指令最后一个总线周期的最后一个 T状态?
有 INTR?
中断开放? (FR中的 IF=1?)
关中断 (置 FR中 IF=0) 信号发 IN T A
断点地址 (CS,IP)入栈FR 入栈识别中断源,转入相应中断服务程序保护现场中断服务处理恢复现场开中断 STI (置 FR中 IF=1)
中断返回 IRET
取下一条指令
No
No
No
Yes
Yes
Yes
讨论:
1,为什么要在中断服务程序中执行 STI
指令?
2,STI 指令在中断服务程序中的不同位置时,对 CPU 处理中断有何影响?
七、小结
1,实现断点地址的保护与恢复。
2,实现现状信息的保护。
3,实现中断优先权的排队。
4,实现中断的嵌套。
中断服务 2
(高优先级 )
主程序中断服务 1
中断过程由计算机的中断系统,配合用户设计的中断服务程序来实现 。 中断应具备以下功能:
INT n 指令中断逻辑非屏蔽中断请求中断控制系统
( 8259A)
INT 3
指令
INTO
指令单步中断除数为
0中断

可屏蔽中断请求
NMI
INTR
硬件中断软件中断
9.2 8086CPU的中断系统一、中断类型
8086能处理 256种中断,分为两大类:外部中断和内部中断 。
其中断分类如右图
8086的中断分类
1,外部中断 (硬件中断 )
( 1) 非屏蔽中断 NMI (类型号为 2)
有效,不受 FR 中 IF 的影响,常用于处理系统的重大故障。
( 2) 可屏蔽的中断 INTR
高有效,CPU 是否响应,取决于
FR 中 IF 的状态 。 常用于各种外设的中断 。
2,内部中断 (软件中断 )
通常由三种情况引起:
(1) INT n 指令中断 (n 为中断类型号 )
(2) 处理 CPU 某些错误的中断
除法错中断 (中断类型号为 0)
溢出中断 (INTO) (中断类型号为 4)
(3) 为调试程序设置的中断
a 单步中断当 FR 中 TF = 1时,每执行一条指令,CPU
产生类型为 1 的单步中断。
b 断点中断设置断点实际上是把指令,INT 3” 插入到程序中,CPU 每执行到断点处的,INT 3”
指令,便产生类型为 3 的中断。
二、中断优先级
8086 系统中,中断优先级的次序为:
高低内部中断 (除法错,INTO,INT n)
NMI
INTR
单步中断三、中断向量表
CPU 响应中断后,如何得到中断服务程序的 入口地址 (中断向量 ),转入到中断服务程序? 8086CPU 通过建立中断向量表的方法解决 。
中断向量 (中断服务程 序 入 口 地址 ) 在表中的地址 = 中断类型号 × 4
中断向量表溢出中断
0000,0014 H
0000,0013 H
0000,0010 H
0000,000F H
0000,000C H
0000,000B H
0000,0008 H
0000,0007 H
0000,0004 H
0000,0003 H
0000,0000 H
类型 5
类型 255
供用户定义的中断
(共 224个)
0000,007 FH
0000,007 EH
0000,03 FFHCS
IP
CS
IP
CS
IP
CS
IP
CS
IP
CS
IP
CS
IP

专用的中断
(共 5个)
保留的中断
(共 27个)
类型 32
类型 31
类型 0
类型 4
类型 3
类型 2
类型 1
除数为 0 中断非屏蔽中断单步中断断点中断四、中断向量的装入
BIOS 负责 0~ 1FH 共 32个中断向量的装入 。 用户若想装入自己的中断向量到向量表中的,可用以下方法:
1,用 STOS 指令填空中断向量表假设类型号为 60H 的中断向量为
CLI
CLD
MOV AX,0
MOV ES,AX
MOV DI,4?60H ; DI 指向表中对应位置
MOV AX,OFFSET_INTR ; 取偏移地址
STOSW ; AL?[DI],AH?[DI+1]; DI+2?DI
MOV AX,SEG_INTR ; 取段基址
STOSW
STI
SEG_INTR,OFFSET_INTR。
2,利用 MOV 指令写入中断向量
CLI
MOV AX,00H
MOV ES,AX
MOV BX,4?60H ; BX 指向表中对应位置
MOV AX,OFFSET_INTR
MOV ES:[BX],AX ; 装入编程地址
MOV AX,SEG_INTR
MOV ES:[BX+2],AX ; 装入段基址方法 1,2由用户直接操作中断向量表,
因此,要熟悉中断向量表的具体组织 。
3,利用 DOS 功能调用,INT 21H,的 AH = 25
H 装入中断向量
MOV AL,60H ; 类型号?AL
MOV AH,25H ; 功能号 25H?AH
MOV DX,SEG_INTR
MOV DS,DX
MOV DX,OFFSET_INTR ; DS:DX=中断向量
INT 21H
方法 3由 DOS功能调用具体实现,中断向量表对用户是透明的 。
1,取类型号;
2,计算向量地址;
3,根据向量地址查表,将偏移地址送 IP,段基址送 CS;
4,转入中断服务程序,进行中断处理。
五,8086CPU 转入中断服务程序的过程
8086转入中断处理程序的过程
1800H
F000H
00H
18H
00H
F0H
PUSH
IRET





例:执行 INT 21H
向量地址=
21H? 4 = 84H
CPU
IP
CS
MEM
( 4)
( 1)
( 2)
( 3)
0,0000H
0,0084H
0,0087H
0,03FFH
F000,1800H
中断向量表
2,计算向量地址;
向量地址=
21H? 4 = 84H
3,根据向量地址查表,将偏移地址送 IP,段基址送 CS;
4,转入中断服务程序,进行中断处理。
1,取类型号;
21H
六,8086CPU中断响 应 流程内部中断?
NMI?
INTR?
TF= 0?
执行下条指令完成当前指令
IF= 1?
标志进栈保存 TF,将 IF,TF清 0
断点地址进栈查中断向量表,转中断服务程序保护现场中断服务恢复现场开中断,返回中断响应流程第一个中断响应周期
AD7 ~ AD0 浮空第二个响应周期,取中断类型码
Y
Y
Y
Y
N
N
N
N
Y
N
内部中断?
NMI?
INTR?
TF= 0?
执行下条指令完成当前指令
IF= 1?
第一个中断响应周期
AD7 ~ AD0 浮空第二个响应周期,取中断类型码
A
Y
Y
Y
Y
Y
N
N
N
N
N
Y
标志进栈保存 TF,将 IF,TF清 0
断点地址进栈查中断向量表,转中断服务程序保护现场中断服务恢复现场开中断,返回
A
1,8086CPU各种类型中断的优先级;
2,CPU响应 INTR的条件;
3,INTR与其它类型中断响应过程的异同。
请同学们总结:
内部中断?
NMI?
INTR?
TF= 0?
执行下条指令完成当前指令
IF= 1?
标志进栈保存 TF,将 IF,TF清 0
断点地址进栈查中断向量表,转中断服务程序保护现场中断服务恢复现场开中断,返回中断响应流程第一个中断响应周期
AD7 ~ AD0 浮空第二个响应周期,取中断类型码
Y
N
Y
N
Y
YN
N
Y
N
9.3 8259A 可编程中断控制器在微机系统中,可以使用 8259A 扩展外部中断,Intel 8259A 可编程中断控制器,
主要有以下功能:
3,在中断响应周期,8259A 可提供相应的中断类型号 。
1,1片 8259A 能管理 8级中断,通过级联用 9
片 8259A可以构成 64 级主从式中断系统 。
2,每一级中断可以屏蔽或允许。
4,可编程使 8259A 工作在多种不同的方式。
一,8259A 的内部结构与引脚信号控制逻辑中断服务寄存器
ISR
优先权电路
PR
中断请求寄存器
IRR
中断屏蔽寄存器 IMR
读写控制逻辑级联缓冲比较器数据总线缓冲器
D0~D7
RD
WR
CS
A0
CAS0
CAS1
CAS2
ENSP
INTA INT
IR0
IR1
IR7…
8259A内部逻辑框图
1,数据总线缓冲器
8位,双向,三态,是 8259A与 CPU
之间的数据接口 。
D0~ D7直接与 CPU 数据总线的低 8位连结 。
2,读 /写控制逻辑
。接高位地址的译码输出:CS
A0,常常与地址信号线 A0相连。
相连。、的与,WRRDC P UWRRD
8259A的两个端口地址
CPU 通常利用:
OUT 指令,。配合写入有关的控制字与 A0,CSWR
IN 指令,
有关寄存器的内容。
内部配合读出与 A8 2 5 9A0,CSRD
3,中断请求寄存器 IRR
8 位,若 IRi 有效 (,1”,),
对应位置,1”,直到 IRi 得到响应。
因此,IRR记录外中断源 IRi的请求信息。
4,中断服务寄存器 ISR
8位,当 IRi得到响应时,对应位置,1” 。
ISR 记录正在处理的 IRi,当 中断嵌套 时,
可能多位置,1” 。
因此,ISR记录 CPU对 IRi的响应情况。
5,中断屏蔽寄存器 IMR
8位,某位置,1”,对应 IRi 禁止产生中断。
因此,IMR控制是否对 IRi进行屏蔽操作 。
6,优先权电路实现优先权的判断与处理,采用编码器和比较器电路,如下图所示 。
8259A中的中断优先权电路比较器
B
0
B
0
B
0
A > B
A
0
A
1
A
2
中断请求优先级编码器中 断 屏 蔽 寄 存 器 I M R
中断请求寄存器
I R R
I S R 编 码 器? 1
&
&
&
I N T
D
0
D
1
D
2
D
3
D
4
D
5
D
6
D
7
IR
0
IR
1
IR
2
IR
3
IR
4
IR
5
IR
6
IR
7
图 7 - 12  中断优先权电路比较器比较器中断请求优先级编码器中 断 屏 蔽 寄 存 器中断请求寄存器中断请求寄存器中断请求寄存器编 码 器图
7,控制逻辑
( 1) 由 IRR 和 PR 的情况,向 8259A 其它部件发出控制信息 。
( 2) 向 CPU 发出 INT 信号,接收 CPU INTA
信号。
8,级联缓冲 /比较器可以实现 8259A的级联,扩展外中断。
(1) CAS2,CAS1,CAS0 引脚
① 主 8259A,CAS2~ CAS0 输出,输出被 响应的从片的标志码。
问题,8259A级联时,如何确定主 8259A的
IRi接有从片,从片接入主 8259A的
IRi?
8259A
从片 A
8259A
主片
8259A
从片 B
INT
CAS0
CAS1
CAS2
IR0
INT
CAS0
CAS1
CAS2
IR0
INT
CAS0
CAS1
CAS2
IR7 IR6 IR3 IR0 …SP/EN SP/EN IR7
CS A0 INTA CS A0 INTA CS A0 INTA
… SP/EN …IR7
AB
CB
DB
GND GND Vcc
② 从 8259A,CAS2~ CAS0 输入,接收主片发出的标志码,
与自己的标志码比较 。 若相等,下一个 INTA信号到来时,将中断类型号送至数据总线 。
从片 A标志码,011,从片 B标志码,110
(2) SP / EN引脚
① 当 8259A 工作于非缓冲方式 (直接与
CPU 的 DB 相连 )
主片,1SP?
从片,0SP?
SP 为输入,是主从芯片定义引脚。
② 当 8259A 工作于缓冲方式 (通过总线缓冲器与
CPU 的 DB 相连 )
EN为输出,用于 CPU与 8259A传送数据信息时启动数据总线驱动器 。
DB DBCPU 数据总线驱动器
8259A
ENOE
此时,主从芯片的定义由 ICW4中的 M/S实现。
8259A 的引脚图
Vcc
A0
IR
7
IR
6
IR
5
IR
4
IR
3
IR
2
IR
1
IR
0
I NT
C AS
2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
28
27
26
25
24
23
22
21
20
19
18
17
16
15
I N T A
ENSP
WR
RD
CS
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C AS
0
C AS
1
GND
图 7 - 13   8259 A 引脚图图   引脚图二,8259A 的中断处理过程下面以 8259A单片使用为例,说明其中断处理过程。
1,当一条或多条中断请求线 IR0 ~ IR7变高 时,
设置相应的 IRR位 。
2,PR对中断优先权和中断屏蔽寄存器的状态进行判断之后,如某中断优先权最高且为允许中断状态,就向 CPU发高电平信号
INT,请求中断服务 。
3,CPU响应中断时,送回应答信号 INTA 。
4,8259A接到来自 CPU的第一个信号 INTA时,
当前中断服务寄存器 ( ISR) 中相应位置位,
并把 IRR中相应位复位 。 同时,8259A准备向数据总线发送中断类型号 。
5,在 8259A发送中断类型号的后一个 INTA 脉冲期间,如果是在 AEOI(自动结束中断 )方式下,在这个 INTA 脉冲结束时复位 ISR的相应位 。 在非自动中断结束方式下,ISR相应位要由中断服务程序结束时发出的 EOI命令来复位 。
三,8259A 的工作方式
8259A有多种工作方式,这些工作方式可以通过初始化命令字 ( ICW1?ICW4) 和操作命令字 ( OCW1?OCW3) 来设置 。
1,引入中断请求的方式边沿触发方式 。 以上跳沿向 8259A请求中断,上跳沿后可一直维持高电平,不会再产生中断 。
电平触发方式 。 以高电平申请中断,
但在响应中断后必须及时清除高电平,以免引起第二次误中断 。
中断查询方式 。 外设通过 8259A申请中断,但 8259A却不使用 INT信号向 CPU申请中断,CPU用软件查询确定中断源,并为其服务 。
2,连接系统总线的方式在大系统中,要求数据总线有总线缓冲器 。 8259A与这种带总线缓冲器的系统总线连接的方式称 缓冲器方式 。
在小系统中,则 8259A不需要总线缓冲器而是将其直接接至数据总线 。 8259A与这种不需总线缓冲器而直接连到系统总线的方式称非缓冲器方式 。
3,屏蔽中断源的方式普通屏蔽方式 。 利用操作命令字 OCW1,
使屏蔽寄存器 IMR中的一位或几位置 1来屏蔽一个或几个中断源的中断请求 。 若要开放某一个中断源的中断请求,则将 IMR中相应的位置 0。
特殊屏蔽方式 。 在某些场合,在执行某一个中断服务程序时,要求允许另一个优先级比它低的中断请求被响应,此时可采用特殊屏蔽方式 。 它可通过 OCW3的 D6D5= 11
来设定 。
4,优先级排队的方式全嵌套方式 。 在此种方式下中断优先级按 0? 7顺序进行排队,只允许中断级别高的中断源去中断中断级别低的中断服务程序 。
特殊全嵌套方式 。 它和全嵌套方式基本相同,所不同的是在特殊全嵌套方式下,当执行某一级中断服务程序时,可响应同级的中断请求,从而实现对 同级中断 请求的特殊嵌套
(8259A级联使用时,某从片的 8个中断源对主片来说,可以认为是同级的 )。 特殊全嵌套方式用于多片级联 。
优先级自动循环方式 。 在这种方式下,
优先级顺序不是固定不变的,一个设备得到中断服务后,其优先级自动降为最低 。 其初始的优先级顺序规定为 IR0,IR1,…,IR7。
该方式用在系统中多个中断源优先级相等的场合 。
优先级特殊循环方式 。 这种方式与优先级自动循环方式唯一的区别是,其初始的优先级顺序不是固定 IR0为最高,然后开始循环,而是由程序指定 IR0? IR7中任意一个为最高优先级,然后再按顺序自动循环,决定优先级 。
5,结束中断的处理方式自动中断结束方式 。 在中断服务程序中,中断返回之前,不需发中断结束命令就会自动清除该中断源所对应的 ISR位 ( 实际上在 CPU发第二个信号时,8259即自动消除 ISR
中的对应位 ) 。 这种方式用在多个中断不会嵌套的系统中 。
非自动中断结束方式 。 在中断服务程序返回之前,必须发中断结束命令才能使 ISR
中的当前服务位清除 。
四,8259A 的初始化命令字
8259A 初始化编程时,有四个初始化命令字 ICW(Initialiation Command Word),即
ICW1?ICW4 ; 8259A工作期间,有三个操作命令字 OCW(Operation Command Word),即
OCW1~ OCW3。
8259A 只有两个端口地址 A0= 0 偶地址端口1 奇地址端口因此,对 8259A
读 /写操作时,要注意控制字写入的端口地址写入的顺序有关的标志位
1,ICW1
(IRi 触发方式,是否单片使用,是否写入 ICW4)
0 1 LTIM? SNGL IC4
A0 D7 D6 D5 D4 D3 D2 D1 D0
标志位
① LTIM,规定 IRi的触发方式
1 高电平触发
0 触发
=
② SNGL,是否单片使用
1 单片使用
0 级联使用
=
③ IC4,是否写入 ICW4
1 后面写入 ICW4
0 不写入 ICW4
=
例,某 8086微机系统中,使用单片
8259A,中断请求信号为上升沿触发,需要设置 ICW4,端口地址为 20H,21H,则其初始化命令字 ICW1应为,00010011= 13H,设置 ICW1的指令为:
MOV AL,13H
OUT 20H,AL
2,ICW2
(中断类型号的高 5位 )
(中断类型号的低 3位由 8259A 自动编码产生 )
1 T7 T6 T5 T4 T3
A0 D7 D6 D5 D4 D3 D2 D1 D0
IRi 对应中断类型号的高 5位
T7 T6 T5 T4 T3 T2 T1 T0
由 ICW2规定 0 0 0
0 0 1
0 1 0
1 1 1
IR0
IR1
IR2
IR7
例,某 PC机中 8个可屏蔽中断 ( IR0? IR7)
的类型号为 08H? 0FH,A0= 1,端口地址为
21H,则 ICW2为,08H,设置 ICW2的指令为:
MOV AL,08H
OUT 21H,AL
3,ICW3
(级联时,主从芯片的级联引脚 )
若 ICW1 中 SNGL=
1 不写入 ICW3
0 写入 ICW3
(1) 写给主片的 ICW3
Si = 1,表示主片 IRi上接有从片。
1 S7 S6 S5 S4 S3 S2 S1 S0
A0 D7 D6 D5 D4 D3 D2 D1 D0
(2) 写给从片的 ICW3
ID2 ID1 ID0 该从片
0 0 0 接入主片的 IR0
0 0 1 接入主片的 IR1

1 1 1 接入主片的 IR7
1 0 0 0 0 0 ID2 ID1 ID0
A0 D7 D6 D5 D4 D3 D2 D1 D0
从片的标志码例:某 8086微机系统中,主片 8259A的 IR2,IR6
引脚上分别接有从片 8259A,则主,从片的 ICW3初始化命令字设置如下:
主片初始化命令字,(口地址设为 20H,21H)
MOV AL,44H ; 44H为主片的 ICW3,表示其 IR6,
IR2上接有从片
OUT 21H,AL ; 将 ICW3写入奇地址端口从片 1的初始化命令,(口地址为 30H,31H)
MOV AL,02H
OUT 31H,AL
从片 2的初始化命令,(口地址为 40H,41H)
MOV AL,06H
OUT 41H,AL
4,ICW4
1 0 0 SFNM BUF M/S AEOI 1
A0 D7 D6 D5 D4 D3 D2 D1 D0
0
标志位 用于 8088/
8086系统
0 正常的完全嵌套方式
1 特殊的完全嵌套方式
(1) SFNM,规定 8259A中断的嵌套方式
(单片使用时,两种方式一样。 )
SFNM=
① 正常的完全嵌套方式高级的中断
② 特殊的完全嵌套方式同级的或高级的中断注意:级联使用时,某一从片的 IRi对主片来说是同级的 (同级中断 )。
此处,要理解同级中断的概念 !
(to CPU)
INTA INT
从 8259A
IR7 IR6 … IR0 IR7 IR6 … IR0
INTA INT
CAS0
CAS1
CAS2
CAS0
CAS1
CAS2
主 8259A
INTA (from CPU)
INTR
… …
例如:
若主,从 8259A工作于固定优先权方式,从片的优先级为 IR0?IR1 IR7。 但对主片来说,从片的 IR0 ~ IR7 是同级的 。
1 缓冲方式
0 非缓冲方式
(2) BUF
=
(3) M/S
① 当 8259A 工作于缓冲方式时 (BUF=1),
M/S用于定义主、从芯片。
1 主 8259A
0 从 8259A
M/S =
② 当 8259A工作于非缓冲方式时 (BUF = 0),
SP引脚为输入,用于定义主从芯片,此时
M/S 不起作用。
(4) AEOI,规定中断的结束方式
(如何使 ISR中对应位清 0)
① AEOI = 1 自动中断结束方式当 CPU 发出第二个 后,ISR 中的相应位复位,此时,不适宜实现中断嵌套 。
INTA
② AEOI = 0 非自动中断结束方式由程序发出 EOI 命令 (由 8259A 的
OCW 实现 ),使 ISR 中相应位复位。
五,8259A 的初始化编程逻辑用 ICW1设置:是否级联?
请求信号的触发方式后面是否用 ICW4
用 ICW2设中断类型码是否为级联方式?
本片为主片吗?
设 ICW3各位对应
IR0~IR 7 的连接状况设 ICW3 高 5位为 0;
低 3位为标识码用 ICW4 吗?
用 ICW4 设:为特殊全嵌套方式?
为缓冲方式?
为自动 EOI方式?
为 8086/8088系统?
END
N
Y
N
N
Y
8259A的初始化流程注意:级联使用时,主,
从 8259A都要作初始化操作 。
例,PC/XT 系统中 8259A的初始化编程
20H,21H为 8259A的端口地址,
在 BIOS 中,8259A的初始化程序段如下:
MOV AL,13H ; ICW1=0001,0011B,边沿触发,单片使用,; 要 ICW4.
OUT 20H,AL
MOV AL,08H ; ICW2=08H,IR0~IR7对应的中断类型号; 为 08H~0FH
OUT 21H,AL
MOV AL,09H ; ICW4=09H,正常的嵌套方式,; 非自动中断结束方式
OUT 21H,AL
六,8259A 的操作命令字对 8259A 进行初始化编程后,8259A
作好了接收中断请求输入的准备,在
8259A 工作期间可由操作命令字 OCW1~
OCW3 规定其各种工作方式 。
1,OCW1( 中断屏蔽操作命令字)
设置或清除 IMR 的各个位。
1
A0 D7 D0
M7 M0…………
…………
Mi=1 表示 IRi被屏蔽例,设 OCW1= 06H,则表示 IR1,IR2 两个引脚上的中断申请被屏蔽,其他的中断申请 (IR0,IR3?IR7)则得到允许 。 8259A编程指令为:
MOV AL,00000110B ; OCW1屏蔽字
OUT 21H,AL ; 屏蔽字写入奇地址口;的 OCW
1寄存器
2,OCW2 (优先权循环方式和中断结束方式操作命令字 )
0 R SL EOI 0 0 L2 L1 L0
A0 D7 D6 D5 D4 D3 D2 D1 D0
标志位有两个作用:
(1) 8259A 工作于非自动中断结束方式时,如何复位 ISR 中的对应位?有两种方法:
SFNM
① 一般方法:令 SL = 0,EOI =1
将 OCW2写入 8259A后,将刚刚被服务的 IRi对应位复位。
② 特殊方法:令 SL = 1,EOI = 1
写入 OCW2后,使 L2L1L0指定的位复位。
L2 L1 L0
0 0 0
0 0 1
1 1 1
D0
D1
D7
ISR中的 Di
IR0
IR1
IR7
对应的 IRi
(2) 定义 8259A 的优先权工作方法
① R = 0 固定优先权方式
IR0? IR1? …? IR7
② R = 1,SL = 0 优先权自动循环方式例,IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
初始优先权为,7 6 5 4 3 2 1 0
若 ISR = 0 1 0 1 0 0 0 0
则当 IR4
服务完毕后,优先权为,2 1 0 7 6 5 4 3
③ R = 1,SL = 1 优先权特殊循环方式此时,L2L1L0 规定循环开始时的最低优先权例,1 1? 0 0 1 0 1
IR5优先权最低此时,优先权为:
IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0
1 0 7 6 5 4 3 2
例:若使 8086系统中 8259A的优先级顺序为 IR3,IR4,IR5,IR6 IR7,IR0 IR1,IR2,试编写一段程序实现该优先顺序,设 8259A的偶地址为 20H。
根据题意要求,为实现上述优先级顺序,
应先确定 OCW2,然后将它写入 8259A的偶地址端口:
MOV AL,0C2H ; OCW2
OUT 20H,AL ; 把 OCW2写入 8259A的偶地址端口 。
OCW2,R SL EOI 0 0 L2 L1 L0
1 1 0 0 0 0 1 0
例,试编一段程序,用以清除 8086系统中
8259A的 ISR第 6位 ( ISR6),8259A的偶地址为 20H。
为实现题意要求,应先确定 OCW2的内容,
然后将 OCW2写入 8259A的偶地址端口 。
OCW2:
MOV AL,66H ; OCW2
OUT 20H,AL ; 把 OCW2写入 8259A的偶地址端口。
R SL EOI 0 0 L2 L1 L0
0 1 1 0 0 1 1 0
3,OCW3
0 0 ESMM SMM 0 1 P RR RIS
A0 D7 D0
标志位
(特殊屏蔽方式和中断查询方式操作命令字 )
有三个作用:
(1) 设置和撤消特殊屏蔽工作方式
① 正常的屏蔽方式由 OCW1 设置 IMR 实现
② 特殊的屏蔽工作方式因此,可以通过设置或撤消特殊的屏蔽工作方式,动态改变优先权的结构 。
正常的屏蔽方式设置特殊的屏蔽方式只要 IMR中的对应位没有置,1”,
8259A就可以接受其中断请求。
撤消特殊的屏蔽方式正常的屏蔽方式
1SMM
1ESMM令
0SMM
1ESMM令
(2) 为 CPU 读取 8259A内部寄存器提供选择
IN AL,INTA1 ; IMR? AL
8259A 中的 IMR由 OCW1设置,对应奇地址端口,可以写入,也可以读出。
② 8259A 中 IRR,ISR 只能读出,不能写入,
都对应偶地址端口 。 此时,可先写 入
OCW3,OCW3中的 RR,RIS 规定从偶地址端口读出的是 IRR 或 ISR 的值 。
MOV AL,OCW3
OUT INTA0,AL
IN AL,INTA0 ; 若 OCW3中
RR RIS 则读出的是
1 1 ISR
1 0 IRR
例:试编写一段程序,以实现将 8086系统中
8259A的 IRR,ISR,IMR三寄存器的内容读出并送入存储器从 0080H开始的数组中,设 8259A
的偶地址为 20H,奇地址为 21H。
MOV AL,0AH ; OCW3=0AH,指出要读 IRR
OUT 20H,AL ; OCW3写入 8259A的偶地址端口
IN AL,20H ; 读回 IRR的内容
MOV [080H],AL ; 将 IRR的内容存入从 080H开始的单元中
MOV AL,0BH ; OCW3= 0BH,指出要读 ISR
OUT 20H,AL
IN AL,20H ; 读回 ISR的内容
MOV [ 081H ],AL ; 将 ISR的内容存入内容
IN AL,21H ; 读回 IMR
MOV [082H],AL ; IMR内容存入内存
(3) 使 8259A 和 CPU 的通信方式由中断方式?
查询方式某些情况下,当 IF设置为 0时,用查询方式为中断源服务。
令 OCW3 中的 P = 1,写入 OCW3后,
若之前有 IRi有效,8259A 把 CPU 的下一个读信号看作 信号,使 ISR 中最高优先权的某一位置位,同时送以下数据至 DB。
INTA
MOV AL,OCW3 ; 其中 P=1
OUT INTA0,AL ; 发 OCW3
IN AL,INTA0 ; 读偶地址端口此时,AL 中的数据
1 W2 W1 W0
D7 D0
当前最高优先权
IRi对应的编 码
0 0 0
0 0 1
1 1 1
IR0
IR1
IR7
1 表示有中断请求
0 没有中断请求例,假如 8259A的 IR2输入引脚上有中断申请,但此时 8086CPU内部的中断允许标志 IF
= 0,8086CPU应如何知道其 8259A的 IR2输入引脚上有中断请求?
为使 8086CPU知道其 8259A IR2引脚上有中断申请,可用中断查询方式来解决 (即 CPU
先发一个查询命令 OCW3,然后接收 8259A的查询字 ),其程序如下:
OCW3为:
0 E S M M SMM 0 1 P RR R I S
0 0 0 0 1 1 0 0
MOV AL,0CH ; P= 1查命令 OCW3
OUT 20H,AL ; 输出查询命令,即 OCW3
写入 8259A的偶地址端口
IN AL,20H ; 读 8259A的查询字七,8259A 对 ICW,OCW的识别
8259A 只占两个端口,但 ICW 有 4个,
OCW有 3个。
1,A0 = 0 (偶地址端口 ) 写入的有:
ICW1,OCW2,OCW3
(D4=1)?

0D
0D
4
3?

0D
1D
4
3
用标志位识别
2,A0 = 1 (奇地址端口 ) 写入的有:
ICW2? ICW3? ICW4? OCW1
按写入顺序识别注意,初始化过程中可能没有 ICW3或 ICW4,
应根据具体情况确定 。
八,8259A编程举例例 9.1 设 8259A应用于 8088系统,中断类型号为
08H~ 0FH,它的偶地址为 20H,奇地址为 21H,设置单片
8259A按如下方式工作:电平触发,普通全嵌套,普通
EOI,非缓冲工作方式,试编写其初始化程序 。
分析,根据 8259A应用于 8088系统,单片工作,电平触发,可得,ICW1=00011011B;根据中断类型号为
08H~ 0FH,可得,ICW2=00001000B;根据普通全嵌套,普通 EOI,非缓冲工作方式,可得,ICW4=00000001B 。 写入置此三字,即可完成初始化,程序如下:
MOV AL,1BH ;00011011B,写入 ICW1
OUT 20H,AL
MOV AL,08H ;00001000B,写入 ICW2
OUT 21H,AL
MOV AL,01H ;00000001B,写入 ICW4
OUT 21H,AL
例 9.2 设 8259A应用于 8086系统,采用主从两片级连工作,主片偶地址为 20H,奇地址为 22H,( 这里的偶地址和奇地址是相对于 8259A的片内地址而言 ),中断类型号为
08H~ 0FH,从片偶地址为 0A0H,奇地址为 0A2H,中断类型号为 70H~ 77H,主片 IR3和从片级连,要实现从片级全嵌套工作,试编写其初始化程序 。
分析,根据 8259A应用于 8086系统,主从式级连工作,
主片和从片都必须有初始化程序,要实现从片级全嵌套工作,必须主片采用特殊全嵌套,从片采用普通全嵌套,如其他要求与例 9.1相同,主片和从片初始化程序如下:
( 1) 主片初始化程序
MOV AL,19H ;00011001B,写入 ICW1
OUT 20H,AL
MOV AL,08H ;00001000B,写入 ICW2
OUT 22H,AL
MOV AL,08H ;00001000B,写入 ICW3,
OUT 22H,AL ; 在 IR3引脚上接有从片
MOV AL,11H ;00010001B,写入 ICW4
OUT 22H,AL
( 1) 从片初始化程序
MOV AL,19H ;00011001B,写入 ICW1
OUT 0A0H,AL
MOV AL,70H ;01110000B,写入 ICW2
OUT 0A2H,AL
MOV AL,03H ;00000011B,写入 ICW3,
OUT 0A2H,AL ; 本从片的识别码为 03H
MOV AL,01H ;00000001B,写入 ICW4
OUT 0A2H,AL
例 9.3 在例 9.2中,主片要查询从片
ISR状态,当全部从片中断得到响应后,才能发中断结束命令,试编写该程序段 。
分析,全部从片中断得到响应,从片
ISR=0,只要读出从片 ISR,若等于 0,结束中断 。 程序如下:
MOV AL,0BH ; 00001011B写入从片 OCW3,; 要求读出 ISR
OUT 0A0H,AL
IN AL,0A0H ; 读从片 ISR
OR AL,AL ; 判 ISR是否全 0
JNZ ZDCK ; 否,转中断人口
MOV AL,63H ; 是,01100011B写入 OCW2,向主片发中断结束命令,主片 ISR
的 D3位清 0
OUT 20H,AL
ZDCK,IRET