实验二、中断实验――中断优先级控制及中断保护一、实验目的1、掌握单片机中断机制。
2、熟悉中断的应用和编程。
二、实验设备1、 仿真器;2、 单片机最小系统;3、 发光二极管阵列显示模块;4、 独立式键盘模块。
三、实验要求连接单片机最小系统和发光二极管阵列的电路并编写程序,学习单片机中断机制,及中断优先级和中断保护的方法:使用独立式按键1连接0INT (P3.2),按键2连接1INT (P3.3),在平时状态下,发光二极管行以200ms 的时间间隔,依次点亮。
1键按下时0INT 中断处理程序点亮P0.0对应的发光管2秒钟,其他发光管熄灭;2键按下时P0.1对应发光管点亮2秒,其他发光管熄灭。
四、实验原理通常一个微处理器读取外围设备(如键盘等)的输入信息的方法有轮询(Polling)及中断(Interrupt)两种。
轮询的方法是CPU 依照某种既定法则,依序询问每一外围设备I /O 是否需要服务,此种方法CPU 需花费一些时间来做询问服务,当I /O 设备增加时,询问服务时间也相对增加,势必浪费许多CPU 时间,降低整体运行的效率。
使用中断是一个较好的解决方法。
使用中断使系统对外部设备的请求响应更加灵敏,并且不需要占用CPU 的时间进行轮询。
但是,当使用中断,特别是有多个中断嵌套时要特别注意内存单元的保护。
1 80C51中断结构当中断发生后,程序将跳至对应中断入口地址去执行中断子程序,或称中断服务程序(Interrupt Service Routine),这些特殊的地址称为中断向量,例如当80C51外部中断INTl 发生时,会暂停主程序的执行,跳至地址0013H 去执行中断服务程序,直到RETI 指令后,才返回主程序继续执行。
MCS-51系列的程序内存中有7个矢量地址,叙述如下:(1)00H 复位当第9脚RESET 为高电平,CPU 会跳至地址00H 处开始执行程序,亦即程序一定要从地址00H开始写起。
(2)03H(外部中断0)INT引脚由高电位变至低电位(跳沿触发方式)或采样到是低电位(电平触发方式)当0时,CPU会接受外部中断0,并跳至地址03H处去执行中断子程序。
(3)0BH(定时器/计数器0中断)当CPU接受定时器/计数器0中断置位而产生中断要求时,会跳至地址0BH处去执行中断子程序。
(4)13H(外部中断1)INT引脚由高电位变至低电位(跳沿触发方式)或采样到是低电位(电平触发方式)当1时,CPU会接受外部中断1,并跳至地址13H处去执行中断子程序。
(5)1BH(定时器/计数器1中断)当CPU接受定时器/计数器1中断置位而产生中断要求时,会跳至地址1BH刻去执行中断子程序。
(6)23H(串行中断1)当串行端口传送数据或接收数据完毕时,CPU会接受串行中断,并跳至地址23H处去执行中断子程序。
(7)2BH(定时器/计数器2中断)此中断仅8052系列才有。
当CPU接受定时器/计数器2产生中断要求时,会跳至地址2BH处去执行中断子程序。
图2.1 MCU内部中断机制2.中断使能位8051针对中断提供两层使能,第一层为EA全局使能控制,第二层为分别控制EX0,ET0、EXl、ETl、ES、ET2。
当8051在复位状态时,寄存器的各个中断使能位都预设为“0”,即所有中断都禁止,故欲允许中断时,应先使能相对应的中断。
当中断产生后,中断状态会记录于定时器/计数器控制寄存器(Timer/CounterControlRigister,TCON)和串口口控制寄存器SCON的中断请求标志(InterruptRequest flag)中,当标志被置位,表示中断已发生。
由图2.1可知,当外部中断或定时器0、定时器1中断发生时,CPU 都可以判别是哪种中断。
因此当这四个中断发生时,中断服务程序被执行后,CPU 会主动清除中断请求标志,对于其他的中断,由于CPU 无法判别,因此中断请求标志需由程序指令来清除。
欲设定中断使能与否,必须设置中断使能寄存器IE(Interrupt Enable Register),其位地址A8H ,是一个可位寻址的寄存器。
3.中断保护由于各个中断入口间仅有8个字节,一般情况下难以安排下一个完整的中断服务程序。
因此,通常总是在重点入口地址处放置一条无条件转移指令,使程序转向在其他地址存放的中断服务程序。
当执行新的中断服务程序时,注意不可以破坏旧有的数据和状态,因此在编写时还要注意保护现场,主要是各个寄存器的值。
通常会被更改的数据(如ACC 、PSW 等),可以利用堆栈在执行中断服务程序之前就将其PUSH 起来,待执行结束后再将相关寄存器POP 即可。
另外,因为8051可任意选择四个工作寄存器区中的一组工作寄存器,所以利用选择不同寄存器区的方式亦可达到数据保存的目的。
4.中断优先级8051对于各种中断优先权采用双层结构,首先对于优先权可由中断优先权寄存器(Interrupt Priority )IP 设定该中断为高优先权或低优先权,高优先权可以中断低优先权,反之不行。
当同一时间同一级别的多个中断请求是,则按自然优先级顺序相应中断。
IP(LSB) PX0,PX1:外部中断0,1的中断优先级控制;1->高优先级,0->低优先级。
PT0,PT1:定时器/计数器0,1的中断优先级控制;PS:串行口中断优先级控制。
IP 中对应位全为零时,CPU 按照片自然优先级来顺序响应中断:中断源外部中断0 高定时器/计数器0外部中断1定时器/计数器1串行口中断 低五、实验步骤本实验将练习使用0INT ,1INT 的中断,利用按键来触发外部中断的发生。
并通过两个中断先后到达的方法,来学习中断优先级的意义与控制。
1、电路说明在图2.2中,主程序执行时,单片机端口P0所接的LED 由P0.7至P0.0一次一颗循环点亮。
当外部中断0产生后,执行该中断子程序,此时P0.0对应的二极管亮,其他二极INT中断子程序则为点亮P0.1对应的二极管,其管熄灭。
2秒钟后,返回主程序的工作。
1他二极管熄灭。
注意,由于每次在按键按下或放开可能会有抖动现象,因而必须进行必要的处理,以免产生二次以上的相同中断信号。
在程序主循环进行时,当1键按下,相应发光管点亮后,立即再按下2键,看反应如何;在程序主循环进行时,按下2键,相应发光管点亮后,立即按下1键,观察反应。
2.程序设计先按l键执行0INT中断子程序,在此中断子程序未结束前再按2键,或是先按2键执行INT中断子程序,在此中断子程序未结束前再按l键,或两者同时按,观察lED亮暗的情1形即可观察中断优先权执行的情形。
六、实验报告1.画出电路原理图,并简要分析工作原理;Array工作原理简述:外部中断按键INT0,INT1连接按键接受外部中断请求,由P0连接外部二极管,每个引脚控制一个发光二极管,低电平点亮。
当按键按下时,单片机接受外部中断请求,进行10MS消抖延迟后如果判断按键依然有效,则执行相应的程序进行相应的中断处理,通过P0进行灯的亮暗控制。
2.提供程序流程图和程序清单,适当给出注释;;******************************************************************************ORG 0000HAJMP MAINORG 0003HAJMP INT0INTORG 0013HAJMP INT1INT;**********主程序**********************************ORG 0030HMAIN:MOV SP,#60HMOV IE,#10000101B ;使能INT0,INTlMOV TCON,#00000101B ;设INT0、INTl跳沿触发。
MOV IP,#01H ;外部中断0优先MOV A,#0FEHLOOP: RR AMOV P0,AACALL DELAY200MSAJMP LOOP;*****************INT0中断服务程序*****************************INT0INT: CLR EAACALL DELAY10MS ;去抖动JNB INT0, HAVKEY1 ;确实有键,转HAVEKEY1SETB EARETIHAVEKEY1: PUSH PSWPUSH AccSETB EAMOV P0,#0FEHACALL DELAY2S ;亮2秒钟POP AccPOP PSWRETI;************INT1中断服务程序******************************INT1INT:CLR EA ;关闭中断ACALL DELAY10MS ;延迟10毫秒JNB INT1,HAVEKEY2 ;如果依旧按键有效执行子程序HAVEKEY2:PUSH PSWPUSH Acc ;现场入栈MOV P0,#0FCH ;P0赋值为1111,1101,即点亮P0.1对应的LED灯ACALL DELAY2S ;延迟2秒POP AccPOP PSW ;现场出栈SETB EA ;中断允许RETI ;中断返回;********************************************************DELAY200MS: ;延时200ms子程序MOV R7,#2DELA1:MOVR6,#200DELA2:MOV R5,#248DJNZ R5,$DJNZ R6,DELA2DJNZ R7,DELA1RET;延迟时间=1+1*2+1*2*200+2*2*200*248+2*200*2+2*2+2=199607us-.>200msDELAY10MS: ;延时10ms子程序DEL:MOV R7,#28HDEL1:MOV R6,#7DHDEL2:DJNZ R6,DEL2DJNZ R7,DEL1RET;时间计算同理DELAY2S: ;延时2s子程序DEL:MOV R7,#14HDEL1:MOV R6,#C8H .DEL2:MOV R5,#F8DJNZ R5,$DJNZ R6,DEL2DJNZ R7,DEL1RET;时间计算同理END3. 描述实验现象和结果,要求对实验现象和结果进行分析。
现象:开始发光二极管行以200ms 的时间间隔,依次点亮。
1键按下时最左端的灯点亮2秒钟,其他发光管熄灭;2键按下时左端第二个灯点亮2秒,其他发光管熄灭。
当1键按下左端灯亮,此时按下2键,左端第一个灯灭,第二个灯点亮。
当按下2键,第二灯亮,此时按下1键,灯没有反应。
结果分析:开始系统正常运行,即光二极管行以200ms 的时间间隔。
当1键按下时,系统产生0INT 中断,控制最左端的灯点亮2秒钟,其他发光管熄灭;2键按下时,系统产生1INT 中断,使左端第二个灯点亮2秒,其他发光管熄灭。