收藏 分销(赏)

第5章-中断.ppt

上传人:s4****5z 文档编号:13965583 上传时间:2026-05-18 格式:PPT 页数:57 大小:996.50KB 下载积分:10 金币
下载 相关 举报
第5章-中断.ppt_第1页
第1页 / 共57页
第5章-中断.ppt_第2页
第2页 / 共57页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,6章,51,单片机的中断系统,主要内容,中断的基本概念,中断的系统结构,中断的响应过程,中断的的应用编程,在,CPU,和外设交换信息时,存在着,快速,CPU,和,慢速外设间,的矛盾,机器内部有时也可能出现,突发事件,,为此,计算机中通常采用中断技术。,中断,CPU,和外设并行工作,当外设数据准备好,(,或有某种突发事件发生,),时向,CPU,提出请求,,CPU,暂停正在执行的程序转而为该外设服务,(,或处理紧急事件,),,处理完毕再回到原断点继续执行原程序。,在,CPU,和外设交换信息时,存在着快速,CPU,中断,源,引起中断的原因,中断申请的来源,中断源可以是,I/O,设备、故障、时钟、调试中人为设置。,中断优先级,当有多个中断源同时向,CPU,申请中断时,,CPU,优,先响应最需紧急处理的中断请求,处理完毕再响应优,先级别较低的,这种预先安排的响应次序。,中断的嵌套,在中断系统中,高优先级的中断请求能中断正在,进行的较低级的中断源处理。,中断系统,能实现中断功能并能对中断进行管理的硬件和软件,称为中断系统。,本章将讨论,MCS51,系列单片机的中断系统。,中断请求是在执行程序的过程中的随机发生的,,中断系统要解决的问题是:,1,),CPU,在不断的执行指令中,是如何,检测,到,随机,发,生的中断请求?,2,)如何使中断的双方(,CPU,方和中断源方)均能人,为控制,,允许中断或禁止中断,。,3,)由于中断产生的随机性,不可能在程序中安排调子,程序指令或转移指令,那么,如何实现正确的转移,,,以便为该中断源服务呢?,4,),中断源有多个,而,CPU,只有一个,,当有多个中断源,同时有中断请求时,用户怎么控制,CPU,按照自己的,需要安排,响应次序,?,5,)中断服务完毕,如何正确地返回到原断点处?,6.1,中断系统结构,8XX51,有,5,个中断源,,3,个在片内,,2,个在片外,它们在程序存贮器中有固定的中断入口地址,当,CPU,响应中断时,硬件自动形成这些地址,由此进入中断服务程序;,5,个中断源有两级中断优先级,可形成中断嵌套。,6.1,中断系统结构,8XX51,有,5,个中断源,其符号、名称、产生条件及中断服务程序的入口地址如表,6.1,。,二、中断控制的有关寄存器,(1),中断的允许和禁止,中断控制寄存器,IE IE,寄存器的各位对应相应的中断源,如果允许该中断源中断则该位置,1,,禁止中断则该位,0,。,EA,-,ET2,ES,ET1,EX1,ET0,EX0,中断总控允,/,禁,不 用,T2,允,/,禁,串行口,允,/,禁,T1,允,/,禁,INT1,允,/,禁,T0,允,/,禁,INT0,允,/,禁,EA,:中断总控开关,是,CPU,是否响应中断的前提。,EA=1,,,CPU,开中断,;,EA=0,,,CPU,关中断。,ES,:串行口中断允许位,,ES=1,,允许串行口发送,/,接收中断;,ES=0,,禁止串行口中断。,ET1,:定时器,T1,中断允许位,,ET1=1,,允许,T1,计数溢出中断;,ET1=0,,禁止,T1,中断。,ET0,:定时器,T0,中断允许位,ET0=1,,允许,T1,计数溢出中断;,ET0=0,,禁止,T0,中断。,EX1,:外部中断,INT1,允许位,,EX1=1,,允许,INT1,中断;,EX1=0,,禁止,INT1,中断。,EX0,:外部中断,INT0,允许位,,EX0=1,,允许,INT0,中断;,EX0=0,,禁止,INT0,中断。,(2),中断请求标志及外部中断方式选择寄存器,TCON,说明:,IT0,和,IT1,为外中断,INT0,和,INT1,中断触发方式选择,若选下降沿触发则相应位置,1,;若选低电平触发,,IT,相应位置,0,。,某中断源有中断请求,该中断标志置,1,,无中断请求,该中断标志置,0,TR0,和,TR1,为定时器,T0,和,T1,工作启动和停止控制。,(3),中断优先级管理寄存器,IP,五个中断源的优先级别由,IP,寄存器管理,相应位置,1,,,则该中断源优先级别高,置,0,的优先级 别低。,-,-,PT2,PS,PT1,PX1,PT0,PX0,无,用,位,无,用,位,T2,高,/,低,串行 口,高,/,低,T1,高,/,低,INT1,高,/,低,T0,高,/,低,INT0,高,/,低,T0,T1,串行口,当 某几个中断源在,IP,寄存器相应位同为,1,或同为零时,由内部查询确定优先级,查询的顺序是:,CPU,优先响应先查询的中断请求,T2,INT0,INT1,MCS_51,系列单片机的中断结构,6.2,中断响应过程,一、中断处理过程,中断处理过程分为四个阶段:,中断请求,;,中断响应,;,中断处理,;,中断返回。,MCS-51,系列单片机的中断过程流程如图,6.2,所示。,N,N,Y,Y,Y,N,执 行 指 令,中断标志,1?,(,中断请求,?),指令,最后一个,T,周期,?,EA=1?,允 许 位,=1?,CPU,判 别优 先权,响 应优 先权高 的中断,断点的,PC,进栈,中断服务入口地址送,PC,撤 除 中 断 标 志,中 断 服 务,中 断 返 回,断 点 出 栈 送,PC,中断请求,.,中断响应,中断服务,中断返回,中断请求、中断响应过程由硬件完成。,中断服务程序应根据需要进行编写。程序中要注意保护现场和恢复现场。,中断返回是通过执行一条,RETI,中断返回指令,使堆栈中被压入的断点地址送,PC,,从而返回主程序的断点继续执行主程序。另外,RETI,还有恢复优先级状态触发器 的作用,因此不能以,RET,指令代替,“,RETI,”,指令。,若某个中断源通过编程设置,处于被打开的状态,,并满足中断响应的条件,然而下面三种情况单片机不响,应此中断:,当前正在执行的那条指令没执行完;,当前响应了同级或高级中断;,正在操作,IE,、,IP,中断控制寄存器或执行,RETI,指令。,在正常的情况下,从中断请求信号有效开始,到中断得到响应,通常需要,3,个机器周期到,8,个机器周期。,二、中断请求的撤除,CPU,响应中断后,应撤除该中断请求标志,否则会再次中断。,对定时计数器,T0,、,T1,的溢出中断,,CPU,响应中断后,硬件自动清除中断请求标志,TF0,和,TF1,。,对边沿触发的外部中断,INT1,和,INT0,,,CPU,响应中,断后硬件自动清除中断请求标志,IE0,和,IE1,。,对电平触发的外部中断,,CPU,在响应中断时也不会,自动清除中断标志,因此,在,CPU,响应中断后应立即撤,除,INT1,或,INT0,的低电平信号。,对于串行口中断,,CPU,响应中断后,没有用硬件清除中断请求标志,TI,、,RI,,即这些中断标志 不会自动清除,必须用软件清除,这是在编串行通信中断服务中应该注意的。,6.3,中断的汇编语言程序和,C,语言程序设计,用户对中断的控制和管理,实际是对,4,个与中断有关的寄存器,IE,、,TCON,、,IP,、,SCON,进行控制或管理。这几个寄存器在单片机复位时是清零的,因此必须根据需要对这几个寄存器的有关位进行预置。,6.3,中断的汇编语言程序和,C,语言程序设计,在中断程序的编制中应注意:,开中断总控开关,EA,,置位中断源的中断允许位。,对外部中断,INT0,、,INT1,应选择中断触发方式,多个中断源中断,应设定中断优先级,预置,IP,。,若要在执行当前中断程序时禁止更高优先级中断,可以采用软件关,CPU,中断。或禁止某中断源中断,在中断返回前再开放中断。,编写中断服务程序,并注意用保护现场和恢复现场,以免中断返回时,丢失原寄存器、累加器中的信息。,汇编语言的中断服务程序按规定的中断矢量地址存入,由于五个中断矢量地址,0003H,、,000BH,、,0013H,、,001BH,、,0023H,之间相距很近,往往装不下一个中断服务程序,通常将中断服务程 序安排在程序存贮器的其他地址空间,而在矢量地址的单元中安排一条转移指令。,一、汇编语言中断程序的设计,例,1.,在图,6.3,中,P1.4,P1.7,接有四个发光二极管,,P1.0,P1.3,接有四个开关,消抖电路用于 产生中断请求信号,当消抖电路的开关来回拔动一次将产生一个下降沿信号,通过,INT0,向,CPU,申请中断,要求:初时发光二极管全黑,每中断一次,,P1.0,P1.3,所接的开关状态反映到发光二极管上,且要求开关断开的对应发光二极管亮,电路和现象如下:,、,ORG 0000H ,AJMP,MAIN,ORG 0003H,;,INT0,中断入口,AJMP,WBI,;转中断服务程序,ORG 0030H,;主程序,MAIN:,MOV P1,,,#0FH,;高,4,位灯灭,低四位输入先写,1,SETB IT0,;边沿触发中断,SETB EX0,;允许外中断,0,中断,SETB EA,;开中断开关,SJMP$,;等待中断,WBI,:,MOV P1,,,#0FH,;,P1,先写入,“,1,”,且灯灭,MOV A,,,P1,;输入开关状态换到高,4,位,SWAP A ,;低,4,位开关状态电平,MOV P1,,,A,;输出到,P1,高,4,位,RETI,END,中断服务,此例的执行现象是,每重置一次四个开关的开、合状态,四个发光二极管维持原来的亮、灭状态,仅当来回拔动消抖电路开关后,产生了中断,发光二极管才反映新置的开关状态。,例,2.89C51,的,P1,口接一个共阴极的数码管,利用消抖开关产生中断请求信号,每来回拔动一 次开关,产生一次中断,用数码管显示中断的次数,(,最多不超过,15,次,),。,ORG 0000H ,AJMP MAIN,ORG 0013H,;,INT1,中断入口,AJMP INT1,;转中断服务程序,ORG 0030H,;主程序,MAIN,:,SETB IT1,;边沿触发中断,SETB EX1,;允许,INT1,中断,SETB EA,;开中断开关,MOV R0,,,#0,;计数初值为,0,MOV A,,,#3FH,;,“,0,”,的字形码送,A,AL1,:,MOV P1,,,A,;显示数码,AL2,:,CJNE R0,,,#0FH,,,AL1,;没满,15,次循环显示,MOV R7,,,#0FFH,;满,15,次,显,F,,延时,DJNZ R7,,,MOV P1,,,#0,;关显示,CLR EA,;关中断,SJMP,;结束,INT1,:,INC R0,;中断次数加,1,MOV A,,,R0,MOV DPTR,,,TAB,;,DPTR,指向字形码表首址,MOVC A,,,A+DPTR,;查表,POP DPH,POP DPL,;弹出断点,MOV DPTR,,,#AL1,PUSH DPL,PUSH DPH,;修改中断返回点,,AL1,压入堆栈,RETI,;从堆栈,AL1,地址,PC,,返主程序,AL,处,TAB,:,DB 3FH,,,06H,,,5BH,,,4FH,,,66H,,,6DH,DB 7DH,,,07H,,,7FH,,,6FH,,,77H,,,7CH,DB 39H,,,5EH,,,79H,,,71H,;段码表,(,字形码,),END,上面程序每中断一次,执行一次中断服务程序,INT1,。,在中断服务程序中,累计中断次数并 查字形表,返回,到主程序,AL1,地址执行显示。,为方便说明程序的执行情况,将上面程序重排在,同一页。,ORG 0000H,AJMP MAIN,ORG 0013H,AJMP INT1,ORG 0030H,MAIN,:,SETB TI1,SETB EX1,SETB EA,MOV R0,,,#0,MOV A,#3FH,AL1,:,MOV P1,,,A,AL2,:,CJNE R0,,,#0FH,,,AL1,MOV R7,,,#0FFH,DJNZ R7,,,MOV P1,,,#0,CLR EA ,SJMP,INT1,:,INC R0,MOV A,,,R0,MOV DPTR,,,TAB,MOVC A,,,A+DPTR,POP DPH,POP DPL,MOV DPTR,,,#AL1,PUSH DPL,PUSH DPH,RETI,;,AL1,地址,PC,,,返主程序,AL1,TAB:DB 3FH,,,06H,,,5BH,,,以上中断在,AL1,或,AL2,两指令处发生,究竟是哪,一指令处中断是随机的,为保证返回到,AL1,显示,F,,这里采用修改中断返回点的办法,即先从栈中弹出中断响应时压入的 断点弹到,DPTR,中,修改,DPTR,为用户需要的返回点,并将其压 入堆栈,再通过执行,RETI,指令弹出栈中内容到,PC,、弹出的即为修改后的地址,从而返回到主 程序中用所希望的地址执行。,上例中中断次数在主程序判断,目的是使读者了解修改中断返回点的方法,如果改在中断服务程序中判断,编程简洁些,下面仅介绍和上例中的不同部分的程序。,MOV R0,,,#0,;计数初值为,0,MOV P1,,,#3FH,;显示,0,MOV DPTR,,,#TAB,;指向字形码表,AGA,:,SJMP,;等待中断,INT1,:,INC R0,;中断次数加,1,MOV A,,,R0,MOVC A,,,A+DPTR,;查字形码表,MOV P1,,,A,;显示,CJNE R0,,,#0FH,,,RE,;,15,次中断未到转,RE,CLR EA,;,15,次到关中断,RE,:,RETI,;返回主程序的,AGA,处,TAB,:,DB 3FH,,,06H,,,5BH,,,4FH,,,66H,,,6DH,,,7DH,07H DB 7FH,,,6FH,,,77H,,,7CH,,,39H,,,5EH,,,79H,,,71H,C51,使用户能编写高效的中断服务程序,编译器在,规定的中断源的矢量地址中放入无条件转移指令,使,CPU,响应中断后,自动,地从矢量地址跳转到中断服务程序的实际地址,而无需用户去安排。中断服务程序定义为函数,函数的完整定义如下。,其中,interrupt n,表示将函数声明为中断服务函数,,n,为中断源编号,可以是,0,31,间的整数,不允许是带运算符的表达式,,n,通常取以下值:,返回值 函数名,(,参数,),模式再入,interrupt n,using m,0,外部中断,0,;,1,定时器,/,计数器,0,溢出中断,2,外部中断,1,;,3,定时器,/,计数器,1,溢出中断,4,串行口发送与接收中断,Using m,定义函数使用的工作寄存器组,,m,的取值范围为,0,3,,可缺省,它 对目标代码的影响是:函数入口处将当前寄,存器保存,使用,m,指定的寄存器组,函数退出时原寄存器组恢,复。选不同的工作寄存器组,可方便实现寄存器组的现场保护。,再入,:,属性关键字,reentrant,将函数定义为再入的,在,C51,中,普通函数,(,非再入的,),不能,递归,调用,只有再入函数才可被递归调用。,中断服务函数不允许用于外部函数,它对目标代,码影响如下:,当调用函数时,,SFR,中的,ACC,、,B,、,DPH,、,DPL,和,PSW(,当需要时入栈,),。,如果不使用寄存器组切换,中断函数所需的所有工作寄存器,Rn,都入栈。,函数退出前,所有工作寄存器出栈。,函数由“,RETI”,指令终止。,例,1.,在图,6.3,中,P1.4,P1.7,接有四个发光二极管,,P1.0,P1.3,接有四个开关,消抖电路用于 产生中断请求信号,当消抖电路的开关来回拔动一次将产生一个下降沿信号,通过,INT0,向,CPU,申请中断,要求:初时发光二极管全黑,每中断一次,,P1.0,P1.3,所接的开关状态反映到发光二极管上,且要求开关断开的对应发光二极管亮,电路和现象如下:,、,例如,对本节的例,1,用,C,语言编程,#include,int0()interrupt 0 /*INT0,中断函数*,/,P1=0 x0f;/*,输入端先置,1,,灯灭*,/,P1=4;/*,读入开关状态,并左移四位,,使开关反映在发光二极管上*,/,main(),EA=1;/*,开中断总开关*,/,EX0=1;/*,允许,INT0,中断*,/,IT0=1;/*,下降沿产生中断*,/,while(1);/*,等待中断*,/,主函数执行,while(1),;语句进入死循环等待中断,当拨动,INT0,的开关后,进入中断函数,读入,P1.0,P1.3,的开关状态并将状态数据右移四位到,P1.4,P1.7,的位置上输出控制,LED,亮,执行完中断,返回到等待中断的,while(1),语句,等待下一次的中断。,例,2,对本节的例,2,记录并显示中断次数改用,C,语言编程,可有两种编程方法。,例,2.89C51,的,P1,口接一个共阴极的数码管,利用消抖开关产生中断请求信号,每来回拔动一 次开关,产生一次中断,用数码管显示中断的次数,(,最多不超过,15,次,),。,法,1,:在主程序中控制中断次数,#include,char i;,code char tab,16,=,0 x3f,0 x06,0 x5b,0 x4F,0 x66,,,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,;,int,()interrupt 2,i+,;,/*,计中断次数*,/,P1=tab,i,;/*,查表,次数送显示*,/,main(),EA=1;,EX1=1;,IT1=1;,ap5:P1=0 x3f;/*,显示“,0”*/,for(i,=0;i,16;);/*,当,I16,等待中断*,/,goto,ap5;/*,当,i=16,重复下,一轮,16,次中*,/,法二:在中断服务程序中控制中断次数,#include,char i;,code char tab,16,=,0 x3f,0 x06,0 x5b,0 x4F0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f,0 x77,0 x7c,0 x39,0 x5e,0 x79,0 x71,;,int,()interrupt 2,i+,if(i,16)P1=tab,i,;,else,i=0;P1=0 x3f;,main(),EA=1;EX1=1;IT1=1;,P1=0 x3f,;,while(1);/*,等待中断*,/,每个中断源有固定的中断服务程序的入口地址,(,称矢量地址或向量地址,),。当,CPU,响应中断以 后单片机内部硬件保证它能自动的跳转到该地址。因此,此地址是应该熟记的,在汇编程序 中,中断服务程序应存放在正确的向量地址内。,6.4,小 结,(,1,)中断技术是实时控制中的常用技术,,51,系列单片机有三个内部中断,二个外部中断。所谓 外部中断就是在外部引脚上有产生中断所需要的信号。,(,或存放一条转移指令,),;而在,C,语言中是靠,Interrupt n,的关键字,n,自动设置的。,(,2,)单片机的中断是靠内部的寄存器管理的,这就是中断允许寄存器,IE,,中断优先权寄存器,IP,,必须在,CPU,开中断即开全局中断开关,EA,,开各中断源的中断开关,,CPU,才能响应该中断源的 中断请求,其中缺一不可。,(,3,)从程序表面看来,主程序和中断服务程序好象是,没有关连的,只有掌握中断响应的过程,才能理解中断,的,发生,和,返回,,看得懂中断程序,并能编写高质量中断,程序。,(,4,)本章重点应掌握中断的基本概念,并能熟练编制,中断程序。,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服