实验六
8259A 中断控制器实验
计算机与电子信息学院
一、实验目的
(1)学习中断控制器 8259 的工作原理。
(2)掌握可编程控制器 8259 的应用编程方法。
二、实验设备
PC 微机一台、TD-PIT+实验系统一套。
三、实验内容
1、本系统中已设计有一片 8259A 中断控制芯片,工作于主片方式,8 个中断请求输入
端 IR0,IR7 对应的中断型号为 8F,其和中断矢量关于如下表 5-3 所示。
8259 中断源
IR0
IR1
IR2
IR3
IR4
IR5
IR6
IR7
中断类型号 中断矢量表地址
8
9
A
B
C
D
E
F
20H~23H
24H~27H
28H~2BH
2CH~2FH
30H~33H
34H~37H
38H~3BH
3CH~3FH
2、8259A 和 8088 系统总线直接相连,8259A 上连有一系统地址线 A0,故 8259A 有 2
个端口地址, 本系统中为 20H、21H。 20H 用来写 ICW1, 21H 用来写 ICW2、ICW3、
ICW4,初始化命令字写好后, 再写操作命令字。OCW2、OCW3 用口地址 20H,OCW1
用口地址 21H。图 5-14 中,使用了 3 号中断源,IR3 插孔和 SP 插孔相连,中断方式为边
沿触发方式,每按一次 AN 按钮产生一次中断信号,向 8259A 发出中断请求信号。CPU 响
应中断后,在中断服务中, 对中断次数进行计数并显示,计满 5 次结束。
3、8259A 芯片是专为控制优先级中断而设计开发的芯片。它将中断源优先级排队,辨
别中断源以及提供中断矢量的电路集于一片中。只需对 8259A 编程,就可以管理 8 级中断,
并选择优先模式和中断请求方式,即中断结构可由用户编程来设定。
4、流程图
四、实验过程
程序清单:
INTR_IVADD
INTR_OCW1
INTR_OCW2
INTR_IM
PCI_INTCSR
STACK1 SEGMENT STACK
EQU 01CCH
EQU 0A1H
EQU 0A0H
EQU 0F7H
EQU 0D878H
DW 256 DUP(?)
STACK1 ENDS
DATA SEGMENT
CS_BAK DW ?
IP_BAK DW ?
IM_BAK DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
CLI
MOV DX,PCI_INTCSR
MOV AX,1F00H
OUT DX,AX
ADD DX,2
MOV AX,003FH
OUT DX,AX
MOV AX,0000H
MOV ES,AX
MOV DI,INTR_IVADD
MOV AX,ES:[DI]
MOV IP_BAK,AX
MOV AX,OFFSET MYISR
MOV ES:[DI],AX
ADD DI,2
MOV AX,ES:[DI]
MOV CS_BAK,AX
MOV AX,SEG MYISR
MOV ES:[DI],AX
MOV DX,INTR_OCW1
IN AL,DX
MOV IM_BAK,AL
AND AL,INTR_IM
OUT DX,AL
mov cx,5h
STI
WAIT1: cmp cx,0h
JnZ WAIT1
QUIT: CLI
MOV DX,PCI_INTCSR
MOV AX,0000H
OUT DX,AX
MOV AX,0000H
MOV ES,AX
MOV DI,INTR_IVADD
MOV AX,IP_BAK
MOV ES:[DI],AX
ADD DI,2
MOV AX,CS_BAK
MOV ES:[DI],AX
MOV DX,INTR_OCW1
MOV AL,IM_BAK
OUT DX,AL
STI
MOV AX,4C00H
INT 21H
MYISR PROC NEAR
MOV AL,39H
MOV AH,0EH
INT 10H
MOV AL,20H
INT 10H
OVER: MOV DX,PCI_INTCSR
ADD DX,2
MOV AX,003FH
OUT DX,AX
MOV DX,INTR_OCW2
MOV AL,20H
OUT DX,AL
MOV AL,20H
OUT 20H,AL
dec cx
IRET
MYISR ENDP
CODE ENDS
END START
五、实验思考
1、在编程过程中,用到了那些操作命令字?
答:<1>OCW1,用来进行屏蔽操作,直接将中断屏蔽寄存器 IMR 的相应位置位或复位。
<2> OCW2,用来设置中断结束方式和优先级循环方式 。
2、在执行中断程序之前,保存了那些断点?为什么?
答:<1>保存了 INTR 原中断处理程序入口断地址的变量,保存了 INTR 原中断处理程
序入口偏移地址的变量,保存了 INTR 原中断屏蔽字的变量。<2>因为出现在 INTR 线上的
请求信号是电平触发的,它的出现是异步的,在 CPU 内部是由 CLK 的上升沿来同步的。在
INTR 线上的中断请求信号(即有效的高电平)必须保持到当前指令的结束。