8259中断实验.docx
《8259中断实验.docx》由会员分享,可在线阅读,更多相关《8259中断实验.docx(18页珍藏版)》请在冰豆网上搜索。
8259中断实验
XX学院
实验报告
实验名称
姓名
学号
班级
教师
日期
一、实验内容与要求
1.1实验内容
本次实验分为如下3个子实验:
(1)单中断请求实验:
利用系统总线上中断请求信号MIR7,设计一个单一中断请求实验;
(2)双中断优先级实验:
利用系统总线上中断请求信号MIR6和MIR7,设计一个双中断优先级应用实验,观察8253对中断优先级的控制;
(3)级联中断实验:
利用系统总线上中断请求信号MIR7和SIR1,设计一个级联中断应用实验。
1.2实验要求
本次实验中三个子实验的实验要求如下:
(1)单中断请求实验:
单脉冲KK1+与主片8259的IR7相连。
每按KK1+,进入一次中断,输出7;
(2)双中断优先级实验:
单脉冲KK1+连主片8259的IR7,KK2+连其IR6。
每当KK1+按下时显示“7”,每当KK2+按下显示“6”;
(3)级联中断实验:
单脉冲KK1+连主片8259的IR7,KK2+连从片的IR1。
每当KK1+按下时显示“M7”,每当KK2+按下显示“S1”。
二、实验原理与硬件连线
2.1实验原理
(1)中断控制器8259简介
在Intel386EX芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器,一个为主控制器,一个为从控制器。
该中断控制单元就功能而言与工业上标准的82C59A是一致的,操作方法也相同。
从片的INT连接到主片的IR2信号上构成两片8259的级联。
在TD-PITE实验系统中,将主控制器的IR6、IR7以及从控制器的IR1开放出来供实验使用,主片8259的IR4供系统串口使用。
8259的内部连接及外部管脚引出如图1-1:
图1-18259内部连续及外部管脚引出图
表1-1列出了中断控制单元的寄存器相关信息。
表1-1ICU寄存器列表
寄存器
口地址
功能描述
ICW1(主)
ICW1(从)
(只写)
0020H
00A0H
初始化命令字1:
决定中断请求信号为电平触发还是边沿触发。
ICW2(主)
ICW2(从)
(只写)
0021H
00A1H
初始化命令字2:
包含了8259的基址中断向量号,基址中断向量是IR0的向量号,基址加1就是IR1的向量号,依此类推。
ICW3(主)
(只写)
0021H
初始化命令字3:
用于识别从8259设备连接到主控制器的IR信号,内部的从8259连接到主8259的IR2信号上。
ICW3(从)
(只写)
00A1H
初始化命令字3:
表明内部从控制器级联到主片的IR2信号上。
ICW4(主)
ICW4(从)
(只写)
0021H
00A1H
初始化命令字4:
选择特殊全嵌套或全嵌套模式,使能中断自动结束方式。
OCW1(主)
OCW1(从)
(读/写)
0021H
00A1H
操作命令字1:
中断屏蔽操作寄存器,可屏蔽相应的中断信号。
OCW2(主)
OCW2(从)
(只写)
0020H
00A0H
操作命令字2:
改变中断优先级和发送中断结束命令。
OCW3(主)
OCW3(从)
(只写)
0020H
00A0H
操作命令字3:
使能特殊屏蔽方式,设置中断查询方式,允许读出中断请求寄存器和当前中断服务寄存器。
IRR(主)
IRR(从)
(只读)
0020H
00A0H
中断请求:
指出挂起的中断请求。
ISR(主)
ISR(从)
(只读)
0020H
00A0H
当前中断服务:
指出当前正在被服务的中断请求。
POLL(主)
POLL(从)
(只读)
0020H
0021H
00A0H
00A1H
查询状态字:
表明连接到8259上的设备是否需要服务,如果有中断请求,该字表明当前优先级最高的中断请求。
初始化命令字1寄存器(ICW1)说明见图1-2所示。
图1-2初始化命令字1寄存器
初始化命令字2寄存器(ICW2)说明见图1-3所示。
图1-3初始化命令字2寄存器
初始化命令字3寄存器(ICW3)说明,主片见图1-4,从片见图1-5。
图1-4主片初始化命令字3寄存器
图1-5从片初始化命令字3寄存器
初始化命令字4寄存器(ICW4)说明见图1-6。
图1-6初始化命令字4寄存器
操作命令字1寄存器(OCW1)说明见图1-7。
图1-7操作命令字1寄存器
操作命令字2寄存器(OCW2)说明如图1-8所示。
图1-8操作命令字2寄存器
操作命令字3寄存器(OCW3)说明如图1-9所示。
图1-9操作命令字3寄存器
查询状态字(POLL)说明如图1-10所示。
图1-10程序状态字寄存器
在对8259进行编程时,首先必须进行初始化。
一般先使用CLI指令将所有的可屏蔽中断禁止,然后写入初始化命令字。
8259有一个状态机控制对寄存器的访问,不正确的初始化顺序会造成异常初始化。
在初始化主片8259时,写入初始化命令字的顺序是:
ICW1、ICW2、ICW3、ICW4,初始化从片8259的顺序与初始化主片8259的顺序是相同的。
系统启动时,主片8259已被初始化,且4号中断源(IR4)提供给与PC联机的串口通信使用,其它中断源被屏蔽。
中断矢量地址与中断号之间的关系如表1-2所示:
表1-2中断矢量地址与中断号关系表
主片中断序号
0
1
2
3
4
5
6
7
功能调用
08H
09H
0AH
0BH
0CH
0DH
0EH
0FH
矢量地址
20H~23H
24H~27H
28H~2BH
2CH~2FH
30H~33H
34H~37H
38H~3BH
3CH~3FH
说明
未开放
未开放
未开放
未开放
串口
未开放
可用
可用
从片中断序号
0
1
2
3
4
5
6
7
功能调用
30H
31H
32H
33H
34H
35H
36H
37H
矢量地址
C0H~C3H
C4H~C7H
C8H~CBH
CCH~CFH
D0H~D3H
D4H~D7H
D8H~DBH
DCH~DFH
说明
未开放
可用
未开放
未开放
未开放
未开放
未开放
未开放
2.2硬件连线
(1)单中断实验:
实验接线图如图1-11所示,单次脉冲输出KK1+与主片8259的IR7相连(与实验平台中的MIR7相连),每按动一次单次脉冲,产生一次外部中断,在显示屏上输出一个字符“7”;
图1-11单中断实验硬件连线图
(2)双中断优先级实验:
实验接线图如图1-12所示,KK1+和KK2+分别连接到主片8259的IR7(与实验平台MIR7相连)和IR6(与实验平台MIR6相连)上,当按一次KK1+时,显示屏上显示字符“7”,按一次KK2+时,显示字符“6”;
图1-12双中断优先级实验硬件连线图
(3)级联双中断优先级实验:
实验接线图如图1-13所示,KK1+连接到主片8259的IR7(与实验平台MIR7相连)上,KK2+连接到从片8259的IR1(与实验平台SIR1相连)上,当按一次KK1+时,显示屏上显示字符“M7”,按一次KK2+时,显示字符“S1”。
图1-13级联双中断优先级实验硬件连线图
三、设计思路、步骤和程序流程图
3.1设计思路
(1)单中断实验:
采用一片8259芯片和KK1+单次脉冲开关,首先让程序进入死循环,等待中断,每按动一次单次脉冲,产生一次外部中断,调用中断程序,在显示屏上输出一个字符“7”。
(2)双中断优先级实验:
采用一片8259芯片和KK1+与KK2+单次脉冲开关,首先让程序进入死循环,等待中断,当按一次KK1+或KK2+时,产生一次外部中断,调用对应的中断程序,在显示屏上输出对应的字符“7”和“6”。
(3)级联双中断优先级实验:
采用两片8259芯片,一片为主片,一片作为从片,以及KK1+与KK2+单次脉冲开关。
首先让程序进入死循环,等待中断,当按一次KK1+或KK2+时,产生一次外部中断,调用对应的中断程序,在显示屏上输出对应的字符串“M7”和“S1”。
3.2实验步骤
(1)单中断实验
1.按图1-11连接实验线路;
2.编写实验程序,经编译、链接无误后装入系统;
3.运行程序,重复按单次脉冲开关KK1+,显示屏会显示字符“7”,说明响应了中断。
(2)双中断优先级实验
1.按图1-12连接实验线路;
2.编写实验程序,经编译、链接无误后装入系统;
3.运行程序,重复按单次脉冲开关KK1+,显示屏会显示字符“7”,重复按单次脉冲开关KK2+,显示屏会显示字符“6”,说明响应了中断;
4.尝试先按KK1+,再快速按KK2+,观察MIR7和MIR6两个中断请求的优先级,分析实验结果。
(3)级联双中断优先级实验
1.按图1-12连接实验线路;
2.编写实验程序,经编译、链接无误后装入系统;
3.运行程序,重复按单次脉冲开关KK1+,显示屏会显示字符串“M7”,重复按单次脉冲开关KK2+,显示屏会显示字符串“S1”,说明响应了中断;
4.尝试先按KK1+,再快速按KK2+,观察MIR7和SIR1两个中断请求的优先级,分析实验结果。
3.3程序流程图
主程序流程图如图1-14:
图1-14主程序流程图
中断程序流程图如图1-15
图1-15中断程序流程图
四、程序清单与执行结果
4.1程序清单
(1)单中断实验代码
CODESEGMENT
ASSUMECS:
CODE
START:
;DOS调用写入法
CLI;关中断,防止硬件中断对程序的干扰
PUSHDS;设置中断向量
MOVAX,8
MOVDX,AX
MOVAX,OFFSETMIR7;取MIR7的偏移地址
MOVBX,003CH;中断类型号为n,BX设置为4*n
MOV[BX],AX;偏移地址放入4n,4n+1单元
MOVAX,SEGMIR7;取MIR7的段地址
MOV[BX+2],AX;偏移地址放入4n+2,4n+3单元
POPDS
MOVAL,11H;初始化ICM1
OUT20H,AL
MOVAL,08H;初始化ICM2
OUT21H,AL
MOVAL,04H;初始化ICM3
OUT21H,AL
MOVAL,01H;初始化ICM4
OUT21H,AL
MOVAL,6FH;设置OCW1,开放MIR7和IR4
OUT21H,AL
STI;开中断
WIN:
JMPWIN;等待中断
MIR7:
STI
MOVAX,0137H;显示字符7
INT10H
MOVAX,0120H;显示空格
INT10H
MOVAL,20H;中断结束命令
OUT20H,AL
IRET;中断返回
CODEENDS
ENDSTART
RET
CODEENDS
ENDSTART
(2)双中断优先级实验代码
CODESEGMENT
ASSUMECS:
CODE
START:
CLI
PUSHDS;设置中断向量
MOVAX,8
MOVDX,AX
MOVAX,OFFSETMIR7
MOVBX,003CH
MOV[BX],AX
MOVAX,SEGMIR7
MOV[BX+2],AX
MOVAX,8
MOVDX,AX
MOVAX,OFFSETMIR6
MOVBX,0038H
MOV[BX],AX
MOVAX,SEGMIR6
MOV[BX+2],AX
POPDS
MOVAL,11H;初始化ICW1
OUT20H,AL
MOVAL,08H;初始化ICW2
OUT21H,AL
MOVAL,04H;初始化ICW3
OUT21H,AL
MOVAL,01H;初始化ICW4
OUT21H,AL
MOVAL,2FH;设置OCW1,开放MIR7和SIR4
OUT21H,AL
STI
WIN:
JMPWIN;主程序循环
MIR7:
STI
MOVAX,0137H;显示字符7
INT10H
MOVAX,0120H;显示空格
INT10H
MOVAL,20H
OUT20H,AL
IRET
MIR6:
STI
MOVAX,0136H;显示字符6
INT10H
MOVAX,0120H;显示空格
INT10H
MOVAL,20H
OUT20H,AL
IRET
CODEENDS
ENDSTART
(3)级联双中断优先级实验代码
CODESEGMENT
ASSUMECS:
CODE
START:
CLI
PUSHDS;设置中断向量
MOVAX,8
MOVDX,AX
MOVAX,OFFSETMIR7
MOVBX,003CH
MOV[BX],AX
MOVAX,SEGMIR7
MOV[BX+2],AX
MOVAX,8;设置中断向量
MOVDX,AX
MOVAX,OFFSETSIR1
MOVBX,00C4H
MOV[BX],AX
MOVAX,SEGSIR1
MOV[BX+2],AX
POPDS
MOVAL,11H;初始化ICW1-ICW4
OUT20H,AL
MOVAL,08H
OUT21H,AL
MOVAL,04H
OUT21H,AL
MOVAL,01H
OUT21H,AL
MOVAL,11H;初始化ICW1-ICW4
OUT0A0H,AL
MOVAL,30H
OUT0A1H,AL
MOVAL,02H
OUT0A1H,AL
MOVAL,01H
OUT0A1H,AL
MOVAL,6BH;01101011
OUT21H,AL
MOVAL,0FDH;设置OCM1,开放MIR7和SIR1
OUT0A1H,AL
STI
WIN:
JMPWIN;主程序循环
MIR7:
STI
MOVAX,014DH;显示M
INT10H
MOVAX,0137H;显示7
INT10H
MOVAX,0120H;显示空格
INT10H
MOVAL,20H
OUT20H,AL
IRET
SIR1:
STI
MOVAX,0153H;显示S
INT10H
MOVAX,0131H;显示1
INT10H
MOVAX,0120H
INT10H;显示空格
MOVAL,20H
OUT0A0H,AL
OUT20H,AL
IRET
CODEENDS
ENDSTART
4.2执行结果
(1)单中断实验的实验结果如图1-16,每按一次KK1+,就会打印一个字符,并且输出一个空格,自定义后结果变成输出字符串‘THISISAINTER’。
图1-16单中断实验实验结果
(2)双中断优先级实验的实验结果如图1-17,两个开关按下分别对应字符‘6’与字符‘7’。
其中优先级为MIR7高于MIR6。
图1-17双中断优先级实验实验结果
(3)级联双中断优先级实验的实验结果如图1-18,两个开关按下分别显示“S1”与“M7”,优先级为MIR7高于SIR1。
图1-18级联双中断优先级实验实验结果
五、程序调试说明和实验感想
5.1调试说明
在对主从片进行初始化时,未仔细查阅8259初始化命令字。
不正确的初始化导致了异常初始化,正确方法应该是按照ICW1~ICW4顺序进行初始化。
初始化前应先使用CLI指令将所有的可屏蔽中断禁止,否则有可能出错。
中断矢量的地址应注意十六进制的换算和十进制换算不同。
5.2实验感想与收获
通过本次与实验,对8255A有了深入的了解;对8255A的内部接口和引脚有了充分的认识;对8255A的工作方式、应用编程及其典型电路的接法有了全新的掌握。
8255A有三个并行数据端口A、B、C,可工作于三种工作方式:
方式0——基本输入输出方式;方式1——选通输入输出方式;方式2——双向输入输出方式。
在这次实验中,实践了方式0和方式1在端口上的输入输出,结合书上所说,又将端口C上的高低4位独立设置为输入或输出。
纸上得来终觉浅,在对实验的实践中,实验前事先预习,实验中不断尝试,实验后总结复习,收获良多。
5.3实验特色
我在第一个实验中尝试了各种字符以及字符串的输出。
5.4展望
如果有充裕的时间,还可以改变8255方式1输出LED流水效果为每按一次KK1+依次亮起1个LED灯,直至16个LED灯变亮。