中断优先级控制及中断保护实验报告.docx
《中断优先级控制及中断保护实验报告.docx》由会员分享,可在线阅读,更多相关《中断优先级控制及中断保护实验报告.docx(11页珍藏版)》请在冰点文库上搜索。
中断优先级控制及中断保护
学生:
何绍金
学号:
201203870408
专业班级:
自动化1202
指导老师:
杨东勇
2014年12月
一、实验目的
1、掌握单片机中断机制。
2、熟悉中断的应用和编程。
二、实验设备
统一电子开发平台。
三、实验要求
连接单片机最小系统和发光二极管阵列的电路并编写程序,学习单片机中断机制,及中断优先级和中断保护的方法,使用独立式按键B连接INT0(P3.2),按键F连接INT1(P3.3),在平时状态下,发光二极管行以200ms的时间间隔,依次点亮。
B键按下时INT0中断处理程序点亮P0.0对应的发光管2秒钟,其他发光管熄灭;F键按下时P0.1对应发光管点亮2秒,其他发光管熄灭。
四、实验原理
实验板8051芯片有四级中断优先级的14个中断源。
通过几个寄存器来设置4级中断。
通过IE,IP,IPH,AUXIE,AUXIP,AUXIPH,XICON和TCON。
1.中断源
表1列出了所有的中断源,使能位被允许,中断请求时硬件会产生一个中断请求标志。
当然,总中断使能位EA(IE寄存器)必须使能。
中断请求位能由软件置1或清零,这和硬件置1或清零结果相同。
同理,中断可以由软件产生或取消中断向量地址表示中断服务程序的入口地址。
2.与中断相关的寄存器
下面是中断过程中的相关特殊功能寄存器IE(地址A8H,中断使能寄存器,复位值=0x00,0000B)
EA:
总中断使能位.EA=0,禁止所有中断.EA=1,使能所有中断
ET2:
定时器2中断使能.
ES:
串口中断使能
ET1:
定时器1中断使能
EX1:
外部中断1使能.
ET0:
定时器0中断使能EX0:
外部中断0使能.
IP(地址B8H,中断优先级寄存器,复位值=xx00,0000B)
PT2:
定时器2中断优先级位.
PS:
串口中断优先级位.
PT1:
定时器1中断优先级位.
PX1:
外部中断1优先级位.
PT0:
定时器0中断优先级位.
PX0:
外部中断0优先级位.
IPH(地址B7H,中断优先级高位寄存器,复位值=0000,0000B)
PX3H:
外部中断3优先级位,H.
PX2H:
外部中断2优先级位,H.
PT2H:
定时器2中断优先级位,H.
PSH:
串口中断优先级位,H.
PT1H:
定时器1中断优先级位,H.
PX1H:
外部中断1优先级位,H.
PT0H:
定时器0中断优先级位,H.
PX0H:
外部中断0优先级位,H.
AUXIE(地址ADH,辅助中断使能寄存器,复位值=xx00,0000B)
EKB:
键盘中断使能位.
ES2:
UART2中断使能位.
EBD:
欠压检测中断使能位.
EPCA:
PCA中断使能位.
EADC:
ADC中断使能位.
ESPI:
SPI中断使能位.
AUXIP(地址AEH,辅助中断优先级寄存器,复位值=xx00,0000B)
PKB:
键盘中断优先级位.
PS2:
UART2中断优先级位.
PBD:
欠压检测中断优先级位.
PPCA:
PCA中断优先级位.
PADC:
ADC中断优先级位.
PSPI:
SPI中断优先级位.
AUXIPH(地址AFH,辅助中断优先级高位寄存器,复位值=xx00,0000B)
PKBH:
键盘中断优先级位,H
PS2H:
UART2中断优先级位,H
PBDH:
欠压监测中断优先级位,H.
PPCAH:
PCA中断1优先级位,H.
PADCH:
ADC中断优先级位,H.
PSPIH:
SPI中断0优先级位,H.
XICON(地址C0H,外部中断控制寄存器,复位值=0000,0000B)
PX3:
外部中断3优先级位.
EX3:
外部中断3使能位.
IE3:
外部中断3中断标志.
IT3:
外部中断3类型控制位.1:
边沿触发;0:
电平触发.
PX2:
外部中断2优先级位.
EX2:
外部中断2使能位.
IE2:
外部中断2中断标志.
IT2:
外部中断2类型控制位.1:
边沿触发;0:
电平触发.
TCON(地址88H,定时/计数器控制寄存器,复位值=0000,0000B)
IE1:
外部中断1请求标志.外部中断1由边沿或电平触发(由IT1设置)硬件置标志.
IT1:
外部中断1类型控制位.软件选择下降沿/低电平触发外部中断1.
IE0:
外部中断0请求标志.外部中断0由边沿或电平触发(由IT0设置)硬件置标志.
IT0:
外部中断0类型控制位.软件选择下降沿/低电平触发外部中断0.
3.中断使能
通过设置寄存器IE,AUXIE和XICON能对每个中断进行使能和禁止操作.需注意IE中有个总中断允许位EA.EA置‘1’所有中断的使能和禁止由单独的设置位决定.EA被清‘0’,所有中断被禁止.
4.中断优先级
中断优先级设置和80C51相同,除了有四级中断优先级比80C51多两级.优先级位(参见表19-1)决定每个中断的优先级.
表2,外部中断0中断优先级设置,通过不同的设置组合决定中断优先级.
表2.外部中断0的四级优先级
5.中断响应
每个机器周期都会采样中断标志位.如果没有下列阻止条件.前一个指令周期中产生中断标志位置位,接下来的指令周期中将以LCALL调用中断服务程序,下列几种情况将LCALL指令锁定:
1.另一个高优先级的中断正在处理.
2.当前机器周期不是正在执行的指令的最后一个机器周期.
3.正在执行指令RETI或正在写和中断相关的寄存器(IE或IP寄存器).
6.外部中断
外部中断源包括/INT0,/INT1,/INT2和/INT3,外部中断能被任意的低电平触发或下降沿触发,通过设置寄存器TCON和XICON中的位IT0,IT1,IT2和IT3.ITx=0,INTx管脚被拉低将触发中断。
ITx=1,INTx管脚上的下降沿将触发中断。
中断被触发后将置位TCON、XICON中的IE0、IE1、IE2、IE3。
如果中断被激活这些标志在进入中断服务程序后被硬件清除。
如果中断是电平触发,外中断源必须有效,直到中断被响应,在执行完中断服务程序前,此有效中断必须被清除。
7.单步运行
80C51的中断结构允许使用很少的软件开销来实现单步运行.如前所述,在正在执行相同或更高优先级的中断的时候中断请求是不会被响应的,直到运行完当前中断服务程序后至少再执行一条以上的指令.因而,如果一个中断服务程序正在执行,这不能被其他中断重入,直到当前中断服程序被执行完后至少再执行一条以上的指令.下面是一个电平触发的外部中断(e.g.,INT0)的使用实例.代码如下:
JNBP3.2,$;等待直到INT0变高JBP3.2,$;等待直到INT0变低RETI;服务序结束并执行一条指令当前INT0引脚(P3.2)保持低状态,CPU进入外部中断0服务程序等待INT0的引脚上有脉冲产生(从低到高再到低).然后执行RETI指令,跳回被中断的程序执行一条指令,然后再次进入外部中断0中断服务程序等待引脚P3.2上再次产生一个脉冲.这样就是在引脚P3.2上每产生一个脉冲程序步进一条指令,这样就实现了单步操
8.原理图
五、实验思考题
1.分析51单片机的中断运行的机制,它具有那些中断,对应的中断矢量地址是什么?
中断使能位是什么?
答:
外部中断0:
入口:
0003H定时器0:
入口:
000BH
外中断1:
入口:
0013H定时器1:
入口:
001BH
串口中断:
入口:
0023H
2.各中断源的硬件优先级的顺序是怎样的?
哪个寄存器能够控制单片机中断源的优先级怎样控制?
答:
8051 对于各种中断优先权采用双层结构,首先对于优先权可由中断优先权寄存器、设定该中断为高优先权或低优先权,高优先权可以中断低优先权,但是当优先权相同时(都为高优先权或低优先权),则由内部的轮询顺序决定哪一个中断被接受
附:
实验源代码:
;********************ASM汇编实验*******************
; 工程:
;晶振:
11.0592M
;*************************************************
//#include"REG_MPC82G516.INC"/*如果用到MPC82G516的特殊寄存器请包含这个头文件*/
ORG0000H
AJMPMAIN;跳至主程序。
ORG03H;外部中断0中断向量地址。
AJMPINT0_SUB
ORG13H;外部中断1中断向量地址。
AJMPINT1_SUB
ORG0030H
MAIN:
;使能INT0,INTl。
MOVIE,#10000101B;使能INT0,INTl
MOVTCON,#00000101B;设INT0、INTl负缘触发。
MOVIP,#01H;中断0优先
MOVSP,#30H;将堆栈移至30H。
NOP
START:
MOVP1,#0FEH;(注意16进制数A--F前要加0)
MOVA,P1
ACALLDELAY200MS;调用延时子程序,以使观察LED的状态
LOOP1:
RRA
MOVP1,A
ACALLDELAY200MS;调用延时子程序,以使观察LED的状态
ACALLDELAY200MS;
ACALLDELAY200MS
AJMPLOOP1
DELAY2S:
MOVR2,#0AH
DEL_1:
ACALLDELAY200MS
DJNZR2,DEL_1
RET
DELAY200MS:
;延迟200ms子程序。
MOVR1,#014H
DEL_0:
ACALLDELAY10ms
DJNZR1,DEL_0
RET
DELAY10ms:
;延迟10ms子程序。
MOVR5,#0BH
DEL_2:
MOVR3,#0EFH
DEL_3:
MOVR4,#09H
DJNZR4,$
DJNZR3,DEL_3
DJNZR5,DEL_2
RET
;DELAY10MS程序占用时钟周期为:
[2+(2+4*9+4)*0XEF+4]*11=110484
;一个时钟周期是:
T=1/11059200s,故延迟时间为:
114084*T=9.990234375ms
INT0_SUB:
;1NT0中断子程序。
CLREA;清除中断
ACALLDELAY10ms;延迟10ms
JNBINT0,HAVEKEY0;确认有键
SETBEA;开启全局中断
RETI
HAVEKEY0:
PUSHPSW;保存寄存器数据。
PUSHACC
SETBRS0;选择寄存器库1
CLRRS1;选择寄存器库1
SETBEA;开启全局中断
MOVP1,#0FEH
ACALLDELAY2S
POPACC;取出保存寄存器数据。
POPPSW
RETI
INT1_SUB:
;1NT1中断子程序。
CLREA;清除中断
ACALLDELAY10MS;延迟
JNBINT1,HAVEKEY1;确认有键
SETBEA;开启全局中断
RETI
HAVEKEY1:
PUSHPSW;保存寄存器数据。
PUSHACC
SETBRS1;选择寄存器库1
CLRRS0;选择寄存器库1
SETBEA;开启全局中断
MOVP1,#0FDH
ACALLDELAY2S
POPACC;取出保存寄存器数据。
POPPSW
RETI
END