资源描述
点击添加标题,二级标题,三级标题,四级标题,Copyright,Http:/,*,.,点击添加标题,二级标题,三级标题,四级标题,*,AT89S51单片机的中断系统,本章主要内容,中断的概念和应用,AT89S51中断系统结构,与中断相关的SFR及中断控制,外部中断,C51中断函数编程举例,2,微机的输入输出方式,(1)无条件传送方式,(2)查询传送方式,(3)直接存储器存取(DMA)方式,(4)中断方式,3,无条件传送方式,无条件传送方式在这种传送方式下,CPU不需要了解外设的状态,只要在程序中加入访问外设的指令,就可实现CPU与外设之间的数据传送。此种方法控制简单,但数据传送时,由于不知道外设的状态,传送数据时容易出错。,4,查询传送方式,查询传送方式在这种传送方式下,CPU在传送数据之前,要不断查询外部设备是否处于“准备好”状态,因此需占用CPU的大量时间,效率较低。,5,DMA方式,DMA方式是让CPU不再控制数据总线,使外部设备和存储器之间直接传送(不通过CPU)的数据方式。,适用于:,(1)外设和存储器之间有大量数据传送。,(2)外设的工作速度很高,6,中断方式,在中断传送方式下,CPU启动外设后,外设与CPU并行独立工作。当外设需要CPU处理时,由外设向CPU提出请求。若条件满足时,CPU中断当前执行的程序,转而为外设服务,服务完毕后,又继续执行原来的程序。对于这种方式,CPU不需要花费大量的时间进行外设的查询,从而提高了CPU的效率。,在单片机应用系统中,为了提高CPU的效率,多采用中断方式。为了实现中断功能而配置的软件与硬件,称为中断系统。,7,AT89S51中断技术概述,中断技术对单片机来说非常重要,因为单片机所具有的复杂实时控制功能与中断技术密不可分,面对控制对象随机发出的中断请求,单片机必须作出快速响应并及时处理,以使被控对象保持在最佳工作状态,达到预定的控制效果。,中断技术实质,资源共享技术,8,中断系统概述,计算机中的资源竞争,通常是因计算机在运行程序时会发生一些可预测或不可预测的随机事件引起的。这些随机事件包括:,与计算机“并行”工作的输入/输出设备发出的中断请求,以进行数据传送。,硬件故障、运算错误及程序出错时产生的中断请求,以进行故障报警和程序监测。,当对运行中的计算机进行干预时,通过键盘输入的命令,以进行人机联系。,来自被控对象的中断请求,以实现自动控制。,9,思考:,假设没有中断技术。,10,中断的概念,CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);,CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);,待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。,用的最多的是外部中断与定时中断。,外部中断典型应用:按键程序,定时器中断典型应用:定时与循环扫描等应用场合,11,中断服务程序,中断发生时,主程序暂停,跳转到中断服务程序,称为“响应中断”,执行完毕后返回主程序继续运行。,中断服务程序不能被调用,没有返回值,程序在何处发生中断是由中断事件发生而决定。,12,AT89S51单片机的中断过程,执行主程序,主程序,继续执行主程序,断点,中断请求,中断响应,执行中断处理程序,中断返回,13,引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。,14,有效地解决快速,CPU,与慢速外设之间的矛盾,可使,CPU,与外设并行工作,大大提高工作效率。,分时操作:有了中断技术,,CPU,可启动多台外设并行工作,分时进行,CPU,与各台外设之间的信息交换。,实时处理:可以及时处理控制系统中许多随机产生的参数与信息,从而提高了实时控制系统的性能。,故障处理:当计算机出现故障时,,CPU,可自动执行故障处理程序,提高了系统自身的可靠性。,计算机与外围设备之间传送数据及实现人机联系也常采用中断方式。,中断技术的应用,15,中断源:凡是中断请求的来源都统称为中断源。,在单片机系统中,中断可以由各种硬件设备产生,以便请求服务或报告故障等;中断也可以由处理器自身产生,如程序错误或对操作系统的请求作出响应等。,89S51的中断源,16,具有,5,个中断源,(,52,子系列为,6,个,多一个定时器中断),中断向量,(,Interrupt Vector,),:是程序存储器的一个地址,表明一个中断的服务程序从这里开始存放。,中断源,中断向量,外部中断 0,0003H,定时器0中断,000BH,外部中断 1,0013H,定时器1中断,001BH,串行中断,0023H,中断源与中断向量,17,89S51的中断系统有5个中断源,(52系列有6个),,2个优先级,可实现二级中断嵌套,。,89S51中断系统的结构及中断控制,18,中断控制,是指提供给用户使用的中断控制手段。,AT89S51,单片机中,中断控制的内容有,4,项:,中断允许控制,、,中断请求标志,、,中断优先级控制,和,外中断触发方式控制,,这些控制内容分布在,4,个控制寄存器中:,中断允许控制寄存器:,IE,定时器控制寄存器:,TCON,串行口控制寄存器:,SCON,中断优先级控制寄存器:,IP,中断控制是通过硬件实现的,但须进行软件设置。,中断控制,19,字节地址:88H 位地址:88H 8FH,功能:,用于保存外部中断请求以及定时器的计数溢出。,【注意】:,TCON既有定时器的控制功能,又有中断控制功能。虽然不少资料将TCON称为定时器控制寄存器,但多数位都是为中断控制而设置的(其中与中断有关的控制位共6位)。,位地址,8FH,8EH,8DH,8CH,8BH,8AH,89H,88H,位符号,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,(1)中断标志与外部中断方式选择寄存器:TCON,中断请求标志寄存器,20,IE0,和,IE1,:外部中断请求标志位,当,CPU,采样到,INT0,(或,INT1,)端出现有效中断请求信号时,,IE0,(或,IE1,)位由,硬件置“,1,”,,即保存外部中断请求。在中断响应完成后转向中断服务程序时,再由,硬件自动清“,0”,。,IT0,和,IT1,:外部中断触发方式控制位,IT0,(,IT1,),=0,电平触发方式,低电平有效,IT0,(,IT1,),=1,脉冲触发方式,负跳变有效,此位,由软件置“,1”,或清“,0”,位地址,8FH,8EH,8DH,8CH,8BH,8AH,89H,88H,位符号,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,21,TF0,和,TF1,:定时器(,T0,和,T1,)计数溢出标志位,当计数器产生计数溢出时,相应的溢出标志位由,硬件置“,1”,,,并自动产生定时中断请求。当转向中断服务程序时,再由,硬件自动清“,0”,。,计数溢出标志位的使用有两种情况:,采用中断方式时,作为,中断请求标志位,来使用;,采用查询方式时,作为,状态位,供查询使用。,位地址,8FH,8EH,8DH,8CH,8BH,8AH,89H,88H,位符号,TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,22,23,TI,:串行发送中断请求标志位,在发送数据过程中,当最后一个数据位被发送完成后,,TI,由,硬件置“,1”,;软件查询时,TI,可作为,状态位,使用。,在转向中断服务程序后,,TI,必须由用户在中断服务程序中,用软件清“,0”,。,位地址,9FH,9EH,9DH,9CH,9BH,9AH,99H,98H,位符号,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,(2)SCON中的中断标志位,24,RI,:串行接收中断请求标志位,在接收数据过程中,当采样到最后一个数据位有效时,,RI,由,硬件置“,1”,;软件查询时,RI,可作为,状态位,使用。,在转向中断服务程序后,,用软件清“,0”,。,25,中断允许与中断优先级控制,AT89S51单片机的中断系统有5个中断源,两个中断优先级,可实验两级中断服务程序嵌套。,实现中断允许控制和中断优先级控制是由SFR中的中断允许寄存器IE和中断优先级控制器IP来实现的。,26,字节地址:0A8H 位地址:0A8H 0AFH,功能:,用于控制是否允许使用中断。其中与中断有关的控制位共6位:,EA,:中断允许总控制位,EA=0,,中断总禁止,,CPU,禁止所有中断;,EA=1,,中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位进行设置。,位地址,0AFH,0AEH,0ADH,0ACH,0ABH,0AAH,0A9H,0A8H,位符号,EA,ES,ET1,EX1,ET0,EX0,中断允许寄存器IE,27,EX0,和,EX1,:外部中断允许控制位,EX0,(,EX1,),=0,禁止外部中断,0,(或外部中断,1,),EX0,(,EX1,),=1,允许外部中断,0,(或外部中断,1,),ET0,和,ET1,:定时器,/,计数器中断允许控制位,ET0,(,ET1,),=0,禁止定时器,/,计数器中断,ET0,(,ET1,),=1,允许定时器,/,计数器中断,ES,:串行中断中断允许控制位,ES=0,禁止串行中断,ES=1,允许串行中断,位地址,0AFH,0AEH,0ADH,0ACH,0ABH,0AAH,0A9H,0A8H,位符号,EA,ES,ET1,EX1,ET0,EX0,28,单片机通过中断允许控制寄存器对中断的允许(开放)实行,两级控制,,即以,EA,作为总控制位,以各中断源的中断允许位作为分控制位。,当总控制位,EA=0,时,关闭整个中断系统,不管分控制位状态如何,整个中断系统处于禁止状态;,当总控制位,EA=1,时,开放中断系统,这时才能由各分控制位设置各自中断的允许与禁止。,单片机复位后,IE=00H,,此时中断系统处于禁止状态。,单片机中断响应后硬件不会自动关闭中断,因此,在转中断服务程序后,应根据需要使用能将,EA,复位的有关指令禁止中断,即,以软件方式关闭中断,。,说 明:,29,中断允许寄存器IE,30,字节地址:0B8H 位地址:0B8H 0BFH,功能:,用于设定各中断的优先级,通过IP可将中断分为高、低两个优先级。,PX0,:外部中断,0,优先级设定位,PT0,:定时器,0,中断优先级设定位,PX1,:外部中断,1,优先级设定位,PT1,:定时器,1,中断优先级设定位,PS,:串行中断优先级设定位,位地址,0BFH,0BEH,0BDH,0BCH,0BBH,0BAH,0B9H,0B8H,位符号,PS,PT1,PX1,PT0,PX0,为“,0”,的位优先级低,为“,1”,的位优先级高,CPU,复位时,,IP,中的各位均被清,0,中断优先级控制寄存器IP,31,IP寄存器,32,单片机对同一优先级中断请求的查询次序:,中断源,入口地址,同级内的中断优先权,外部中断 0,0003H,最高,最低,定时器 0 溢出中断,000BH,外部中断 1,0013H,定时器 1 溢出中断,001BH,串行口中断,0023H,对于同级的多个中断请求,查询的次序安排是通过专门的内部逻辑实现的。,33,中断,的轻重缓急程度。,例如,电源故障有使整个系统瘫痪的危险,必须及时处理,所以应安排为高优先级;而那些仅影响局部故障的中断或操作性中断,(如输入,/,输出中断,)应安排为低优先级。,中断设备的工作速度。,快速设备需要及时响应,否则将有丢失数据的危险,所以应安排为高优先级,。,中断处理的工作量。,尽量把处理工作量小的中断安排为高优先级,因为处理工作量小,占用,CPU,的时间短。,中断请求发生的频繁程度。,可以考虑将那些很少请求单片机干预的事件产生的中断安排为高优先级,。,中断优先级定义原则,34,中断响应的条件,一个中断源的中断请求被响应,必须满足如下必要条件:,EA=1,:总中断允许开关接通。,该中断源发出中断请求,:中断源请求标志,=1,该中断为允许,:该中断源中断允许位,=1,无同级或更高级中断正在被服务。,35,中断响应时间:用从外部中断请求有效(标志位置“1”)到转向中断区入口地址所需的机器周期数来计算。,在一个单一中断系统里面:,最短响应时间为3个机器周期。,最长响应时间为8个机器周期。,如果已经在处理同级或更高级的中断,响应时间取决于正在执行中断服务程序的处理时间。,外部中断的响应时间,36,外部中断的触发方式选择,触发模式的选择由TCON的IT0与IT1控制。,边沿触发:,外部中断为负边沿触发方式。,CPU,在每个机器周期采样,P3.2(P3.3),脚的输入电平,如果在一个周期中采样到高电平,在下一个周期中采样到低电平,则硬件使,IE0,(,IE1,)置,1,,向,CPU,请求中断。,电平触发:,外部中断是通过检测,P3.2,(,P3.3,)脚的输入电平(低电平)来触发的。采用电平触发时,输入到,P3.2,(,P3.3,)脚的外部中断源必须保持低电平有效,直到该中断被响应。同时在中断返回前必须使电平变高,否则将会再次产生中断。,一般采用边沿触发方式,因为此种模式抗干扰能力较强,,极少采用电平触发方式。,37,中断响应后,TCON或SCON中的中断请求标志应及时清除,否则就意味着中断请求仍然存在,可能会造成中断的重复查询和响应。,定时中断请求的撤销(硬件自动撤销),定时中断撤销只是标志位的置“,0”,问题。,定时中断的中断请求是自动撤销的,无需用户干预。,定时中断响应后,硬件自动把标志位(,TF0,或,TF1,)清“,0”,。,中断请求的撤销,38,脉冲方式外部中断请求的撤销,(硬件自动撤销),外部中断的撤销包括两项内容:,中断标志位的置“,0”,和,外中断请求信号的撤销,。,标志位,IE0,或,IE1,清“,0”,是在中断响应后由,硬件电路自动完成,。,中断请求的脉冲信号过后自动撤销。,电平方式外部中断请求的撤销,(软硬件结合撤销),标志位,IE0,或,IE1,清“,0”,是在中断响应后由,硬件电路自动完成,。,通过在系统中增加硬件电路,使中断请求信号引脚从低电平强制改变为高电平。,39,串行中断请求的撤销,(软件撤销),串行中断的标志位是,TI,和,RI,。因中断响应后,还需要测试这两个标志位的状态,以判定是接收操作还是发送操作,然后才能清除,故串行中断请求的撤销要使用,软件,的方法,在中断服务程序中对标志位进行清“,0”,。,40,中断函数,C51,编译器支持在,C,语言源程序中直接编写,89C51,单片机的中断服务函数程序,从而减轻了采用汇编语言编写中断服务程序的繁琐程度。,为了在,C,语言源程序中直接编写中断服务函数的需要,,C51,编译器对函数的定义进行了扩展,增加了一个扩展关键字,interrupt,。关键字,interrupt,是函数定义时的一个选项,加上这个选项即可以将一个函数定义成中断服务函数。定义中断服务函数的一般形式为:,41,函数类型 函数名(形式参数表)interrupt nusing n,关键字interrupt后面的n是中断号,n的取值范围为 0 31。编译器从 8*n3处产生中断向量,具体的中断号n和中断向量取决于不同的89C51系列单片机芯片。,42,89C51系列单片机可以在内部RAM中使用4个不同的工作寄存器组,每个寄存器组中包含8个工作寄存器(R0R7)。C51编译器扩展了一个关键字using,专门用来选择8051单片机中不同的工作寄存器组。using后面的n是一个03的常整数,分别选中4个不同的工作寄存器组。当前工作寄存器由PSW中RS1、RS0两位设置用using指定。“using”只允许用于中断函数,它在中断函数入口处将当前寄存器组保留,并在中断程序中使用指定的寄存器组,在函数退出前恢复原寄存器组。在定义一个函数时using是一个选项,如果不用该选项,则由编译器选择一个寄存器组作绝对寄存器组访问。,43,AT89C51单片机中的5个中断源服务程序代码,中断源,中断源服务程序代码,外部中断 0,0,定时器 0 中断,1,外部中断 1,2,定时器 1 中断,3,串行口中断,4,44,注意:,关键字,using,和,interrupt,的后面都不允许跟一个带运算符的表达式。,关键字,using,对函数目标代码的影响如下:在函数的入口处将当前工作寄存器组保护到堆栈中;指定的工作寄存器内容不会改变;函数返回之前将被保护的工作寄存器组从堆栈中恢复。,使用关键字,using,在函数中确定一个工作寄存器组时必须十分小心,要保证任何寄存器组的切换都只在仔细控制的区域内发生,如果不做到这一点将产生不正确的函数结果。,45,带,using,属性的函数原则上不能返回,bit,类型的值。并且关键字,using,不允许用于外部函数关键字,interrupt,也不允许用于外部函数,它对中断函数目标代码的影响如下:,在进入中断函数时,特殊功能寄存器ACC、B、DPH、DPL、PSW将被保存入栈;如果不使用寄存组切换,则将中断函数中所用到的全部工作寄存器都人栈;函数返回之前,所有的寄存器内容出栈;中断函数由8051单片机指令RETI结束。,46,编写单片机中断函数程序应遵循以下规则,1,中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。,2,中断函数没有返回值,如果企图定义一个返回值将得到不正确的结果。因此建议在定义中断函数时将其定义为,void,类型,以明确说明没有返回值。,47,3,在任何情况下都不能直接调用中断函数,否则会产生编译错误。,因为中断函数的返回是由8051单片机指令RETI完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断请求的情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。,48,4,如果中断函数中用到浮点运算,必须保存浮点寄存器的状态,当没有其它程序执行浮点运算时可以不保存。,C51,编译器的数学函数库,math.h,中,提供了保存浮点寄存器状态的库函数,fpsave,和恢复浮点寄存器状态的库函数,fprestore,。,49,5,如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器组必须与中断函数相同。用户必须保证按要求使用相同的寄存器组,否则会产生不正确的结果,这一点必须引起足够的注意。如果定义中断函数时没有使用,using,选项,则由编译器选择一个寄存器组作绝对寄存器组访问。另外,由于中断的产生不可预测,中断函数对其它函数的调用可能形成递归调用,需要时可将被中断函数所调用的其它函数定义成再入函数。,50,6,C51,编译器从绝对地址,8*n,3,处产生一个中断向量,其中,n,为中断号。该向量包含一个到中断函数人口地址的绝对跳传。在对源程序编译时,可用编译控制指令,NOINTVECTOR,抑制中断向量的产生,从而使用户能够从独立的汇编程序模块中提供中断向量。,51,只有在一条指令全部执行完毕之后,才能响应中断请求,以确保指令的完整执行。,中断服务流程,执行主程序,返回断点,执行一条指令,关中断,保护现场和断点,开中断,中断服务,关中断,恢复现场,开中断,有中断请求?,取下一条指令,Y,N,52,C51中断服务程序的注意事项:,1)若要在执行当前中断程序时禁止更高优先级中断,可先用软件关闭CPU对中断的响应,在中断返回前再开放中断。,2)注意外部电平触发的中断不锁存。若在外部电平出现时被中断屏蔽,而在中断识别之前电平消失,它被完全忽略中断处理本身不能锁存外部电平请求。,3)外部中断0、1及定时器0、1的中断申请标志在CPU响应中断后会自动清0,但串行口中断标志TI/RI及定时器2的中断申请标志TF2不会自动清0,必须在中断服务程序中用软件清0,否则会立即产生重复中断,程序会陷入死循环。对于串口中断,通常要判别是RI或TI中断。,4)为提高中断响应的实时性,中断服务程序应尽量简短,并避免使用复杂变量类型及复杂算术运算。通常在中断服务程序中使用一些标志,由主程序或相应背景程序根据对应的标志作相应的处理。,53,按键通过中断方式控制LED灯状态。,54,#include,#define uchar unsigned char,#define uint unsigned int,sbit LED=P00;,void mian(),LED=1;,EA=1;,EX0=1;,TCON=0 x01;,while(1);,void External_Interrupt_0()interrupt 0,LED=LED;,55,C51编程举例,例题5-1:在51单片机的P1口上接有8只LED。在外部中断0输入引脚P3.2(/INT0)接有一只按钮开关K1。程序要求外部中断0设置为负跳沿触发。在程序启动时,P1口上的8只LED亮。按一次按钮开关K1,使引脚(/INT0)接地,产生一个负跳沿触发的外中断0的中断请求,在中断服务程序中,让低四位的LED和高4位的LED交替闪烁1次。,56,#include reg51.h,void Delay(unsigned int i),unsigned int j;,for(;i0;i-),for(j=0;j0;i-),for(j=0;j333;j+),;,void INT0_ROUTING()interrupt 0 using 1,/输入程序代码,P1=0X0F;,Delay(500);,P1=0 xf0;,Delay(500);,61,void INT1_ROUTING()interrupt 2 using 2,/输入程序代码,P1=0XFF;,Delay(500);,P1=0 x00;,Delay(500);,62,void INIT_INT0(),IT1=1;,IP|=0 x01;,IE|=0 x01;,void INIT_INT1(),IT1=1;,IP|=0 x04;,IE|=0 x04;,void InitInterrupt(),INIT_INT0();,INIT_INT1();,63,void main(),/输入程序代码,unsigned char play9=0 xff,0 xfe,0 xfd,0 xfb,0 xf7,0 xef,0 xdf,0 xbf,0 x7f;,unsigned char a;,InitInterrupt();,for(;),for(a=0;a=4;,P1=tem|0 xF0;/将P1高四位置一,低四位输出。,73,void main(void)/主程序,EX0=1;/允许外部中断0,IT0=1;/外部中断为边沿触发方式,EA=1;/开总中断控制位,P0=0 x00;,while(1);,74,
展开阅读全文