中断优先级控制及中断保护实验.doc

上传人:博****1 文档编号:543457681 上传时间:2022-12-26 格式:DOC 页数:6 大小:696.50KB
返回 下载 相关 举报
中断优先级控制及中断保护实验.doc_第1页
第1页 / 共6页
中断优先级控制及中断保护实验.doc_第2页
第2页 / 共6页
中断优先级控制及中断保护实验.doc_第3页
第3页 / 共6页
中断优先级控制及中断保护实验.doc_第4页
第4页 / 共6页
中断优先级控制及中断保护实验.doc_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《中断优先级控制及中断保护实验.doc》由会员分享,可在线阅读,更多相关《中断优先级控制及中断保护实验.doc(6页珍藏版)》请在金锄头文库上搜索。

1、实验二、中断优先级控制及中断保护实验 自动化1002 吴会欢 201019100227一、实验目的 1、掌握单片机中断机制;2、熟悉中断的应用和编程。二、实验设备 统一电子开发平台。 三、实验要求 USB线连接开发板,电源开关S1打到usb位置; J5跳针跳到1*4位置,按键B对应INT0(P3.2),按键F连接INT1(P3.3),在平时状态下,发光二极管行以600ms的时间间隔,依次点亮。B键按下时INT0中断处理程序点亮LED4对应的发光管2秒钟,其他发光管熄灭;F键按下时LED5对应发光管点亮2秒,其他发光管熄灭。四、实验原理 通常一个微处理器读取外围设备(如键盘等)的输入信息的方法有

2、轮询(Polling)及中断(Interrupt)两种。轮询的方法是CPU依照某种既定法则,依序询问每一外围设备IO是否需要服务,此种方法CPU需花费一些时间来做询问服务,当IO设备增加时,询问服务时间也相对增加,因此势必浪费许多CPU时间,降低整体运行的效率。使用中断是一个较好的解决方法。使用中断使系统对外部设备的请求响应更加灵敏,并且不需要占用CPU的时间进行轮询。但是,当使用中断,特别是有多个中断嵌套时要特别注意内存单元内容的保护。 4.1 8051中断结构 当中断发生后,程序将跳至对应中断入口地址去执行中断子程序,或称中断服务例程(Interrupt Service Routine),

3、这些特殊的地址称为中断向量,例如当80C51外部中断INTl发生时,会暂停主程序的执行,跳至地址0013H去执行中断服务例程,直到RETI指令后,才返回主程序继续执行。MCS-51系列的程序内存中有7个矢量地址,叙述如下: (1)00H复位:当第9脚RESET为高电平,CPU会跳至地址00H处开始执行程序,亦即程序一定要从地址00H开始写起。 (2)03H(外部中断0):当INT0引脚由高电位变至低电位时,CPU会接受外部中断0,并跳至地址03H处去执行中断子程序。 (3)0BH(计时/计数器0中断):当CPU接受计时计数器0中断置位而产生中断要求时,会跳至地址0BH处去执行中断子程序。 (4

4、)13H(外部中断1):当INTl引脚由高电位变至低电位时,CPU会接受外部中断1,并跳至地址13H处去执行中断子程序。 (5)1BH(计时计数器1中断):当CPU接受计时计数器1中断置位而产生中断要求时,会跳至地址1BH刻去执行中断子程序。 (6)23H(串行中断1):当串行端口传送数据或接收数据完毕时,CPU会接受串行中断,并跳至地址23H处去执行中断子程序。 (7)2BH(计时计数器2中断):当CPU接受计时计数器2产生中断要求时,会跳至地址2BH处去执行中断子程序。此中断仅8052系列才有。 2中断使能位 8051针对中断提供两层使能,第一层为EA全局使能控制,第二层为分别控制EX0,

5、ET0、EXl、ETl、ES、ET2。当8051在初始状态时,寄存器的各个中断使能位都预设为“0”,即所有中断都禁止,故欲允许中断时,应先使能相对应的中断。当中断产生后,此中断状态会记录于定时器计数器控制寄存器(TimerCounterControlRigister,TCON)的中断请求标志(InterruptRequest flag)中,当标志被设立,表示中断已发生。由图 1可知,当外部中断或定时器0、定时器1中断发生时,CPU都可以判别是哪种中断。因此当这四个中断发生时,中断服务例程被执行后,CPU会主动清除中断请求标志,对于其他的中断,由于CPU无法判别,因此中断请求标志需由程序指令来清

6、除。另外,在TCON中尚有两个位称为中断型式控制位(Wype control bit),经由这两个位的设定,可以边择外部中断为负边缘触发或低电平触发。欲设定中断使能与否,必须规划位于特殊功能寄存器中的中断使能寄存器IE(Interrupt Enable Register),其位于地址A8H,是一个可位寻址的寄存器。 3中断保护 由于各个中断执行的起始地址间仅有8个Bytes,因此欲在此空间内完成中断服务例程是有困难的。通常中断服务例程是置于主程序后面,而在中断向量地址只书写跳跃指令,跳至相对应中断服务例程去执行。当执行新的中断服务例程时,注意不可以破坏旧有的数据和状态,因此在编写时还要保存各个

7、寄存器的数据。通常会被更改的数据(如ACC、PSW等),可以利用堆栈在执行中断服务例程之前就将其PUSH起来,待执行结束后再将相关寄存器POP即可。另外,因为8051可任意选择四个寄存器库中的一组寄存器,所以利用选择不同寄存器库的方式亦可达到数据保存的目的。 4中断优先级 8051 对于各种中断优先权采用双层结构,首先对于优先权可由中断优先权寄存器(Interrupt Priority IP)设定该中断为高优先权或低优先权,高优先权可以中断低优先权,但是当优先权相同时(都为高优先权或低优先权),则由内部的轮询顺序决定哪一个中断被接受,轮询次序如图1所示。五 实验原理图六、实验步骤 ; 中断优先

8、级控制及中断保护实验 ;注意: J14 跳到8LED ; J15 跳到8LED ; J5 跳到1*4 ; SW1 上的开关1 打开 ; 按B 键控制INT0;按F 键控制INT1 ORG 0000H AJMP MAIN ;跳至主程序。 ORG 03H ;外部中断0 中断向量地址。 AJMP INT0_SUB ORG 13H ;外部中断1 中断向量地址。 AJMP INT1_SUB ORG 0030H MAIN: ;使能INT0,INTl 。 MOV IE,#10000101B ;使能INT0,INTl MOV TCON,#00000101B ;设INT0、INTl 负缘触发。 MOV IP,#

9、01H ; 中断0 优先 MOV SP,#30H ;将堆栈移至30H 。 START: MOV P1,#0FEH ;(注意16 进制数A-F 前要加0) MOV A,P1 ACALL DELAY200MS ;调用延时子程序, 以使观察LED 的状态 LOOP1: RR A MOV P1,A ACALL DELAY200MS ;调用延时子程序, 以使观察LED 的状态 .ACALL DELAY200MS ; ACALL DELAY200MS AJMP LOOP1 DELAY2S: ;延迟2S 子程序 MOV R2,#0AH DEL_1: ACALL DELAY200MS DJNZ R2,DEL_

10、1 RET DELAY200MS: ;延迟200ms 子程序 MOV R1,#014H DEL_0: ACALL DELAY10ms DJNZ R1,DEL_0 RET DELAY10ms: ;延迟10ms 子程序 MOV R5,#0BH DEL_2: MOV R3,#0EFH DEL_3: MOV R4,#09H DJNZ R4,$ DJNZ R3,DEL_3 DJNZ R5,DEL_2 RET ;DELAY10MS 程序占用时钟周期为:2+(2+4*9+4)*0XEF+4*11=110484 ;一个时钟周期是:T=1/11059200s,故延迟时间为:114084*T=9.99023437

11、5ms INT0_SUB: ;INT0 中断子程序。 CLR EA ;清除中断 ACALL DELAY10ms ;延迟10ms JNB INT0,HAVEKEY0 ;确认有键 SETB EA ;开启全局中断 RETI HAVEKEY0: PUSH PSW ;保存寄存器数据。 PUSH ACC SETB RS0 ;选择寄存器组1 CLR RS1 ;选择寄存器组1 SETB EA ;开启全局中断 MOV P1,#0FEH ACALL DELAY2S POP ACC ; 出保存寄存器数据。 POP PSW RETI INT1_SUB: ;1NT1 中断子程序。 CLR EA ;清除中断 ACALL DELAY10MS ;延迟 JNB INT1,HAVEKEY1 ;确认有键 SETB EA ;开启全局中断 RETI HAVEKEY1: ; 以下请仿照中断INT0 编写程序完成如下步骤: ;1、保存PSW 、ACC 寄存器数据 ;2、选择另一组寄存器组 ;3、点亮LED5 二极管 ;4、延迟2 秒钟 ;5、 出PSW 、ACC 寄存器数据 PUSH PSWPUSH ACCSETB RS0SETB RS1SETB EAMOV P1,#11

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号