实验二、中断优先级控制及中断保护实验

上传人:第*** 文档编号:34207824 上传时间:2018-02-21 格式:DOC 页数:6 大小:694.50KB
返回 下载 相关 举报
实验二、中断优先级控制及中断保护实验_第1页
第1页 / 共6页
实验二、中断优先级控制及中断保护实验_第2页
第2页 / 共6页
实验二、中断优先级控制及中断保护实验_第3页
第3页 / 共6页
实验二、中断优先级控制及中断保护实验_第4页
第4页 / 共6页
实验二、中断优先级控制及中断保护实验_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《实验二、中断优先级控制及中断保护实验》由会员分享,可在线阅读,更多相关《实验二、中断优先级控制及中断保护实验(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 中断结构 当中断发生后,程序将跳至对应中断入口地址去

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

4、行中断子程序。 (3)0BH(计时/计数器 0 中断):当 CPU 接受计时计数器 0 中断置位而产生中断要求时,会跳至地址 0BH 处去执行中断子程序。 (4)13H( 外部中断 1):当 INTl 引脚由高电位变至低电位时,CPU 会接受外部中断 1,并跳至地址 13H 处去执行中断子程序。 (5)1BH(计时计数器 1 中断 ):当 CPU 接受计时计数器 1 中断置位而产生中断要求时,会跳至地址 1BH 刻去执行中断子程序。 (6)23H( 串行中断 1):当串行端口传送数据或接收数据完毕时, CPU 会接受串行中断,并跳至地址 23H 处去执行中断子程序。 (7)2BH(计时计数器

5、2 中断 ):当 CPU 接受计时计数器 2 产生中断要求时,会跳至地址 2BH 处去执行中断子程序。此中断仅 8052 系列才有。 2中断使能位 8051 针对中断提供两层使能,第一层为 EA 全局使能控制,第二层为分别控制EX0,ET0 、EXl、ETl、ES、ET2。当 8051 在初始状态时,寄存器的各个中断使能位都预设为“0”,即所有中断都禁止,故欲允许中断时,应先使能相对应的中断。当中断产生后,此中断状态会记录于定时器计数器控制寄存器(TimerCounterControlRigister ,TCON) 的中断请求标志(InterruptRequest flag)中,当标志被设立,

6、表示中断已发生。由图 1 可知,当外部中断或定时器 0、定时器 1 中断发生时,CPU 都可以判别是哪种中断。因此当这四个中断发生时,中断服务例程被执行后,CPU 会主动清除中断请求标志,对于其他的中断,由于 CPU 无法判别,因此中断请求标志需由程序指令来清除。另外,在 TCON 中尚有两个位称为中断型式控制位(Wype control bit),经由这两个位的设定,可以边择外部中断为负边缘触发或低电平触发。欲设定中断使能与否,必须规划位于特殊功能寄存器中的中断使能寄存器IE(Interrupt Enable Register),其位于地址 A8H,是一个可位寻址的寄存器。 3中断保护 由于

7、各个中断执行的起始地址间仅有 8 个 Bytes,因此欲在此空间内完成中断服务例程是有困难的。通常中断服务例程是置于主程序后面,而在中断向量地址只书写跳跃指令,跳至相对应中断服务例程去执行。当执行新的中断服务例程时,注意不可以破坏旧有的数据和状态,因此在编写时还要保存各个寄存器的数据。通常会被更改的数据(如ACC、PSW 等),可以利用堆栈在执行中断服务例程之前就将其 PUSH 起来,待执行结束后再将相关寄存器 POP 即可。另外,因为 8051 可任意选择四个寄存器库中的一组寄存器,所以利用选择不同寄存器库的方式亦可达到数据保存的目的。 4中断优先级 8051 对于各种中断优先权采用双层结构

8、,首先对于优先权可由中断优先权寄存器(Interrupt Priority IP)设定该中断为高优先权或低优先权,高优先权可以中断低优先权,但是当优先权相同时(都为高优先权或低优先权 ),则由内部的轮询顺序决定哪一个中断被接受,轮询次序如图 1 所示。实验原理图六、实验步骤 ; 中断优先级控制及中断保护实验 ;注意: J14 跳到 8LED ; J15 跳到 8LED ; J5 跳到 1*4 ; SW1 上的开关 1 打开 ; 按 B 键控制 INT0;按 F 键控制 INT1 ORG 0000H AJMP MAIN ;跳至主程序。 ORG 03H ;外部中断 0 中断向量地址。 AJMP I

9、NT0_SUB ORG 13H ;外部中断 1 中断向量地址。 AJMP INT1_SUB ORG 0030H MAIN: ;使能 INT0,INTl 。 MOV IE,#10000101B ;使能 INT0,INTl MOV TCON,#00000101B ;设 INT0、INTl 负缘触发。 MOV IP,#01H ; 中断 0 优先 MOV SP,#30H ;将堆栈移至 30H 。 START: MOV P1,#0FEH ;(注意 16 进制数 A-F 前要加 0) MOV A,P1 ACALL DELAY200MS ;调用延时子程序 , 以使观察 LED 的状态 LOOP1: RR A

10、 MOV P1,A ACALL DELAY200MS ;调用延时子程序 , 以使观察 LED 的状态 .ACALL DELAY200MS ; ACALL DELAY200MS AJMP LOOP1 DELAY2S: ;延迟 2S 子程序 MOV R2,#0AH DEL_1: ACALL DELAY200MS DJNZ R2,DEL_1 RET DELAY200MS: ;延迟 200ms 子程序 MOV R1,#014H DEL_0: ACALL DELAY10ms DJNZ R1,DEL_0 RET DELAY10ms: ;延迟 10ms 子程序 MOV R5,#0BH DEL_2: MOV

11、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.990234375ms INT0_SUB: ;INT0 中断子程序。 CLR EA ;清除中断 ACALL DELAY10ms ;延迟 10ms JNB INT0,HAVEKEY0 ;确认有键 SETB EA ;开启全局中断 RETI HAVEKEY0: PUSH PSW ;保

12、存寄存器数据。 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,#1111011BACALL DELAY2SPOP ACCPOP PSWRETI END 七实验中遇到的问题1.在一开始忘记改变另一组寄存器,导致计数时出错。2.拨码开关一开始没打开3.中断结束的时候忘记出 psw 和 acc 寄存器的值,导致后面的程序出错4. 中断的优先级如下外部中断 0 高 定时器/计数器 0 外部中断 1 定时器/计数器 1 串行口中断 低

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

当前位置:首页 > 办公文档 > 解决方案

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