《中断系统》PPT课件 (2).ppt
5.2 中断处理过程中断处理过程 中断处理流程中断处理流程 中断嵌套中断嵌套 中断的应用实例中断的应用实例 图5-3 中断流程图中断处理流程 中断处理过程可分为中断处理过程可分为中断请求、中断响应、中中断请求、中断响应、中断处理和中断返回四个阶断处理和中断返回四个阶段。不同的计算机因其中段。不同的计算机因其中断系统的硬件结构不同,断系统的硬件结构不同,因此,中断响应的方式也因此,中断响应的方式也有所不同。这里仅以有所不同。这里仅以8051单片机为例进行叙述。其单片机为例进行叙述。其主要内容及一般顺序如图主要内容及一般顺序如图5-3所示。所示。1中断请求中断请求中断源发出中断请求信号,相应的中断请求中断源发出中断请求信号,相应的中断请求标志位(在中断允许控制寄存器标志位(在中断允许控制寄存器TCON中)置中)置“1”。CPU将不断地及时查询这些中断请求标将不断地及时查询这些中断请求标志,一旦查询到某个中断请求标志置位,志,一旦查询到某个中断请求标志置位,CPU就会响应该中断源中断。就会响应该中断源中断。2.中断响应中断响应CPU的中断响应条件的中断响应条件CPU响应中断必须首先满足以下三个基本条件。响应中断必须首先满足以下三个基本条件。(1)有中断源发出中断请求。有中断源发出中断请求。(2)中断总允许位中断总允许位EA=1,即即CPU开中断。开中断。(3)申请中断的中断源的中断允许位为申请中断的中断源的中断允许位为1,即中断没有被屏即中断没有被屏蔽。蔽。在满足以上条件的基础上,若有下列任何一种情况存在满足以上条件的基础上,若有下列任何一种情况存在,中断响应都会受到阻断。在,中断响应都会受到阻断。(1)CPU正在执行一个同级或高优先级的中断服务程序。正在执行一个同级或高优先级的中断服务程序。(2)正在执行的指令尚未执行完。正在执行的指令尚未执行完。(3)正在执行中断返回指令正在执行中断返回指令 RETI或者对专用寄存器或者对专用寄存器IE、IP进行读进行读/写的指令。写的指令。CPU在执行完上述指令之后,要在执行完上述指令之后,要再执行一条指令,才能响应中断请求。再执行一条指令,才能响应中断请求。中断优先级的判定中断优先级的判定中断优先级的判定中断优先级的判定中断源的优先级别分为中断源的优先级别分为中断源的优先级别分为中断源的优先级别分为高级高级高级高级和和和和低级低级低级低级,通过由软件,通过由软件,通过由软件,通过由软件设置中断优先级寄存器设置中断优先级寄存器设置中断优先级寄存器设置中断优先级寄存器IPIP相关位来设定每个中断相关位来设定每个中断相关位来设定每个中断相关位来设定每个中断源的级别。源的级别。源的级别。源的级别。如果几个同一优先级别的中断源同时向如果几个同一优先级别的中断源同时向如果几个同一优先级别的中断源同时向如果几个同一优先级别的中断源同时向CPUCPU请求请求请求请求中断,中断,中断,中断,CPUCPU通过硬件查询电路首先响应通过硬件查询电路首先响应通过硬件查询电路首先响应通过硬件查询电路首先响应自然优先自然优先自然优先自然优先级较高级较高级较高级较高的中断源的中断请求。的中断源的中断请求。的中断源的中断请求。的中断源的中断请求。中断可实现两级中断可实现两级中断可实现两级中断可实现两级中断嵌套中断嵌套中断嵌套中断嵌套。高优先级中断源可中高优先级中断源可中高优先级中断源可中高优先级中断源可中断正在执行的低优先级中断服务程序,除非执行断正在执行的低优先级中断服务程序,除非执行断正在执行的低优先级中断服务程序,除非执行断正在执行的低优先级中断服务程序,除非执行了低优先级中断服务程序的了低优先级中断服务程序的了低优先级中断服务程序的了低优先级中断服务程序的CPUCPU关中断指令。同关中断指令。同关中断指令。同关中断指令。同级或低优先级的中断不能中断正在执行的中断服级或低优先级的中断不能中断正在执行的中断服级或低优先级的中断不能中断正在执行的中断服级或低优先级的中断不能中断正在执行的中断服务程序。务程序。务程序。务程序。中断响应过程中断响应过程中断响应过程中断响应过程在满足在满足在满足在满足中断响应条件时,中断响应条件时,中断响应条件时,中断响应条件时,CPUCPU响应中断。响应中断。响应中断。响应中断。首先,首先,首先,首先,将相应的优先级状态触发器置将相应的优先级状态触发器置将相应的优先级状态触发器置将相应的优先级状态触发器置1 1,即关闭同,即关闭同,即关闭同,即关闭同级和低级中断。级和低级中断。级和低级中断。级和低级中断。其次,其次,其次,其次,调用入口地址,断点入栈,相当于调用入口地址,断点入栈,相当于调用入口地址,断点入栈,相当于调用入口地址,断点入栈,相当于LCALLLCALL指令,但不保护状态寄存器指令,但不保护状态寄存器指令,但不保护状态寄存器指令,但不保护状态寄存器PSWPSW及其他寄存器内容。及其他寄存器内容。及其他寄存器内容。及其他寄存器内容。保存断点,(保存断点,(保存断点,(保存断点,(PCPC)栈顶单元栈顶单元栈顶单元栈顶单元然后,然后,然后,然后,将中断源对应的将中断源对应的将中断源对应的将中断源对应的中断入口地址装入程序计数中断入口地址装入程序计数中断入口地址装入程序计数中断入口地址装入程序计数器器器器PCPC中,使程序转向该中断入口地址,并执行中中,使程序转向该中断入口地址,并执行中中,使程序转向该中断入口地址,并执行中中,使程序转向该中断入口地址,并执行中断服务程序。断服务程序。断服务程序。断服务程序。硬件自动清除硬件自动清除硬件自动清除硬件自动清除TF0TF0、TF1TF1、IE0IE0、IE1IE1中断标志(串行口中断中断标志(串行口中断中断标志(串行口中断中断标志(串行口中断请求标志请求标志请求标志请求标志 RIRI和和和和 TITI除外)。除外)。除外)。除外)。80C5180C51五个中断入口地址如下:五个中断入口地址如下:五个中断入口地址如下:五个中断入口地址如下:中断入口地址是固定的,其排列顺序按照自然中断入口地址是固定的,其排列顺序按照自然中断入口地址是固定的,其排列顺序按照自然中断入口地址是固定的,其排列顺序按照自然优先权排列,相互之间间隔优先权排列,相互之间间隔优先权排列,相互之间间隔优先权排列,相互之间间隔8B8B。一般来说,。一般来说,。一般来说,。一般来说,8B8B空间安排不下一个中断服务程序,但可安排一空间安排不下一个中断服务程序,但可安排一空间安排不下一个中断服务程序,但可安排一空间安排不下一个中断服务程序,但可安排一条转移指令,跳转到其他合适的区域编写真正条转移指令,跳转到其他合适的区域编写真正条转移指令,跳转到其他合适的区域编写真正条转移指令,跳转到其他合适的区域编写真正的中断服务程序。的中断服务程序。的中断服务程序。的中断服务程序。中断源中断源中断源中断源 中断入口地址中断入口地址中断入口地址中断入口地址 /INT0/INT0 PC=0003H PC=0003H T0 T0 PC=000BH PC=000BH /INT1/INT1 PC=0013H PC=0013H T1 T1 PC=001BH PC=001BH 串行口串行口串行口串行口 PC=0023H PC=0023H 3.中断处理中断处理 中断处理就是执行中断服务程序,从中断入口地址中断处理就是执行中断服务程序,从中断入口地址开始执行,直到返回指令开始执行,直到返回指令(RETI)为止。此过程一般为止。此过程一般包括三部分内容,一是包括三部分内容,一是保护现场保护现场,二是,二是处理中断源处理中断源的请求的请求,三是,三是恢复现场恢复现场。中断服务程序一般包含以下几个部分。中断服务程序一般包含以下几个部分。(1)现场保护和现场恢复)现场保护和现场恢复为了使中断服务程序的执行不破坏为了使中断服务程序的执行不破坏CPU中寄存器中寄存器或存储单元的原有内容,以免在中断返回后影响或存储单元的原有内容,以免在中断返回后影响主程序的运行,应该把主程序的运行,应该把CPU中有关寄存器或存储中有关寄存器或存储单元的内容推入堆栈中保护起来,这就是所谓的单元的内容推入堆栈中保护起来,这就是所谓的现场保护,通常是指现场保护,通常是指ACC、PSW和和DPTR等。等。中断服务结束后,在返回主程序前,须把保存的中断服务结束后,在返回主程序前,须把保存的现场从堆栈中弹出,以恢复寄存器存储单元的原现场从堆栈中弹出,以恢复寄存器存储单元的原有内容,这就是所谓现场恢复。对于有内容,这就是所谓现场恢复。对于80C51,利,利用堆栈保护和恢复现场需要遵循先进后出、后进用堆栈保护和恢复现场需要遵循先进后出、后进先出的原则。先出的原则。说明:说明:(2)开中断和关中断)开中断和关中断在中断处理进行的过程中,可能又有新的中断在中断处理进行的过程中,可能又有新的中断请求到来,如果禁止被中断,可以先关闭中断系请求到来,如果禁止被中断,可以先关闭中断系统,待任务执行完后再打开中断系统。当然,如统,待任务执行完后再打开中断系统。当然,如系统本身需要中断嵌套,则不能将中断系统关闭,系统本身需要中断嵌套,则不能将中断系统关闭,所有中断的发生按照系统所有中断的发生按照系统“优先级优先级”的设置自动的设置自动“决策决策”行事。行事。(3)中断服务程序主体)中断服务程序主体中断服务程序主体是进行中断处理的具体内容,中断服务程序主体是进行中断处理的具体内容,以子程序的形式存在,任何中断发生并被响应后,以子程序的形式存在,任何中断发生并被响应后,程序将自动进入相关的入口地址,执行中断服务程序将自动进入相关的入口地址,执行中断服务程序。程序。在编写中断服务程序时要注意以下几个方面:在编写中断服务程序时要注意以下几个方面:l一般在这些一般在这些中断入口地址区中断入口地址区存放一条无条件转移指存放一条无条件转移指令,转向中断服务程序的起始地址。令,转向中断服务程序的起始地址。l若要求禁止更高优先级中断源的中断请求,应先用若要求禁止更高优先级中断源的中断请求,应先用软件关闭软件关闭CPU中断或屏蔽更高级中断源的中断,在中断或屏蔽更高级中断源的中断,在中断返回前再开放被关闭或被屏蔽的中断。中断返回前再开放被关闭或被屏蔽的中断。l在保护现场和恢复现场时,为了不使现场数据受到在保护现场和恢复现场时,为了不使现场数据受到破坏而造成混乱,在保护现场之前要关中断,在保破坏而造成混乱,在保护现场之前要关中断,在保护现场之后再开中断;在恢复现场之前关中断,在护现场之后再开中断;在恢复现场之前关中断,在恢复现场之后再开中断。恢复现场之后再开中断。4.中断返回中断返回(1)中断返回)中断返回中断返回是把程序运行从中断服务程序转回到被中中断返回是把程序运行从中断服务程序转回到被中断的主程序上去,中断返回通过执行中断返回指令断的主程序上去,中断返回通过执行中断返回指令RETI来实现,该指令的功能是首先将相应的来实现,该指令的功能是首先将相应的优先级优先级状态触发器置状态触发器置0,以开放同级别中断源的中断请求;,以开放同级别中断源的中断请求;其次,从堆栈区把其次,从堆栈区把断点地址断点地址取出,送回到取出,送回到程序计数程序计数器器PC中。中。因此,因此,不能用不能用RET指令代替指令代替RETI指令,而且这条指指令,而且这条指令必然是中断服务程序的最后一条指令。令必然是中断服务程序的最后一条指令。当当CPU执行执行RETI指令后,自动完成下列操作:指令后,自动完成下列操作:恢复断点地址。将原来压入堆栈的恢复断点地址。将原来压入堆栈的PC断点地址断点地址从堆栈中弹出,送回从堆栈中弹出,送回PC。这样。这样CPU就返回到原断就返回到原断点处,继续执行被中断的原程序。点处,继续执行被中断的原程序。开放同级中断,以便允许同级中断源请求中断。开放同级中断,以便允许同级中断源请求中断。以上响应过程的大部分操作是以上响应过程的大部分操作是CPU自动完成的,自动完成的,用户只需要了解基本原理就可以,需要做的事情用户只需要了解基本原理就可以,需要做的事情是编制中断服务程序,并在此之前完成中断初始是编制中断服务程序,并在此之前完成中断初始化。化。(4)中断请求的撤除)中断请求的撤除中断源发出中断请求,相应中断请求标志置中断源发出中断请求,相应中断请求标志置“1”。CPU响响应中断后,必须清除中断请求应中断后,必须清除中断请求“1”标志;否则中断响应返回标志;否则中断响应返回后,将再次进入该中断,引起死循环出错。如何撤除中断请后,将再次进入该中断,引起死循环出错。如何撤除中断请求标志的说明如下:求标志的说明如下:定时器溢出中断请求的撤除:定时器溢出中断请求的撤除:对于定时器对于定时器0或或1溢出中断,溢出中断,CPU在响应中断后即由硬件自动在响应中断后即由硬件自动清除其中断标志位清除其中断标志位TF0或或TF1,用户无须采取其他措施。,用户无须采取其他措施。串行口中断的撤除:串行口中断的撤除:对于串行口中断,对于串行口中断,CPU在响应中断后,在响应中断后,硬件不能自动清除中硬件不能自动清除中断请求标志位断请求标志位TITI、RIRI,用户必须在中断服务程序中用软件将,用户必须在中断服务程序中用软件将其清除(如其清除(如CLR RICLR RI)。)。对于外中断对于外中断/INT0、/INT1,若采用边沿触发方式,若采用边沿触发方式,CPUCPU响应响应中断时,也由硬件自动清除响应的中断请求标志中断时,也由硬件自动清除响应的中断请求标志IE0IE0或或IE1IE1。外部中断的撤除:外部中断的撤除:l外部中断为外部中断为边沿触发方式边沿触发方式时,时,CPU响应中断后,硬响应中断后,硬件会件会自动清除自动清除中断请求标志中断请求标志IE0或或IEl。l外部中断为外部中断为电平触发方式电平触发方式时,时,CPU响应中断后,硬响应中断后,硬件会自动清除中断请求标志件会自动清除中断请求标志IE0或或IEl,但由于加到,但由于加到INT0或或INT1引脚的外部中断请求信号并未撤除,引脚的外部中断请求信号并未撤除,中断请求标志中断请求标志IE0或或IEl会再次被置会再次被置1,所以在,所以在CPU响应中断后应立即撤除响应中断后应立即撤除INT0或或INT1引脚上的低电引脚上的低电平。一般采用加一个平。一般采用加一个D触发器和几条指令的方法来触发器和几条指令的方法来解决这个问题。解决这个问题。l l由下图可知,外部中断请求信号直接加到由下图可知,外部中断请求信号直接加到由下图可知,外部中断请求信号直接加到由下图可知,外部中断请求信号直接加到D D触发器触发器触发器触发器的的的的CPCP端,当外部中断请求的低电平脉冲信号出现端,当外部中断请求的低电平脉冲信号出现端,当外部中断请求的低电平脉冲信号出现端,当外部中断请求的低电平脉冲信号出现在在在在CPCP端时,端时,端时,端时,D D触发器的触发器的触发器的触发器的QQ端置端置端置端置0 0,INT0INT0或或或或INT1INT1引脚引脚引脚引脚为低电平,发出中断请求。在中断服务程序中开始为低电平,发出中断请求。在中断服务程序中开始为低电平,发出中断请求。在中断服务程序中开始为低电平,发出中断请求。在中断服务程序中开始的三条指令可先在的三条指令可先在的三条指令可先在的三条指令可先在P1.0P1.0输出一个宽度为输出一个宽度为输出一个宽度为输出一个宽度为2 2个机器周个机器周个机器周个机器周期的负脉冲,使期的负脉冲,使期的负脉冲,使期的负脉冲,使D D触发器的触发器的触发器的触发器的QQ端置端置端置端置1 1,然后由软件来,然后由软件来,然后由软件来,然后由软件来清除中断请求标志清除中断请求标志清除中断请求标志清除中断请求标志IE0IE0或或或或IElIEl。外部中断的撤除电路外部中断的撤除电路外部中断的撤除电路外部中断的撤除电路中断优先控制和中断嵌套(补充)中断优先控制和中断嵌套(补充)中断优先控制和中断嵌套(补充)中断优先控制和中断嵌套(补充)1 1中断优先控制中断优先控制中断优先控制中断优先控制80C5180C51中断优先控制首先根据中断优先级,此外,还规定中断优先控制首先根据中断优先级,此外,还规定中断优先控制首先根据中断优先级,此外,还规定中断优先控制首先根据中断优先级,此外,还规定了了了了同一中断优先级之间的中断优先权同一中断优先级之间的中断优先权同一中断优先级之间的中断优先权同一中断优先级之间的中断优先权。其从高到低的顺序。其从高到低的顺序。其从高到低的顺序。其从高到低的顺序为:为:为:为:/INT0/INT0、T0T0、/INT1/INT1、T1T1、串行口。、串行口。、串行口。、串行口。中断优先级是可编程的,而中断优先权是固定的,不能设中断优先级是可编程的,而中断优先权是固定的,不能设中断优先级是可编程的,而中断优先权是固定的,不能设中断优先级是可编程的,而中断优先权是固定的,不能设置,仅用于同级中断源同时请求中断时的优先次序。因此置,仅用于同级中断源同时请求中断时的优先次序。因此置,仅用于同级中断源同时请求中断时的优先次序。因此置,仅用于同级中断源同时请求中断时的优先次序。因此80C5180C51中断优先控制的中断优先控制的中断优先控制的中断优先控制的基本原则基本原则基本原则基本原则是:是:是:是:(1 1)高优先级中断可以中断正在响应的低优先级中断,)高优先级中断可以中断正在响应的低优先级中断,)高优先级中断可以中断正在响应的低优先级中断,)高优先级中断可以中断正在响应的低优先级中断,反之则不能。反之则不能。反之则不能。反之则不能。(2 2)同优先级中断不能互相中断。)同优先级中断不能互相中断。)同优先级中断不能互相中断。)同优先级中断不能互相中断。(3 3)同一中断优先级中,若有多个中断源同时请求中断,)同一中断优先级中,若有多个中断源同时请求中断,)同一中断优先级中,若有多个中断源同时请求中断,)同一中断优先级中,若有多个中断源同时请求中断,CPUCPU将先响应优先权高的中断,后响应优先权低的中断。将先响应优先权高的中断,后响应优先权低的中断。将先响应优先权高的中断,后响应优先权低的中断。将先响应优先权高的中断,后响应优先权低的中断。图图5-5 中断嵌套示意图中断嵌套示意图2 2中断嵌套中断嵌套中断嵌套中断嵌套当当当当CPUCPU正在执行某个中断服务程序时,如果发生更高一级的中正在执行某个中断服务程序时,如果发生更高一级的中正在执行某个中断服务程序时,如果发生更高一级的中正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,那么断源请求中断,那么断源请求中断,那么断源请求中断,那么CPUCPU可以再可以再可以再可以再“中断中断中断中断”正在执行的低优先级正在执行的低优先级正在执行的低优先级正在执行的低优先级中断服务程序,转而响应更高一级的中断,这就是中断嵌套。中断服务程序,转而响应更高一级的中断,这就是中断嵌套。中断服务程序,转而响应更高一级的中断,这就是中断嵌套。中断服务程序,转而响应更高一级的中断,这就是中断嵌套。其示意图如图其示意图如图其示意图如图其示意图如图5-55-5所示。所示。所示。所示。中断嵌套只能中断嵌套只能中断嵌套只能中断嵌套只能高优先级高优先级高优先级高优先级“中断中断中断中断”低优先级低优先级低优先级低优先级,低优先级不能,低优先级不能,低优先级不能,低优先级不能“中中中中断断断断”高优先级,同一优先级也不能相互高优先级,同一优先级也不能相互高优先级,同一优先级也不能相互高优先级,同一优先级也不能相互“中断中断中断中断”。中断嵌套结构类似于调用子程序嵌套,中断嵌套结构类似于调用子程序嵌套,中断嵌套结构类似于调用子程序嵌套,中断嵌套结构类似于调用子程序嵌套,不同的是不同的是不同的是不同的是:(1 1)子程序嵌套是在程序中事先安排好的;中断嵌套是随机)子程序嵌套是在程序中事先安排好的;中断嵌套是随机)子程序嵌套是在程序中事先安排好的;中断嵌套是随机)子程序嵌套是在程序中事先安排好的;中断嵌套是随机发生的。发生的。发生的。发生的。(2 2)子程序嵌套无次序限制,中断嵌套只允许高优先级)子程序嵌套无次序限制,中断嵌套只允许高优先级)子程序嵌套无次序限制,中断嵌套只允许高优先级)子程序嵌套无次序限制,中断嵌套只允许高优先级“中中中中断断断断”低优先级。低优先级。低优先级。低优先级。中断系统的应用中断系统的应用中断系统的应用中断系统的应用中断系统的应用要解决的问题首先是编制中断应用程中断系统的应用要解决的问题首先是编制中断应用程中断系统的应用要解决的问题首先是编制中断应用程中断系统的应用要解决的问题首先是编制中断应用程序,其次是熟悉中断过程。编制应用程序包括两大部序,其次是熟悉中断过程。编制应用程序包括两大部序,其次是熟悉中断过程。编制应用程序包括两大部序,其次是熟悉中断过程。编制应用程序包括两大部分内容:中断初始化和中断服务子程序。分内容:中断初始化和中断服务子程序。分内容:中断初始化和中断服务子程序。分内容:中断初始化和中断服务子程序。1 1中断初始化中断初始化中断初始化中断初始化(1 1)设置堆栈指针)设置堆栈指针)设置堆栈指针)设置堆栈指针SPSP,根据要保护数据的个数,设置,根据要保护数据的个数,设置,根据要保护数据的个数,设置,根据要保护数据的个数,设置堆栈深度。堆栈深度。堆栈深度。堆栈深度。深度要求不高并且不用寄存器深度要求不高并且不用寄存器深度要求不高并且不用寄存器深度要求不高并且不用寄存器1 13 3组时,可维持复组时,可维持复组时,可维持复组时,可维持复位时的状态:位时的状态:位时的状态:位时的状态:SP=07HSP=07H,深度为,深度为,深度为,深度为24B24B(20H20H2FH2FH为位为位为位为位寻址区)。寻址区)。寻址区)。寻址区)。要求有一定深度时,可设置要求有一定深度时,可设置要求有一定深度时,可设置要求有一定深度时,可设置SP=60HSP=60H或或或或50H50H,深度分,深度分,深度分,深度分别为别为别为别为32B32B和和和和48B48B。一般建议将一般建议将一般建议将一般建议将SPSP改为改为改为改为60H60H或或或或50H50H。(2 2)定义中断优先级。根据中断源的紧急程度,通过)定义中断优先级。根据中断源的紧急程度,通过)定义中断优先级。根据中断源的紧急程度,通过)定义中断优先级。根据中断源的紧急程度,通过设置设置设置设置IPIP寄存器,将中断优先级划分为高优先级和低优寄存器,将中断优先级划分为高优先级和低优寄存器,将中断优先级划分为高优先级和低优寄存器,将中断优先级划分为高优先级和低优先级。先级。先级。先级。(3 3)定义外中断触发方式。)定义外中断触发方式。)定义外中断触发方式。)定义外中断触发方式。外中断触发一般宜采用边沿触发方式,若必须采外中断触发一般宜采用边沿触发方式,若必须采外中断触发一般宜采用边沿触发方式,若必须采外中断触发一般宜采用边沿触发方式,若必须采用电平触发方式时,应在硬件电路上和中断服务用电平触发方式时,应在硬件电路上和中断服务用电平触发方式时,应在硬件电路上和中断服务用电平触发方式时,应在硬件电路上和中断服务程序中采取撤除中断请求信号的措施。程序中采取撤除中断请求信号的措施。程序中采取撤除中断请求信号的措施。程序中采取撤除中断请求信号的措施。(4 4)开放中断。)开放中断。)开放中断。)开放中断。通过设置通过设置通过设置通过设置IEIE寄存器,开放用户所需要打开的中断。寄存器,开放用户所需要打开的中断。寄存器,开放用户所需要打开的中断。寄存器,开放用户所需要打开的中断。对对对对IEIE操作可以采用字节操作,也可以采用位操作,操作可以采用字节操作,也可以采用位操作,操作可以采用字节操作,也可以采用位操作,操作可以采用字节操作,也可以采用位操作,如:如:如:如:MOV IE,#81HMOV IE,#81H或或或或 SETB EA,SETB EX0SETB EA,SETB EX0。(5 5)安排好等待中断或中断发生前主程序应完成)安排好等待中断或中断发生前主程序应完成)安排好等待中断或中断发生前主程序应完成)安排好等待中断或中断发生前主程序应完成的操作内容,如内存单元的初始化等。的操作内容,如内存单元的初始化等。的操作内容,如内存单元的初始化等。的操作内容,如内存单元的初始化等。2 2中断服务子程序中断服务子程序中断服务子程序中断服务子程序中断服务子程序内容包括:中断服务子程序内容包括:中断服务子程序内容包括:中断服务子程序内容包括:(1 1)在中断服务入口地址设置一条跳转指令,转)在中断服务入口地址设置一条跳转指令,转)在中断服务入口地址设置一条跳转指令,转)在中断服务入口地址设置一条跳转指令,转移到中断服务程序的实际入口处。移到中断服务程序的实际入口处。移到中断服务程序的实际入口处。移到中断服务程序的实际入口处。(2 2)根据需要保护现场。)根据需要保护现场。)根据需要保护现场。)根据需要保护现场。(3 3)中断源请求中断服务要求的操作。)中断源请求中断服务要求的操作。)中断源请求中断服务要求的操作。)中断源请求中断服务要求的操作。(4 4)恢复现场。与保护现场相对应,注意遵循先)恢复现场。与保护现场相对应,注意遵循先)恢复现场。与保护现场相对应,注意遵循先)恢复现场。与保护现场相对应,注意遵循先进后出、后进先出操作原则。进后出、后进先出操作原则。进后出、后进先出操作原则。进后出、后进先出操作原则。(5 5)中断返回,最后一条指令必须是)中断返回,最后一条指令必须是)中断返回,最后一条指令必须是)中断返回,最后一条指令必须是RETIRETI。编写编写编写编写中断服务程序中断服务程序中断服务程序中断服务程序时应注意时应注意时应注意时应注意 在中断矢量地址单元处放一条无条件转移指令在中断矢量地址单元处放一条无条件转移指令在中断矢量地址单元处放一条无条件转移指令在中断矢量地址单元处放一条无条件转移指令(如如如如LJMP HLJMP H),使中断服务程序可灵活地安排在),使中断服务程序可灵活地安排在),使中断服务程序可灵活地安排在),使中断服务程序可灵活地安排在64KB64KB程序存储器的任何空间。程序存储器的任何空间。程序存储器的任何空间。程序存储器的任何空间。在中断服务程序中,用户应注意用软件保护现场,在中断服务程序中,用户应注意用软件保护现场,在中断服务程序中,用户应注意用软件保护现场,在中断服务程序中,用户应注意用软件保护现场,以免中断返回后丢失原寄存器、累加器中的信息。以免中断返回后丢失原寄存器、累加器中的信息。以免中断返回后丢失原寄存器、累加器中的信息。以免中断返回后丢失原寄存器、累加器中的信息。若要在执行当前中断程序时禁止更高优先级中断,若要在执行当前中断程序时禁止更高优先级中断,若要在执行当前中断程序时禁止更高优先级中断,若要在执行当前中断程序时禁止更高优先级中断,可以先用软件关闭可以先用软件关闭可以先用软件关闭可以先用软件关闭CPUCPU中断或禁止某中断源中断,在中断或禁止某中断源中断,在中断或禁止某中断源中断,在中断或禁止某中断源中断,在中断返回前再开放中断。中断返回前再开放中断。中断返回前再开放中断。中断返回前再开放中断。中断的完整程序结构 中断入口表程序中断入口表程序 主程序主程序 中断服务程序中断服务程序(其它子程序)(其它子程序)源程序汇编结束伪指令源程序汇编结束伪指令 入口表程序入口表程序ORG 0000HLJMP MAIN ;跳到主程序入口跳到主程序入口ORG 0003HLJMP RINT0 ;跳到跳到/INT0 中服程序入口中服程序入口ORG 000BHLJMP RT0 ;跳到跳到 T0 中服程序入口中服程序入口ORG 0013HLJMP RINT1 ;跳到跳到/INT1 中服程序入口中服程序入口ORG 001BHLJMP RT1 ;跳到跳到 T1 中服程序入口中服程序入口ORG 0023HLJMP RPS ;跳到串行口中服程序入口跳到串行口中服程序入口 主程序(主程序(MAIN)MAIN:MOV A,R0 ;主程序入口主程序入口 SETB EA SJMP$;主程序结束主程序结束 主程序的内容主程序的内容 应用系统相关的指令语句应用系统相关的指令语句 对与中断相关寄存器进行置位操作对与中断相关寄存器进行置位操作注:注:SJMP$或或 LOOP:SJMP LOOP 语句为等待中断产生。语句为等待中断产生。中断服务程序(中断服务程序(RINT0)RINT0:PUSH ACC ;中断服务程序入口中断服务程序入口 PUSH PSW ;保护现场保护现场 POP PSW POP ACC ;恢复现场恢复现场 RETI ;退出中断服务程序退出中断服务程序注:注:RETI 指令恢复指令恢复 PC 断点为指向断点为指向 SJMP$。注:注:保护保护/恢复现场为中断服务程序中要用的存储器。恢复现场为中断服务程序中要用的存储器。采用中断时的完整程序结构采用中断时的完整程序结构 ORG 0000H LJMP MAIN ;跳到主程序入口跳到主程序入口 ORG 0003H LJMP RINT0 ;跳到跳到/INT0 中服程序入口中服程序入口 MAIN:SETB EA ;主程序入口主程序入口 SJMP$;主程序结束主程序结束RINT0:PUSH ACC ;中断服务程序入口中断服务程序入口 RETI ;退出中断服务程序退出中断服务程序 END ;结束汇编结束汇编表表程序程序主程序主程序中服中服程序程序 ORGORG0000H 0000H LJMPLJMPMAINMAIN ORGORG0013H0013H LJMPLJMPZD1ZD1 ORGORG0100H0100H MAIN:MAIN:;主程序;主程序;主程序;主程序 ORGORG1000H 1000H ZD1:ZD1:PUSH PUSHACCACC;中断服务程序;中断服务程序;中断服务程序;中断服务程序 PUSHPUSHDPHDPH PUSHPUSHDPLDPL PUSHPUSH00H00H;处理程序;处理程序;处理程序;处理程序 POPPOP00H00H POPPOPDPLDPL POPPOPDPHDPH POPPOPACCACC RETIRETI例如,现有外部中断例如,现有外部中断1提出申请,且主程序中有提出申请,且主程序中有R0、DPTR、累、累加器加器A需保护,则编制程序应为:需保护,则编制程序应为:【例例1】P1口做输出口,控制八只灯口做输出口,控制八只灯(P1口输出低电平口输出低电平时灯被点亮时灯被点亮),利用手控单脉冲信号作为外部中断,利用手控单脉冲信号作为外部中断信号,控制八只灯按一定的规律循环点亮。信号,控制八只灯按一定的规律循环点亮。解:手控单脉冲信号作为外部中断信号由解:手控单脉冲信号作为外部中断信号由INT0(P3.2)管脚输入,设置中断允许寄存器管脚输入,设置中断允许寄存器IE中的中的EA、EX0位为位为1;只有一个中断源可不设置优先级别;中断;只有一个中断源可不设置优先级别;中断触发方式设为边沿触发,控制位触发方式设为边沿触发,控制位IT0应设置为应设置为1。ORG 0000HORG 0000H;程序入口程序入口程序入口程序入口0000H0000H02 00 5002 00 50 LJMP MAINLJMP MAIN;转向主程序转向主程序转向主程序转向主程序 ORG 0003HORG 0003H;外部中断外部中断外部中断外部中断0 0的入口地址的入口地址的入口地址的入口地址0003H0003H02 01 0002 01 00 LJMP INT LJMP INT;转向中断服务程序转向中断服务程序转向中断服务程序转向中断服务程序 ORG 0050H ORG 0050H0050H0050HD2 AFD2 AFMAINMAIN:SETB EASETB EA0052H0052HD2 A8D2 A8 SETB EX0SETB EX00054H0054HD2 88D2 88 SETB IT0SETB IT0;中断触发方式为边沿触发中断触发方式为边沿触发中断触发方式为边沿触发中断触发方式为边沿触发0056H0056H74 FE74 FE MOV A,#0FEHMOV A,#0FEH0058H0058HF5 90F5 90 MOV P1,AMOV P1,A005AH005AH80 FE80 FE SJMP$SJMP$ORG 0100HORG 0100H0100H0100H2323 INTINT:RL ARL A;中断服务程序中断服务程序中断服务程序中断服务程序0101H0101HF5 90F5 90 MOV P1,AMOV P1,A0103H0103H3232 RETIRETI ENDEND参考程序:参考程序:【例例2】P1口做输出口,正常时控制八只灯口做输出口,正常时控制八只灯(P1口输出口输出低电平时灯被点亮低电平时灯被点亮)每隔每隔0.5秒全亮全灭一次;按下秒全亮全灭一次;按下开关开关1八只灯从右向左依次点亮,按下开关八只灯从右向左依次点亮,按下开关2八只灯八只灯从左向右依次点亮。从左向右依次点亮。解:开关解:开关1的低电平脉冲信号作为外部中断信号由的低电平脉冲信号作为外部中断信号由INT0(P3.2)管脚输入,开关管脚输入,开关2的低电平信号作为外的低电平信号作为外部中断信号由部中断信号由INT1(P3.3)管脚输入。中断允许寄存管脚输入。中断允许寄存器器IE中相应的中相应的EA、EX1、EX0位设置为位设置为1。外部中断外部中断0为低优先级,为低优先级,IP中的中的PX0位设置为位设置为0;外;外部中断部中断1为高优先级,为高优先级,IP中的中的PX1位设置为位设置为1。外部中断外部中断0的中断触发方式设为边沿触发,控制位的中断触发方式设为边沿触发,控制位IT0应设置为应设置为1;外部中断;外部中断1的中断触发方式设为电的中断触发方式设为电平触发,控制位平触发,控制位IT1应设置为应设置为0。ORG 0000HORG 0000H;程序入口程序入口程序入口程序入口0000H0000H02 00 3002 00 30 LJMP MAINLJMP MAIN;转向主程序转向主程序转向主程序转向主程序 ORG 0003HORG 0003H;外部中断外部中断外部中断外部中断0 0的入口地址的入口地址的入口地址的入口地址0003H0003H02 01 0002 01 00 LJMP INT0LJMP INT0;转向外部中断转向外部中断转向外部中断转向外部中断0 0中断服务程序中断服务程序中断服务程序中断服务程序 ORG 0013HORG 0013H;外部中断外部中断外部中断外部中断1 1的入口地址的入口地址的入口地址的入口地址0013H0013H02 02 0202 00 00 LJMP INT1LJMP INT1;转向外部中断转向外部中断转向外部中断转向外部中断1 1中断服务程序中断服务程序中断服务程序中断服务程序 ORG 0030HORG 0030H0030H0030H75 81 3075 81 30MAINMAIN:MOV SP,#30HMOV SP,#30H0033H0033H75 A8 8575 A8 85 MOV IE,#85HMOV IE,#85H;允许外部中断允许外部中断允许外部中断允许外部中断0 0、外部中断、外部中断、外部中断、外部中断1 1中断中断中断中断0036H0036H75 B8 0475 B8 04 MOV IP,#04HMOV IP,#04H;外部中断外部中断外部中断外部中断1 1为高优先级为高优先级为高优先级为高优先级0039H0039H75 88 0175 88 01 MOV TCON,#01HMOV TCON,#01H;外部中断外部中断外部中断外部中断0 0为边沿触发为边沿触发为边沿触发为边沿触发003CH003CH74 0074 00 MOV A,#0