实验二、中断实验――中断优先级控制及中断保护一、实验目的1、掌握单片机中断机制。
2、熟悉中断的应用和编程。
二、实验设备1、仿真器;2、单片机最小系统;3、发光二极管阵列显示模块;4、独立式键盘模块。
三、实验要求连接单片机最小系统和发光二极管阵列的电路并编写程序,学习单片机中断机制,及中断优先级和中断保护的方法:使用独立式按键 1 连接INT 0(P3.2),按键 2 连接INT 1(P3.3),在平时状态下,发光二极管行以200ms 的时间间隔,依次点亮。
1 键按下时INT 0中断处理程序点亮P0.0 对应的发光管 2 秒钟,其他发光管熄灭; 2 键按下时P0.1 对应发光管点亮 2 秒,其他发光管熄灭。
四、实验原理通常一个微处理器读取外围设备(如键盘等)的输入信息的方法有轮询(Polling) 及中断(Interrupt) 两种。
轮询的方法是CPU 依照某种既定法则,依序询问每一外围设备I/O 是否需要服务,此种方法CPU 需花费一些时间来做询问服务,当I/O 设备增加时,询问服务时间也相对增加,势必浪费许多CPU 时间,降低整体运行的效率。
使用中断是一个较好的解决方法。
使用中断使系统对外部设备的请求响应更加灵敏,并且不需要占用CPU 的时间进行轮询。
但是,当使用中断,特别是有多个中断嵌套时要特别注意内存单元的保护。
180C51中断结构当中断发生后,程序将跳至对应中断入口地址去执行中断子程序,或称中断服务程序(Interrupt Service Routine) ,这些特殊的地址称为中断向量,例如当80C51 外部中断INTl 发生时,会暂停主程序的执行,跳至地址0013H 去执行中断服务程序,直到RETI 指令后,才返回主程序继续执行。
MCS-51 系列的程序内存中有7 个矢量地址,叙述如下:(1)00H 复位当第9 脚RESET 为高电平,CPU 会跳至地址00H 处开始执行程序,亦即程序一定要从地址00H 开始写起。
(2)03H(外部中断0)当I NT 0引脚由高电位变至低电位(跳沿触发方式)或采样到是低电位(电平触发方式)时,CPU 会接受外部中断0,并跳至地址03H 处去执行中断子程序。
(3)0BH( 定时器/计数器0 中断)当CPU 接受定时器/计数器0 中断置位而产生中断要求时,会跳至地址0BH 处去执行中断子程序。
(4)13H(外部中断1)当I NT 1引脚由高电位变至低电位(跳沿触发方式)或采样到是低电位(电平触发方式)时,CPU 会接受外部中断1,并跳至地址13H 处去执行中断子程序。
(5)1BH( 定时器/计数器 1 中断)当CPU 接受定时器/计数器 1 中断置位而产生中断要求时,会跳至地址1BH 刻去执行中断子程序。
(6)23H(串行中断1)当串行端口传送数据或接收数据完毕时,CPU 会接受串行中断,并跳至地址23H 处去执行中断子程序。
(7)2BH( 定时器/计数器 2 中断)此中断仅8052 系列才有。
当CPU 接受定时器/计数器 2 产生中断要求时,会跳至地址2BH 处去执行中断子程序。
INT 0 IT0 选择低电位或负沿触发IE0EX0ET0EAPX0高优先级低优先级高PT0TF0INT 1 I T1 选择低电位或负沿触发IE1EX1ET1P X1PT1TF1RI TI +ESPSET2PT2TF2+EXF2低图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 寄存器:PS PT1 PX1 PT0 PX0 (MSB) (LSB) PX0,PX1: 外部中断0,1 的中断优先级控制;1->高优先级,0->低优先级。
PT0,PT1:定时器/计数器0,1 的中断优先级控制;PS:串行口中断优先级控制。
IP 中对应位全为零时,CPU 按照片自然优先级来顺序响应中断:中断源外部中断0 高定时器/计数器0外部中断 1定时器/计数器 1串行口中断低五、实验步骤本实验将练习使用INT 0,I NT 1的中断,利用按键来触发外部中断的发生。
并通过两个中断先后到达的方法,来学习中断优先级的意义与控制。
1、电路说明在图 2.2 中,主程序执行时,单片机端口P0 所接的LED 由P0.7 至P0.0 一次一颗循环点亮。
当外部中断0 产生后,执行该中断子程序,此时P0.0 对应的二极管亮,其他二极管熄灭。
2 秒钟后,返回主程序的工作。
INT 1中断子程序则为点亮P0.1 对应的二极管,其他二极管熄灭。
注意,由于每次在按键按下或放开可能会有抖动现象,因而必须进行必要的处理,以免产生二次以上的相同中断信号。
在程序主循环进行时,当1 键按下,相应发光管点亮后,立即再按下 2 键,看反应如何;在程序主循环进行时,按下 2 键,相应发光管点亮后,立即按下 1 键,观察反应。
2.程序设计先按l 键执行INT 0 中断子程序,在此中断子程序未结束前再按 2 键,或是先按 2 键执行INT 1中断子程序,在此中断子程序未结束前再按l 键,或两者同时按,观察lED 亮暗的情形即可观察中断优先权执行的情形。
六、实验报告1.画出电路原理图,并简要分析工作原理;80C51 5VP0.0P0.1P0.2INT 0 P0.3P0.4INT 1P0.5GNDP0.6P0.7工作原理简述:外部中断按键INT0 ,INT1 连接按键接受外部中断请求,由P0 连接外部二极管,每个引脚控制一个发光二极管,低电平点亮。
当按键按下时,单片机接受外部中断请求,进行10MS 消抖延迟后如果判断按键依然有效,则执行相应的程序进行相应的中断处理,通过P0 进行灯的亮暗控制。
2.提供程序流程图和程序清单,适当给出注释;;******************************************************************************ORG 0000HAJMP MAINORG 0003HAJMP INT0INTORG 0013HAJMP INT1INT;********** 主程序**********************************ORG 0030HMAIN :MOV S P,#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.描述实验现象和结果,要求对实验现象和结果进行分析。