1
第 8章 中断控制接口
2
第 8章 中断系统教学重点
8086/8088 中断系统
8259A的中断工作过程和工作方式
中断服务程序的编写
3
中断的定义
CPU执行程序时,由于发生了某种随机的事件 (外部或内部 ),引起 CPU暂时中断正在运行的程序,转去执行一段特殊的服务程序 (称为中断服务程序或中断处理程序 ),以处理该事件,该事件处理完后又返回被中断的程序继续执行,这一过程称为中断 。
4
5.1 8086/8088中断系统
8088的中断系统采用向量中断机制
能够处理 256个中断
用中断向量号 0~ 255区别
可屏蔽中断还需要借助专用中断控制器 Intel 8259A实现优先权管理
5
2,中断源
引起 CPU中断的事件 ——中断源 。 例如:
外设 —— 请求输入输出数据,报告故障等
事件 —— 掉电,硬件故障,软件错误,非法操作,定时时间到等
中断源分为:外部中断,内部中断
内部中断,CPU内部执行程序时自身产生的中断
外部中断,CPU以外的设备,部件产生的中断
8086/8088的外部中断信号,INTR,NMI
INTR—— 可屏蔽中断请求,高电平有效,受 IF标志的控制 。 IF=1时,执行完当前指令后 CPU对它作出响应 。
NMI—— 非屏蔽中断请求,上升沿有效,任何时候 CPU都要响应此中断请求信号 。
6
5.1.1 8086/8088的中断类型非屏蔽中断源中断逻辑
INTO
指令单步中断除法错误
INT N
指令
CPU INTR
NMI
可屏蔽中断源
8259A
中断控制器
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
外设中断源
INTA
内部中断
除法错中断
指令中断
溢出中断
单步中断
外部中断
非屏蔽中断
可屏蔽中断
7
1,内部中断内部中断是由于 8086/8088内部执行程序出现异常引起 的程序中断
除法错中断:向量号为 0
指令中断:向量号为 n
断点中断:向量号为 3
溢出中断:向量号为 4
单步中断:向量号为 1
内部中断的中断向量号已定
8
2,外部中断外部中断是由于 8086/8088外部提出中断请求引起 的程序中断
非屏蔽中断:向量号为 2
外部通过非屏蔽中断 NMI请求,必须响应
非屏蔽中断主要用于处理系统的意外或故障
可屏蔽中断:向量号来自中断控制器
外部通过可屏蔽中断 INTR请求,由 IF控制是否响应;响应时产生 INTA*信号
可屏蔽中断主要用于与外设交换数据
IF控制可屏蔽中断的响应
9
中断标志 IF的状态
IF= 0:可屏蔽中断不会被响应
关中断,禁止中断,中断屏蔽
系统复位,使 IF= 0
任何一个中断被响应,使 IF= 0
执行指令 CLI,使 IF= 0
IF= 1:可屏蔽中断会被响应
开中断,允许中断,中断开放
执行指令 STI,使 IF= 1
执行指令 IRET恢复原 IF状态明确 IF标志的状态是关键
10
5.1.2 8086/8088的中断响应过程
NMI
N
软件中断
INTR
TF=1
中断响应周期读中断向量号下条指令现行指令
IF= 1
N
NN
N
Y
Y
Y
Y
Y
查询中断的顺序,
决定了各种中断源的优先权
软件中断
除法错中断
指令中断
溢出中断
非屏蔽中断
可屏蔽中断
单步中断高低
11
5.1.2 8086/8088的中断响应过程
(续)
Y还有 NMI
TEMP= 1
标志寄存器入栈
TEMP= TF,IF= TF= 0
CS,IP入栈获取中断向量执行服务程序弹出 CS,IP
弹出标志寄存器返回被中断程序
( 1)
( 2)
( 3)
( 4)
( 5)
N
N
Y
( 6)
8088各种中断源的优先权,
实际上是指被识别出来的先后
多种中断同时请求时,
最先响应的则可能是单步中断或 NMI中断
12
5.1.3 8086/8088的中断向量表
中断向量:中断服务程序的入口地址 ( 首地址 )
逻辑地址含有段地址 CS和偏移地址 IP( 32位 )
每个中断向量的低字是偏移地址,高字是段地址,
需占用 4个字节
8088微处理器从物理地址 000H开始,依次安排各个中断向量,向量号也从 0开始
256个中断占用 1KB区域,就形成中断向量表向量号为 N的中断向量的物理地址= N× 4
13
5.1.4 内部中断服务程序
编写内部中断服务程序与编写子程序类似
利用过程定义伪指令 PROC/ENDP
第 1条指令通常为开中断指令 STI
最后用中断返回指令 IRET
通常采用寄存器传递参数
主程序需要调用中断服务程序
调用前,需要设置中断向量
利用 INT n指令调用中断服务程序
14
中断向量表初始化
读取中断向量
入口,AH=35H,AL=中断类型号 ( 中断号 )
出口参数,ES:BX=中断向量
重写中断向量
入口,AH=35H,
AL=中断类型号,DS:DX=要写入的中断向量
15
例 5.1 内部中断服务程序
编写 80H号中断服务程序
功能:显示以,0”结尾字符串的功能
利用显示器功能调用 INT 10H
字符串缓冲区首地址为入口参数
DS:DX( 段地址:偏移地址 ) 传递参数数据段
intoff dw?
intseg dw?
intmsg db?A Instruction Interrupt !?
db 0dh,0ah,0
例 7.1
保存中断向量
mov ax,3580h
int 21h
mov intoff,bx ;保存偏移地址
mov intseg,es ;保存段基地址例 7.1
设置中断向量
push ds
mov dx,offset new80h
mov ax,seg new80h
mov ds,ax
mov ax,2580h
int 21h
pop ds
例 7.1
调用中断服务程序
mov dx,offset intmsg
int 80h
例 7.1
new80h proc
sti ;开中断
push ax ;保护寄存器
push bx
push si
例 7.1
进入中断服务程序显示字符串
mov si,dx
new1,mov al,[si] ;显示的字符 AL
cmp al,0
jz new2
mov bx,0 ;入口参数,显示页
mov ah,0eh ;功能号
int 10h
inc si
jmp new1
例 7.1
退出中断服务程序
new2,pop si ;恢复寄存器
pop bx
pop ax
iret ;中断返回
new80h endp
例 7.1
主程序结束
mov dx,intoff
mov ax,intseg
mov ds,ax
mov ax,2580h
int 21h
mov ax,4c00h
int 21h
例 7.1
A Instruction Interrupt !
24
5.2 可编程中断控制器 8259A
Intel 8259A是可编程中断控制器 PIC
可用于管理 Intel 8080/8085,8086/8088、
80286/80386的可屏蔽中断
8259A的基本功能
一片 8259A可以管理 8级中断,可扩展至 64级
每一级中断都可单独被屏蔽或允许
在中断响应周期,可提供相应的中断向量号
8259A设计有多种工作方式,可通过编程选择
25
5.2.1 8259A的内部结构和引脚
D7~D0
INTA
INT
中断请求寄存器中断屏蔽寄存器数据总线缓冲器 IR0
IR7
读 /写控制逻辑级联缓冲器比较器
RD
WR
A0
CS
CAS0
CSA1
CAS2
SP/EN
优先权判别电路中断服务寄存器控制逻辑
26
1,中断控制
中断请求寄存器 IRR
保存 8条外界中断请求信号 IR0~ IR7的请求状态
Di位为 1表示 IRi引脚有中断请求;为 0表示无请求
中断服务寄存器 ISR
保存正在被 8259A服务着的中断状态
Di位为 1表示 IRi中断正在服务中;为 0表示没有被服务
中断屏蔽寄存器 IMR
保存对中断请求信号 IR的屏蔽状态
Di位为 1表示 IRi中断被屏蔽 ( 禁止 ) ;为 0表示允许
27
2,与处理器接口
A0 RD* WR* CS* 功能
0 1 0 0
1 1 0 0
0 0 1 0
1 0 1 0
× 1 1 0
× × × 1
写入 ICW1,OCW2和 OCW3
写入 ICW2~ ICW4和 OCW1
读出 IRR,ISR和查询字读出 IMR
数据总线高阻状态数据总线高阻状态
28
3,中断级连
一个系统中,8259A可以级连,有一个主 8259A,
若干个 ( 最多 8个 ) 从 8259A
级连时,主 8259A的三条级连线 CAS0~ CAS2作为输出线,连至每个从 8259A的 CAS0~ CAS2
每个从 8259A的中断请求信号 INT,连至主 8259A
的一个中断请求输入端 IR
主 8259A的 INT线连至 CPU的中断请求输入端
SP*/EN*在非缓冲方式下,规定该 8259A是主片
( SP*= 1) 还是从片 ( SP*= 0)
示例
29
5.2.2 8259A的中断过程
CAS0~ CAS2
D0~ D7
SP/EN
IR0~ IR7
CPU响应周期
8259A工作波形
INT
第一个周期
T1 T2 T3 T4
ALE
CLK
第二个周期
T1 T2 T3 T4
第一个前保持为高电平
INTA
LOCK
30
中断响应周期第一个中断响应周期 —— 数据线浮空。通知发中断请求的设备,CPU准备响应中断,应该准备好中断类型码。
第二个中断响应周期 —— 被响应的外设将一个字节的中断类型码送数据线,CPU读取类型码。
31
处理过程 (续 ):
8259A收到第一个负脉冲后
使 IRR锁存允许,不予接受 IR0~ IR7上的中断请求信号;直到第二个负脉冲结束后,才又使 IRR锁存禁止 (输入输出透明 )
使 ISR的相应位置,1”,以便为优先级裁决器以后的裁决提供依据 。
清除 IRR的相应位 。
8259A收到第二个负脉冲后:
把中断类型码寄存器的内容 (ICW2的内容 )送到 D7~
D0
如果 ICW4的 AEOI位为 1,则在第二个 脉冲结束时,将 ISR中被第一个 脉冲置,1”的位清除 (自动结束 ); 否则,要等到中断结束命令 (EOI)发送后才能清除 。
INTA
INTA
32
5.2.3 8259A的工作方式普通全嵌套方式特殊全嵌套方式自动循环方式特殊循环方式优先权固定方式优先权循环方式设置优先权方式普通中断结束方式特殊中断结束方式自动中断结束方式非自动中断结束方式结束中断处理方式屏蔽中断源方式普通屏蔽方式特殊屏蔽方式中断触发方式 边沿触发方式电平触发方式数据线连接方式 缓冲方式非缓冲方式
33
1,设置优先权方式
普通全嵌套方式
8259A的中断 优先权顺序固定不变,从高到低依次为
IR0,IR1,IR2,…… IR7
中断请求后,8259A对 当前请求中断中优先权最高的中断 IRi予以 响应,将其向量号送上数据总线,对应
ISR的 Di位置位,至到中断结束 ( ISR的 Di位复位 )
在 ISR的 Di位置位期间,禁止再发生同级和低级优先权的中断,但允许高级优先权中断的嵌套
特殊全嵌套方式
优先权自动循环方式
优先权特殊循环方式
34
2,结束中断处理方式什么是 8259A的中断结束?
8259A利用中断服务寄存器 ISR判断:
某位为 1,表示正在进行中断服务;
该位为 0,就是该中断结束服务 。
这里说明如何使 ISR某位为 0,
不反映 CPU的工作状态 。
35
2,结束中断处理方式
自动中断结束方式
普通中断结束方式
配合全嵌套优先权方式使用
当 CPU用输出指令往 8259A发出普通中断结束
EOI命令 时,8259A就会把所有正在服务的中断中优先权最高的 ISR位复位
特殊中断结束方式
配合循环优先权方式使用
CPU在程序中向 8259A发送一条特殊中断结束命令,这个命令中指出了要清除哪个 ISR位
36
3,屏蔽中断源方式
普通屏蔽方式
将 IMR的 Di位置 1,则对应的中断 IRi被屏蔽,该中断请求不能从 8259A送到 CPU
如果 IMR的 Di位置 0,则允许 IRi中断产生
特殊屏蔽方式
将 IMR的 Di位置 1,对应的中断 IRi被屏蔽的同时,使 ISR的 Di位置 0
37
4,中断触发方式
边沿触发方式
8259A将中断请求输入端出现的上升沿作为中断请求信号
电平触发方式
中断请求端出现的高电平是有效的中断请求信号
38
5,数据线连接方式
缓冲方式
8259A的数据线需加缓冲器予以驱动
8259A把 SP*/EN*引脚作为输出端,输出允许信号,用以锁存或开启缓冲器
非缓冲方式
SP*/EN*引脚为输入端
若 8259A级连,由其确定是主片或从片
39
5.2.4 8259A的编程
初始化编程
8259A开始工作前,必须进行初始化编程
给 8259A写入 初始化命令字 ICW
中断操作编程
在 8259A工作期间
可以写入 操作命令字 OCW将选定的操作传送给 8259A,使之按新的要求工作
还可以读取 8259A的信息,以便了解他的工作状态
40
8259A的内部结构
CPU
AD7~AD0
INTA
INTR
SP/EN
ISR
ICW1 OCW1 (IMR)
ICW2 OCW2
ICW3 OCW3
ICW4
PR IRRD7~D0
地址译码.
.
.
INT
INTA
CS
RD
WR
A0
CAS0
CAS1
CAS2
.
.
.IR
7
IR0
41
IRR—Interrupt Request Register
PR---Priority Resolver
ISR---In-Service Register
IMR---Interrupt Mask Register
ICWs---Initialization Command Words
OCWs---Operation Command Words
7个 CPU可访问的寄存器,分两组:
初始化命令字 ICW1~ICW4---系统初启时设定 。
操作命令字 OCW1~OCW3—系统运行时,由应用程序设定 (实现对中断处理的动态管理和控制 ).
The OCWs can be written into the 8259A
anytime after initialization。
8259A的内部结构
42
1,初始化命令字 ICW
初始化命令字 ICW最多有 4个
8259A在开始工作前必须写入
必须按照 ICW1~ ICW4顺序写入
ICW1和 ICW2是必须送的
ICW3和 ICW4由工作方式决定流程
D7 D6 D5 D4 D3 D2 D1 D0
43
ICW1
× × × 1 LTIM × SNGL IC4
D7 D6 D5 D4 D3 D2 D1 D0
× ——表示可以任意为 1为 0都可以 ( 建议为 0)
1——只能为 1,作为标志中断触发方式:
LTIM= 1,电平触发方式
LTIM= 0,边沿触发方式规定单片或级连方式:
SNGL= 1,单片方式
SNGL= 0,级连方式是否写入 ICW4
IC4= 1,要写入 ICW4
IC4= 0,不写入 ICW4,即
ICW4规定的位全为 0
44
7.2.5命令字和初始化编程
45
ICW2
T7 T6 T5 T4 T3 × × ×
D7 D6 D5 D4 D3 D2 D1 D0
设置中断向量号
T7~ T3为中断向量号的高 5位
低 3位由 8259A自动确定:
IR0为 000,IR1为 001,……,
IR7为 111
46
ICW3
S7 S6 S5 S4 S3 S2/
ID2
S1/
ID1
S0/
ID0
D7 D6 D5 D4 D3 D2 D1 D0
级连命令字
主片 8259A,Si= 1对应 IRi接有从片;
否则 IRi没有连接从片
从片 8259A,ID0~ ID2编码说明从片
INT引脚接到主片哪个 IR引脚
47
7.2.5命令字和初始化编程
48
7.2.5命令字和初始化编程
49
ICW4
0 0 0 SFNM BUF M/S AEOI μPM
D7 D6 D5 D4 D3 D2 D1 D0
嵌套方式:
特殊全嵌套方式 ( SFNM= 1)
普通全嵌套方式 ( SFNM= 0)
数据线的缓冲方式:
缓冲方式 ( BUF= 1)
非缓冲方式 ( BUF= 0)
主片 /从片选择:
主片 ( M/S=1)
从片 ( M/S=0)
中断结束方式:
自动中断结束( AEOI= 1)
非自动中断结束( AEOI= 0)
微处理器类型:
16位 80x86(?PM= 1)
8位 8080/8085(?PM= 0)
50
7.2.5命令字和初始化编程
51
52
写 ICW1 A0=0,D4=1
写 ICW2 A0=1
SNGL=1
IC4=1
写 ICW3 A0=1
写 ICW4 A0=1
是否是否按顺序对 A0=1端口写入命令字
8259A芯片的初始化流程例 1、试按照如下要求对 8259A设置初始化命令字:系统中仅用一片 8259A,中断请求信号采用边沿触发方式;中断类型码为 08H~ 0FH;用全嵌套、缓冲、非自动结束中断方式。 8259A的端口地址为 20H和 21H。
MOVAL,13H
OUT 20H,AL
MOVAL,8
OUT 21H,AL
MOVAL,0DH
OUT 21H,AL
该片 8259A的初始化设置的程序段如下:
54
例 2、试对一个主从式 8259A进行初始化命令字的设置。从片的 INT与主片的 IR2相连。从片的中断类型码为 70H~77H,端口地址为 A0H和 A1H;
主片的中断类型码为 08H~ 0FH,端口地址为 20H
和 21H。中断请求信号采用边沿触发,采用全嵌套、
缓冲、非自动结束中断方式。
CAS0~ 2
CAS0~ 2
+5V
主 8259A
82288
80286 CPU
INTR
D0~ D7
SP/EN
INT
D0~ D7
日时钟键盘串行口 2
串行口 1
并行口 2
软盘并行口 1
A0
INTR1CS
— IRQ0
— IRQ1
IRQ2
— IRQ3
— IRQ4
— IRQ5
— IRQ6
— IRQ7
—A0
— CS
从 8259A
D0~ D7
INT
SP/EN
实时钟改向 0AH中断保留保留保留协处理器硬盘保留
A0
INTR2CS
— IRQ8
— IRQ9
— IRQ10
— IRQ11
— IRQ12
— IRQ13
— IRQ14
— IRQ15
—A0
— CS
系统总线
B25……
B24……
B23……
B22……
B21……
系统总线
B4…
D3………
D4………
D5………
D6………
D7………
INTA
RD
WR
INTA
IOR
IOW
INTA
RD
WR
56
初始化主片 8259A
mov al,11h ;写入 ICW1
out 20h,al
mov al,08h ;写入 ICW2
out 21h,al
mov al,04h ;写入 ICW3
out 21h,al
mov al,0dh ;写入 ICW4
out 21h,al
中断控制器的初始化程序段
57
初始化从片 8259A
mov al,11h ;写入 ICW1
out 0a0h,al
mov al,70h ;写入 ICW2
out 0a1h,al
mov al,02h ;写入 ICW3
out 0a1h,al
mov al,09h ;写入 ICW4
out 0a1h,al
中断控制器的初始化程序段
58
2,操作命令字 OCW
8259A工作期间,可以随时接受操作命令字 OCW
OCW共有 3个,OCW1~ OCW3
写入时没有顺序要求,需要哪个 OCW
就写入那个 OCW
D7 D6 D5 D4 D3 D2 D1 D0
59
OCW1
M7 M6 M5 M4 M3 M2 M1 M0
D7 D6 D5 D4 D3 D2 D1 D0
屏蔽命令字内容写入中断屏蔽寄存器 IMR
Di= Mi对应 IRi,为 1禁止 IRi中断;
为 0允许 IRi中断 。 各位互相独立 。
60
OCW2
R SL EOI 0 0 L2 L1 L0
D7 D6 D5 D4 D3 D2 D1 D0
R,SL和 EOI配合使用产生中断结束 EOI命令和改变优先权顺序
L2~ L0的 3位编码指定 IR引脚
61
7.2.5命令字和初始化编程
D7,用于规定中断优先级是否设置为循环方式
D7= 1,为优先权循环方式; D7= 0,为非循环方式
D6:用于规定 OCW2中的 L2 L1 L0是否有效
D6= l,表示 D2~ D0有效; D6= 0,表示无效
D5 (EOI),中断结束命令位 。 D5= 1,使中断服务寄存器中的对应位复位 。 如前所述,如果 ICW4
中 D1(AEOI)位为 l,表示中断采用自动结束方式 。
在中断自动结束方式下,当 CPU第 2个负脉冲结束时,中断服务寄存器 ISR中相应位会自动清除
62
7.2.5命令字和初始化编程但如果 AEOI为 0,则 ISRi位就要用 EOI命令来消除 。 EOI命令是通过 OCW2中的 D5位设置的
D4,D3,D4 D3= 00,OCW2的标志位
D2~ D0( L2 L1 L0),有两个用途:当
OCW2给出特殊的中断结束命令时 (即 EOI=1,
SL=1,R=0),L2,L1和 L0指出具体应清除中断服务寄存器中的哪一位
63
OCW3
0 ESMM SMM 0 1 P RR RIS
D7 D6 D5 D4 D3 D2 D1 D0
ESMM,SMM
设置中断屏蔽方式
P,RR和 RIS
规定随后读取的状态字 含义
64
7.2.5命令字和初始化编程
65
7.2.5命令字和初始化编程
OCW3的中断查询功能
OCW3的 D3位即 P位为中断查询方式位 。
当 P=1时,使 82C59A处于中断查询方式,
即 CPU向 82C59A偶地址端口写入一个查询命令 OCW3= 0CH后,再执行输入指令 (IN),
CPU便可读入 82C59A提供的查询字 。 查询字反映了当前有无中断请求,以及中断请求中优先级最高的是哪一个 。 82C59A的查询字格式如图 7-20
66
查询字
I - - - - W2 W1 W0
D7 D6 D5 D4 D3 D2 D1 D0
中断位 I位为 1,
有外设请求中断
W2~ W0的编码当前中断请求的最高优先级
67
4,命令字和状态字的区别方法
⑴ 利用读写信号区别写入的控制寄存器和读出的状态寄存器
⑵ 利用地址信号区别不同 I/O地址的寄存器
⑶ 由控制字中的标志位说明是哪个寄存器
⑷ 由芯片内顺序控制逻辑按一定顺序识别不同的寄存器
⑸ 由前面的控制字决定后续操作的寄存器接口电路中常用的方法
68
7.2.5命令字和初始化编程
OCW3的读操作功能
82C59A内部有 3个寄存器 (IRR,IMR、
ISR)可供 CPU读出其当前的状态,CPU在发读命令之前,须先指定读取哪个寄存器,然后再发 IN指令,才能读取 IRR和 ISR中的内容 。 当所读的寄存器不变,就不必每次都指定所要读取的寄存器 。 在 82C59A初始化后,
自动指向读 IRR
69
7.2.5命令字和初始化编程
OCW3中的 D1,Do两位用来指定具体读
ISR和 IRR中的哪一个寄存器?
当 RR,RIS= 11时,表示 CPU的下一条
IN指令要读取 ISR寄存器的内容?
当 RR,RIS=10时,表示 CPU的下一条 IN
指令要读 IRR寄存器的内容对 IMR寄存器的读出,不需要事先发出指定命令,直接通过读奇地址端口就可以读到
IMR寄存器的内容
70
小结
7个寄存器的寻址问题,
规定,A0
0
1
1
1
ICW1:用偶地址写入,且 D4=1
ICW2
ICW3
ICW4
紧接着 ICW1,用奇地址写入
1
0
0
OCW1:也用奇地址写入,但不紧跟 ICW1
OCW2
OCW3 也用偶地址写入,但 D4=0
即,0
1
0 0
0 1
D
4
D
3
I C W
1
O C W
2
O C W
3
0
0
采用了专门的“标识位,以节省输入地址的引脚数 (仅用了 A0)
71
关于 8259A的读出操作,可以读四个方面的内容
读,中断状态字,(“查询字,):
先写入 P=1的 OCW3查询命令字
用偶地址读 (IN AL,20H)
读 IRR:
先写入 OCW3(RR=1,RIS=0)
用偶地址读 (IN AL,20H)
读 ISR:
先写入 OCW3(RR=1,RIS=1)
用偶地址读 (IN AL,20H)
随时可用奇地址读 IMR
(IN AL,21H)
72
5.3 PC/XT硬件中断
CAS0~ 2
CAS0~ 2
+5V
主 8259A
82288
80286 CPU
INTR
D0~ D7
SP/EN
INT
D0~ D7
日时钟键盘串行口 2
串行口 1
并行口 2
软盘并行口 1
A0
INTR1CS
— IRQ0
— IRQ1
IRQ2
— IRQ3
— IRQ4
— IRQ5
— IRQ6
— IRQ7
—A0
— CS
从 8259A
D0~ D7
INT
SP/EN
实时钟改向 0AH中断保留保留保留协处理器硬盘保留
A0
INTR2CS
IRQ8
— IRQ9
— IRQ10
— IRQ11
— IRQ12
— IRQ13
— IRQ14
— IRQ15
—A0
— CS
系统总线
B25……
B24……
B23……
B22……
B21……
系统总线
B4…
D3………
D4………
D5………
D6………
D7………
INTARD
WR
INTAIOR
IOW
INTARD
WR
73
5.3 8259A在 IBM PC系列机上的应用
CAS0~ 2
从 8259A
D0~ D7
INT
SP/EN
实时钟改向 0AH中断保留保留保留协处理器硬盘保留
A0
INTR2CS
— IRQ8
— IRQ9
— IRQ10
— IRQ11
— IRQ12
— IRQ13
— IRQ14
— IRQ15
—A0
— CS
系统总线
B4…
D3………
D4………
D5………
D6………
D7………
INTA
RD
WR
对比 8259A在 IBM PC/XT机的应用
74
应用注意事项
利用上升沿做为中断请求 IRQ的有效信号
IRQ0~ IRQ7的中断向量号依次为 08H~ 0FH,
IRQ8~ IRQ15依次为 70H~ 77H
采用普通全嵌套优先权方式,中断优先权从高到低顺序为 IRQ0~ IRQ2,IRQ8~ IRQ15,IRQ3~
IRQ7,且不能改变
采用普通中断结束 EOI方式,需要在中断服务程序最后发送普通 EOI命令
一般采用普通屏蔽方式,通过写入 IMR允许中断,
但注意不要破坏原屏蔽状态
75
76
5.3.1 外部中断服务程序编写外部可屏蔽中断服务程序,需注意:
发送中断结束命令
一般只能采用存储单元传递参数
不要使用 DOS系统功能调用 (dos重入 )
中断服务程序尽量短小
77
5.3.1 外部中断服务程序 (续)
编写主程序,需注意:
修改中断向量
控制 CPU的中断允许标志
设置 8259A的中断屏蔽寄存器
78
例题 5.2 可屏蔽中断服务程序
8259A的 IRQ0( 向量号为 08H) 中断请求来自定时器 8253,每隔 55ms产生一次
本程序的 08H号中断服务程序,每次中断显示一串信息,显示 10次
用内存单元 ( 共享变量 ) 在主程序与外部中断服务程序之间传递参数:中断次数
显示信息也安排在共同的数据段中数据段
intmsg db?A 8259A Interrupt !?
db 0dh,0ah,0
counter db 0
例 7.2
保存中断向量
mov ax,3508h
int 21h
push bx ;保存偏移地址
push es ;保存段基地址例 7.2
设置中断向量
cli
push ds
mov dx,offset new08h
mov ax,seg new08h
mov ds,ax
mov ax,2508h
int 21h
pop ds
例 7.2
设置中断寄存器
in al,21h
push ax
and al,0feh ;允许 IRQ0
out 21h,al
mov counter,0 ;设置中断次数初值
sti ;开中断例 7.2
83
2,与处理器接口
A0 RD* WR* CS* 功能
0 1 0 0
1 1 0 0
0 0 1 0
1 0 1 0
× 1 1 0
× × × 1
写入 ICW1,OCW2和 OCW3
写入 ICW2~ ICW4和 OCW1
读出 IRR,ISR和查询字读出 IMR
数据总线高阻状态数据总线高阻状态循环等待中断
start1,cmp counter,10
jb start1 ;JB小于,中断 10次退出例 7.2
中断 就在主程序循环当中
85
主程序结束
cli
pop ax
out 21h,al
pop dx
pop ds
mov ax,2508h
int 21h
sti
mov ax,4c00h
int 21h
例 7.2
A 8259A Interrupt !
A 8259A Interrupt !
A 8259A Interrupt !
A 8259A Interrupt !
A 8259A Interrupt !
A 8259A Interrupt !
A 8259A Interrupt !
A 8259A Interrupt !
A 8259A Interrupt !
A 8259A Interrupt !
new08h proc
sti ;开中断
push ax ;保护寄存器
push bx
push ds
mov ax,seg counter
mov ds,ax ;设置数据段 DS
例 7.2
进入中断服务程序中断处理
inc counter
mov si,offset intmsg ;显示信息
call dpstri
例 7.2
88
退出中断服务程序
mov al,20h
out 20h,al
pop ds ;恢复寄存器
pop bx
pop ax
iret ;中断返回
new08h endp
例 7.2
显示字符串
dpstri proc ;显示字符串子程序
push ax
push bx
dps1,lodsb
cmp al,0
jz dps2
例 7.2
显示字符串 (续)
mov bx,0
mov ah,0eh
int 10h ;P98
jmp dps1
dps2,pop bx
pop ax
ret
dpstri endp
例 7.2
91
作业:
P308,8.1,8.3,8.4,8.5
92
第 5章 总结
1,熟悉 8088的中断类型,中断响应过程,中断向量表
2,掌握内部中断服务程序的编写
3,理解 8259A的内部结构,寄存器作用,中断过程
4,掌握 8259A的普通全嵌套优先权,
普通中断结束,边沿触发方式
93
第 5章 总结 (续)
5,了解的 8259A的 ICW和 OCW,
注意命令字和状态字的区别方法
6,了解 8259A在 IBM PC系列机上的应用情况
7,掌握外部中断服务程序的编写