微机原理实验报告
学 院
信息工程学院
班 级
电 062 班
姓
学
名
号
指导教师
董洁
课程名称
微机原理
2008 年 12 月
2
实验十一 8259中断控制器应用实验
一、实验目的
1. 学习中断控制器8259的工作原理;
2. 掌握可编程控制器 8259 的应用编程方法。
二、实验内容
1. 利用PC机给实验系统分配的中断线,设计一个单中断应用。使用单次脉冲模拟中断
产生。编写中断处理程序,在显示器屏幕上显示一个字符。
2. 利用实验平台上8259控制器对扩展系统总线上的中断线INTR进行扩展。编写程序对
8259控制器的IR0和IR1中断请求进行处理。
三、实验步骤
1.单中断应用实验
本实验要求使用总线上INTR中断请求线完成一次单中断应用实验。中断处理程序完成
在屏幕上的显示字符“5”。实验前先运行CHECK程序,得到INTR所对应的中断号、相
应的初始化命令字寄存器ICW及操作命令字寄存器OCW的地址、开屏蔽的命令字、中
断矢量地址和PCI卡中断控制寄存器INTCSR的地址。得到这些信息后就可以开始设计
实验了。参考程序流程下图所示。
3
实验步骤如下:
1. 确认从PC机引出的两根扁平电缆已经连接在实验平台上;
2. 首先运行CHECK程序,查看INTR中断号及相关信息;
3. 参考实验流程图编写程序,然后编译链接;
4. 将单次脉冲单元的KK1+连接到系统总线上的INTR;
5. 运行程序,按动KK1+按键,观察中断是否产生。
2.扩展多中断源实验
利用实验平台上的8259控制器,可以对总线上的INTR进行扩展。将8259的INT连接到INTR,8259
的8路中断请求线IR0~IR7就成了单一INTR中断请求线的扩充。这8路中断源共用INTR的中断
矢量,共用INTR的中断服务线程。在INTR的中断服务线程 中通过对8259 OCW3的查询,以确
定是IR0~IR7中哪个产生中断,然后转到相应的服务线程进行处理。将8259的OCW3中P位置1
即可执行查询,查询字格式如下图所示。
本实验要求实现8259控制器IR0、IR1两路中断。用KK1+和KK2+模拟两个中断源,在IR0
对应的服务程序中显示字符“0”,在IR1对应的服务程序中显示字符“1”。
实验步骤如下:
1. 确认从PC机引出的两根扁平电缆已经连接在实验平台上;
2. 首先运行CHECK程序,查看INTR中断号及相关信息;
3. 参考实验流程图编写程序,然后编译链接;
4. 参考实验接线图连接实验电路;
5. 运行程序,按动KK1+、KK2+按键,观察中断响应是否正常。
四、思考题
1、单中断与多中断有何不同?
答:对于单中断可直接使用总线上INTR中断请求线完成一次单中断,而不需要不用
8259。多中断源时,需要使用8259对总线上INTR进行扩展。将8259的INT连接到INTR,
8259的多路中断就成了单一INTR中断的扩充。这时就需要对8259的一系列寄存器进行初
始化设置,以确定中断的使用情况,包括优先级等。
2、如何改变中断优先级的顺序?
答:通过设置8259的OCW2,来改变中断优先级的顺序。常见的中断优先级管理的方式有:
全嵌套方式、特殊嵌套方式、优先级自动循环方式、优先级特殊循环方式、查询方式。
五、实验报告内容及要求
1.按步骤分析实验原理及实验过程中存在的问题。
本实验应注意的问题是对ISR内容清零,清除ISR常见的方法有两种。一、
4
初始化8259A时,设置8259A工作方式为自动清零方式。二、初始化8259A
时,设置8259A工作方式为非自动清零方式,需要在中断子程序中,通
过软件方式清零,即通过往OCW2写入20H实现。
2.附中断处理程序清单
实验1的参考程序如下:
;***************根据 CHECK 配置信息修改下列符号值*******************
INTR_IVADD EQU
EQU
INTR_OCW1
01CCH
0A1H
;INTR 对应的中断矢量地址
;INTR 对应 PC 机内部 8259 的 OCW1 地
址
址
INTR_OCW2
EQU
0A0H
;INTR 对应 PC 机内部 8259 的 OCW2 地
INTR_IM EQU
PCI_INTCSR EQU
0F7H
0DF38H
;INTR 对应的中断屏蔽字
;PCI 卡中断控制寄存器地址
;*****************************************************************
STACK1 SEGMENT
DW
STACK1 ENDS
STACK
256 DUP(?)
DATA SEGMENT
MES DB
CS_BAK DW
IP_BAK DW
IM_BAK DB
DATA ENDS
量
'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
?
?
;保存 INTR 原中断处理程序入口段地址的变量
;保存 INTR 原中断处理程序入口偏移地址的变
?
;保存 INTR 原中断屏蔽字的变量
CODE
SEGMENT
ASSUME
CS:CODE,DS:DATA
START: MOV
MOV
MOV
MOV
INT
CLI
AX,DATA
DS,AX
DX,OFFSET MES
AH,09H
21H
;显示退出提示
MOV
SUB
IN
MOV
MOV
DX,PCI_INTCSR
DX,19H
AL,DX
DX,PCI_INTCSR
AX,1F00H
;初始化 PCI 卡中断控制寄存器
;向 PCI_INTCSR 中写入 003F1F00H
5
OUT
ADD
MOV
OUT
MOV
MOV
MOV
MOV
MOV
MOV
MOV
ADD
MOV
MOV
MOV
MOV
DX,AX
DX,2
AX,003FH
DX,AX
;替换 INTR 的中断矢量
AX,0000H
ES,AX
DI,INTR_IVADD
AX,ES:[DI]
IP_BAK,AX
AX,OFFSET MYISR
ES:[DI],AX ;设置当前中断处理程序入口偏移地址
;保存 INTR 原中断处理程序入口偏移地址
DI,2
AX,ES:[DI]
CS_BAK,AX
AX,SEG MYISR
ES:[DI],AX ;设置当前中断处理程序入口段地址
;保存 INTR 原中断处理程序入口段地址
MOV
DX,INTR_OCW1
;设置中断屏蔽寄存器,打开 INTR 的屏
蔽位
IN
MOV
AND
OUT
AL,DX
IM_BAK,AL
AL,INTR_IM
DX,AL
;保存 INTR 原中断屏蔽字
STI
WAIT1: MOV
INT
JZ
QUIT: CLI
MOV
MOV
OUT
MOV
MOV
MOV
MOV
MOV
ADD
MOV
AH,1
16H
WAIT1
;判断是否有按键按下
;无按键则跳回继续等待,有则退出
DX,PCI_INTCSR
AX,0000H
DX,AX
;恢复 PCI 卡中断控制寄存器
;恢复 INTR 原中断矢量
AX,0000H
ES,AX
DI,INTR_IVADD
AX,IP_BAK
ES:[DI],AX
DI,2
AX,CS_BAK
6
;恢复 INTR 原中断处理程序入口偏移地址
;恢复 INTR 原中断处理程序入口段地址
字
MOV
MOV
MOV
OUT
STI
MOV
INT
MYISR PROC
MOV
MOV
INT
MOV
INT
OVER: MOV
SUB
IN
MOV
ADD
MOV
OUT
ES:[DI],AX
DX,INTR_OCW1
;恢复 INTR 原中断屏蔽寄存器的屏蔽
AL,IM_BAK
DX,AL
AX,4C00H
21H
;返回到 DOS
;中断处理程序 MYISR
NEAR
AL,35H
AH,0EH
AL,20H
10H
10H
DX,PCI_INTCSR
DX,19H
AL,DX
DX,PCI_INTCSR
DX,2
AX,003FH
DX,AX
;清 PCI 卡中断控制寄存器标志位
MOV
DX,INTR_OCW2
;向 PC 机内部 8259 发送中断结束
命令
MOV
OUT
MOV
OUT
IRET
MYISR ENDP
CODE
ENDS
END
AL,20H
DX,AL
AL,20H
20H,AL
START
7
实验 2 的参考程序如下:
;****************根据查看端口资源修改下列符号值*******************
IOY0 EQU
0D800H
;片选 IOY0 对应的端口始地址
;*****************************************************************
MY8259_ICW1 EQU
MY8259_ICW2 EQU
MY8259_ICW3 EQU
MY8259_ICW4 EQU
MY8259_OCW1 EQU
MY8259_OCW2 EQU
MY8259_OCW3 EQU
;实验系统中 8259 的 ICW1 端口地址
;实验系统中 8259 的 ICW2 端口地址
;实验系统中 8259 的 ICW3 端口地址
;实验系统中 8259 的 ICW4 端口地址
;实验系统中 8259 的 OCW1 端口地址
;实验系统中 8259 的 OCW2 端口地址
;实验系统中 8259 的 OCW3 端口地址
IOY0+00H
IOY0+04H
IOY0+04H
IOY0+04H
IOY0+04H
IOY0+00H
IOY0+00H
STACK1 SEGMENT
DW
STACK1 ENDS
STACK
256 DUP(?)
CODE
SEGMENT
ASSUME
CS:CODE
START: MOV
的 ICW1
DX,MY8259_ICW1
;初始化实验系统中 8259
AL,13H
DX,AL
;边沿触发、单片 8259、需要 ICW4
DX,MY8259_ICW2
;初始化实验系统中 8259
AL,08H
DX,AL
DX,MY8259_ICW4
;初始化实验系统中 8259
AL,01H
DX,AL
;非自动结束 EOI
DX,MY8259_OCW1
;初始化实验系统中 8259
AL,0FCH
DX,AL
AH,1
16H
QUIT
;打开 IR0 和 IR1 的屏蔽位
;判断是否有按键按下
;有按键则退出
8
的 ICW2
的 ICW4
的 OCW1
MOV
OUT
MOV
MOV
OUT
MOV
MOV
OUT
MOV
MOV
OUT
QUERY: MOV
INT
JNZ