《单片机主中断原理概念4832.docx》由会员分享,可在线阅读,更多相关《单片机主中断原理概念4832.docx(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、单片机主主中断原原理有关中断断的概念念什什么是中中断,我我们从一一个生活活中的例例子引入入。你正正在家中中看书,突突然电话话铃响了了,你放放下书本本,去接接电话,和和来电话话的人交交谈,然然后放下下电话,回回来继续续看你的的书。这这就是生生活中的的“中断断”的现现象,就就是正常常的工作作过程被被外部的的事件打打断了。仔细细研究一一下生活活中的中中断,对对于我们们学习单单片机的的中断也也很有好好处。第第一、什什么可经经引起中中断,生生活中很很多事件件可以引引起中断断:有人人按了门门铃了,电电话铃响响了,你你的闹钟钟闹响了了,你烧烧的水开开了.等等诸诸如此类类的事件件,我们们把可以以引起中中断的称
2、称之为中中断源,单单片机中中也有一一些可以以引起中中断的事事件,880311中一共共有5个个:两个个外部中中断,两两个计数数/定时时器中断断,一个个串行口口中断。 第二、中断的的嵌套与与优先级级处理:设想一一下,我我们正在在看书,电电话铃响响了,同同时又有有人按了了门铃,你你该先做做那样呢呢?如果果你正是是在等一一个很重重要的电电话,你你一般不不会去理理会门铃铃的,而而反之,你你正在等等一个重重要的客客人,则则可能就就不会去去理会电电话了。如果不不是这两两者(即即不等电电话,也也不是等等人上门门),你你可能会会按你通通常的习习惯去处处理。总总之这里里存在一一个优先先级的问问题,单单片机中中也是
3、如如此,也也有优先先级的问问题。优优先级的的问题不不仅仅发发生在两两个中断断同时产产生的情情况,也也发生在在一个中中断已产产生,又又有一个个中断产产生的情情况,比比如你正正接电话话,有人人按门铃铃的情况况,或你你正开门门与人交交谈,又又有电话话响了情情况。考考虑一下下我们会会怎么办办吧。第三、中断的的响应过过程:当当有事件件产生,进进入中断断之前我我们必须须先记住住现在看看书的第第几页了了,或拿拿一个书书签放在在当前页页的位置置,然后后去处理理不同的的事情(因因为处理理完了,我我们还要要回来继继续看书书):电电话铃响响我们要要到放电电话的地地方去,门门铃响我我们要到到门那边边去,也也说是不不同
4、的中中断,我我们要在在不同的的地点处处理,而而这个地地点通常常还是固固定的。计算机机中也是是采用的的这种方方法,五五个中断断源,每每个中断断产生后后都到一一个固定定的地方方去找处处理这个个中断的的程序,当当然在去去之前首首先要保保存下面面将执行行的指令令的地址址,以便便处理完完中断后后回到原原来的地地方继续续往下执执行程序序。具体体地说,中中断响应应可以分分为以下下几个步步骤:11、保护护断点,即即保存下下一将要要执行的的指令的的地址,就就是把这这个地址址送入堆堆栈。22、寻找找中断入入口,根根据5个个不同的的中断源源所产生生的中断断,查找找5个不不同的入入口地址址。以上上工作是是由计算算机自
5、动动完成的的,与编编程者无无关。在在这5个个入口地地址处存存放有中中断处理理程序(这这是程序序编写时时放在那那儿的,如如果没把把中断程程序放在在那儿,就就错了,中中断程序序就不能能被执行行到)。3、执执行中断断处理程程序。44、中断断返回:执行完完中断指指令后,就就从中断断处返回回到主程程序,继继续执行行。究竟单片片机是怎怎么样找找到中断断程序所所在位置置,又怎怎么返回回的呢?我们稍稍后再谈谈. MCS-51中中断系统统的结构构:由与与中断有有关的特特殊功能能寄存器器、中断断入口、顺序查查询逻辑辑电路等等组成,包包括5个个中断请请求源,44个用于于中断控控制的寄寄存器IIE、IIP、EECON
6、N和SCCON来来控制中中断 类类弄、中中断的开开、关和和各种中中断源的的优先级级确定。中断请求求源:(11)外部部中断请请求源:即外中中断0和和1,经经由外部部引脚引引入的,在在单片机机上有两两个引脚脚,名称称为INNT0、INTT1,也也就是PP3.22、P33.3这这两个引引脚。在在内部的的TCOON中有有四位是是与外中中断有关关的。IIT0:INTT0触发发方式控控制位,可可由软件件进和置置位和复复位,IIT0=0,IINT00为低电电平触发发方式,IIT0=1,IINT00为负跳跳变触发发方式。这两种种方式的的差异将将在以后后再谈。IE00:INNT0中中断请求求标志位位。当有有外部
7、的的中断请请求时,这这位就会会置1(这这由硬件件来完成成),在在CPUU响应中中断后,由由硬件将将IE00清0。IT11、IEE1的用用途和IIT0、IE00相同。(22)内部部中断请请求源TTF0:定时器器T0的的溢出中中断标记记,当TT0计数数产生溢溢出时,由由硬件置置位TFF0。当当CPUU响应中中断后,再再由硬件件将TFF0清00。TF1:与TFF0类似似。TI、RRI:串串行口发发送、接接收中断断,在串串口中再再讲解。2、中断断允许寄寄存器IIE在MCSS511中断系系统中,中中断的允允许或禁禁止是由由片内可可进行位位寻址的的8位中中断允许许寄存器器IE来来控制的的。见下下表 EAx
8、xESET1EX1ET0EX0 其中EAA是总开开关,如如果它等等于0,则则所有中中断都不不允许。ES串串行口中中断允许许ET1定时器器1中断断允许EX1外中断断1中断断允许。ET0定时器器0中断断允许EX0外中断断0中断断允许。如果我们们要设置置允许外外中断11,定时时器1中中断允许许,其它它不允许许,则IIE可以以是 EAxxESET1EX1ET0EX0 10001100即8CHH,当然然,我们们也可以以用位操操作指令令SETBB EAASETTB EET1SETBB EXX1来实现它它。3、五个个中断源源的自然然优先级级与中断断服务入入口地址址外中断00:00003HH定时器00:000
9、0BHH外中断11:00013HH定时器11:0001BHH串口 :00223H它们的自自然优先先级由高高到低排排列。写到这里里,大家家应当明明白,为为什么前前面有一一些程序序一始我我们这样样写:ORG 00000HLJMPP STTARTTORG 00330HSTARRT:。这这样写的的目的,就就是为了了让出中中断源所所占用的的向量地地址。当当然,在在程序中中没用中中断时,直直接从000000H开始始写程序序,在原原理上并并没有错错,但在在实际工工作中最最好不这这样做。优先先级:单单片机采采用了自自然优先先级和人人工设置置高、低低优先级级的策略略,即可可以由程程序员设设定那些些中断是是高优先
10、先级、哪哪些中断断是低优优先级,由由于只有有两级,必必有一些些中断处处于同一一级别,处处于同一一级别的的,就由由自然优优先级确确定。开开机时,每每个中断断都处于于低优先先级,我我们可以以用指令令对优先先级进行行设置。看表22中断优优先级中中由中断断优先级级寄存器器IP来来高置的的,IPP中某位位设为11,相应应的中断断就是高高优先级级,否则则就是低低优先级级。 xxxPSPT1PX1PT0PX0 例:设有有如下要要求,将将T0、外中断断1设为为高优先先级,其其它为低低优先级级,求IIP的值值。IP的首首3位没没用,可可任意取取值,设设为0000,后后面根据据要求写写就可以以了 xxxPSPT1
11、PX1PT0PX0 00000110因此,最最终,IIP的值值就是006H。例:在在上例中中,如果果5个中中断请求求同时发发生,求求中断响响应的次次序。响响应次序序为:定定时器00外外中断11外外中断00实实时器11串串行中断断。MCS51的的中断响响应过程程:1、中中断响应应的条件件:讲到到这儿,我我们依然然对于计计算机响响应中断断感到神神奇,我我们人可可以响应应外界的的事件,是是因为我我们有多多种“传传感器“眼、耳可以以接受不不同的信信息,计计算机是是如何做做到这点点的呢?其实说说穿了,一一点都不不希奇,MMCS551工作作时,在在每个机机器周期期中都会会去查询询一下各各个中断断标记,看看
12、他们是是否是“11“,如如果是11,就说说明有中中断请求求了,所所以所谓谓中断,其其实也是是查询,不不过是每每个周期期都查一一下而已已。这要要换成人人来说,就就相当于于你在看看书的时时候,每每一秒钟钟都会抬抬起头来来看一看看,查问问一下,是是不是有有人按门门铃,是是否有电电话。很很蠢,不不是吗?可计算算机本来来就是这这样,它它根本没没人聪明明。了解解了上述述中断的的过程,就就不难解解中断响响应的条条件了。在下列列三种情情况之一一时,CCPU将将封锁对对中断的的响应:CPU正正在处理理一个同同级或更更高级别别的中断断请求。现行行的机器器周期不不是当前前正执行行指令的的最后一一个周期期。我们们知道
13、,单单片机有有单周期期、双周周期、三三周期指指令,当当前执行行指令是是单字节节没有关关系,如如果是双双字节或或四字节节的,就就要等整整条指令令都执行行完了,才才能响应应中断(因因为中断断查询是是在每个个机器周周期都可可能查到到的)。当前正正执行的的指令是是返回批批令(RRETII)或访访问IPP、IEE寄存器器的指令令,则CCPU至至少再执执行一条条指令才才应中断断。这些些都是与与中断有有关的,如如果正访访问IPP、IEE则可能能会开、关中断断或改变变中断的的优先级级,而中中断返回回指令则则说明本本次中断断还没有有处理完完,所以以都要等等本指令令处理结结束,再再执行一一条指令令才可以以响应中中
14、断。 2、中中断响应应过程CPPU响应应中断时时,首先先把当前前指令的的下一条条指令(就就是中断断返回后后将要执执行的指指令)的的地址送送入堆栈栈,然后后根据中中断标记记,将相相应的中中断入口口地址送送入PCC,PCC是程序序指针,CCPU取取指令就就根据PPC中的的值,PPC中是是什么值值,就会会到什么么地方去去取指令令,所以以程序就就会转到到中断入入口处继继续执行行。这些些工作都都是由硬硬件来完完成的,不不必我们们去考虑虑。这里里还有个个问题,大大家是否否注意到到,每个个中断向向量地址址只间隔隔了8个个单元,如如000030000BB,在如如此少的的空间中中如何完完成中断断程序呢呢?很简简
15、单,你你在中断断处安排排一个LLJMPP指令,不不就可以以把中断断程序跳跳转到任任何地方方了吗? 一个个完整的的主程序序看起来来应该是是这样的的:ORG 00000HLJMPP STTARTTORG 00003HLJMPP INNT0 ;转外外中断00ORG 0000BH。 RETTI ;没有用用定时器器0中断,在此放放一条RRETII,万一一 “不小小心“产生了了中断,也不会会有太大大的后果果。中断断程序完完成后,一一定要执执行一条条RETTI指令令,执行行这条指指令后,CCPU将将会把堆堆栈中保保存着的的地址取取出,送送回PCC,那么么程序就就会从主主程序的的中断处处继续往往下执行行了。注注意:CCPU所所做的保保护工作作是很有有限的,只只保护了了一个地地址,而而其它的的所有东东西都不不保护,所所以如果果你在主主程序中中用到了了如A、PSWW等,在在中断程程序中又又要用它它们,还还要保证证回到主主程序后后这里面面数据还还是没执执行中断断以前的的数据,就就得自己己保护起起来。
限制150内