第5章AT89S51单片机的中断系统_第1页
第5章AT89S51单片机的中断系统_第2页
第5章AT89S51单片机的中断系统_第3页
第5章AT89S51单片机的中断系统_第4页
第5章AT89S51单片机的中断系统_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AT89S51单片机的中断系统本章主要内容中断的概念和应用AT89S51中断系统结构与中断相关的SFR及中断控制外部中断C51中断函数编程举例2微机的输入输出方式(1)无条件传送方式(2)查询传送方式(3)直接存储器存取(DMA)方式(4)中断方式3无条件传送方式无条件传送方式在这种传送方式下,CPU不需要了解外设的状态,只要在程序中加入访问外设的指令,就可实现CPU与外设之间的数据传送。此种方法控制简单,但数据传送时,由于不知道外设的状态,传送数据时容易出错。4查询传送方式查询传送方式在这种传送方式下,CPU在传送数据之前,要不断查询外部设备是否处于“准备好”状态,因此需占用CPU的大量时间,效率较低。5DMA方式DMA方式是让CPU不再控制数据总线,使外部设备和存储器之间直接传送(不通过CPU)的数据方式。 适用于:(1)外设和存储器之间有大量数据传送。(2)外设的工作速度很高6中断方式在中断传送方式下,CPU启动外设后,外设与CPU并行独立工作。当外设需要CPU处理时,由外设向CPU提出请求。若条件满足时,CPU中断当前执行的程序,转而为外设服务,服务完毕后,又继续执行原来的程序。对于这种方式,CPU不需要花费大量的时间进行外设的查询,从而提高了CPU的效率。 在单片机应用系统中,为了提高CPU的效率,多采用中断方式。为了实现中断功能而配置的软件与硬件,称为中断系统。7AT89S51中断技术概述

中断技术对单片机来说非常重要,因为单片机所具有的复杂实时控制功能与中断技术密不可分,面对控制对象随机发出的中断请求,单片机必须作出快速响应并及时处理,以使被控对象保持在最佳工作状态,达到预定的控制效果。中断技术实质

——资源共享技术8中断系统概述

计算机中的资源竞争,通常是因计算机在运行程序时会发生一些可预测或不可预测的随机事件引起的。这些随机事件包括:与计算机“并行”工作的输入/输出设备发出的中断请求,以进行数据传送。硬件故障、运算错误及程序出错时产生的中断请求,以进行故障报警和程序监测。当对运行中的计算机进行干预时,通过键盘输入的命令,以进行人机联系。来自被控对象的中断请求,以实现自动控制。9思考:假设没有中断技术。10中断的概念

CPU在处理某一事件A时,发生了另一事件B请求CPU迅速去处理(中断发生);CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务);待CPU将事件B处理完毕后,再回到原来事件A被中断的地方继续处理事件A(中断返回),这一过程称为中断。用的最多的是外部中断与定时中断。○外部中断典型应用:按键程序○定时器中断典型应用:定时与循环扫描等应用场合

11中断服务程序中断发生时,主程序暂停,跳转到中断服务程序,称为“响应中断”,执行完毕后返回主程序继续运行。中断服务程序不能被调用,没有返回值,程序在何处发生中断是由中断事件发生而决定。12AT89S51单片机的中断过程执行主程序主程序继续执行主程序断点中断请求中断响应执行中断处理程序中断返回13引起CPU中断的根源,称为中断源。中断源向CPU提出的中断请求。CPU暂时中断原来的事务A,转去处理事件B。对事件B处理完毕后,再回到原来被中断的地方(即断点),称为中断返回。实现上述中断功能的部件称为中断系统(中断机构)。14有效地解决快速CPU与慢速外设之间的矛盾,可使CPU与外设并行工作,大大提高工作效率。分时操作:有了中断技术,CPU可启动多台外设并行工作,分时进行CPU与各台外设之间的信息交换。实时处理:可以及时处理控制系统中许多随机产生的参数与信息,从而提高了实时控制系统的性能。故障处理:当计算机出现故障时,CPU可自动执行故障处理程序,提高了系统自身的可靠性。 计算机与外围设备之间传送数据及实现人机联系也常采用中断方式。中断技术的应用15中断源:凡是中断请求的来源都统称为中断源。在单片机系统中,中断可以由各种硬件设备产生,以便请求服务或报告故障等;中断也可以由处理器自身产生,如程序错误或对操作系统的请求作出响应等。89S51的中断源16具有

5个中断源(52子系列为6个,多一个定时器中断)中断向量(InterruptVector):是程序存储器的一个地址,表明一个中断的服务程序从这里开始存放。中断源中断向量外部中断00003H定时器0中断000BH外部中断10013H定时器1中断001BH串行中断0023H中断源与中断向量1789S51的中断系统有5个中断源(52系列有6个),2个优先级,可实现二级中断嵌套

。89S51中断系统的结构及中断控制18中断控制是指提供给用户使用的中断控制手段。AT89S51单片机中,中断控制的内容有4项:中断允许控制、中断请求标志、中断优先级控制和外中断触发方式控制,这些控制内容分布在4个控制寄存器中:中断允许控制寄存器:IE定时器控制寄存器:TCON串行口控制寄存器:SCON中断优先级控制寄存器:IP中断控制是通过硬件实现的,但须进行软件设置。中断控制19 字节地址:88H位地址:88H~8FH功能:用于保存外部中断请求以及定时器的计数溢出。【注意】:TCON既有定时器的控制功能,又有中断控制功能。虽然不少资料将TCON称为定时器控制寄存器,但多数位都是为中断控制而设置的(其中与中断有关的控制位共6位)。位地址8FH8EH8DH8CH8BH8AH89H88H位符号TF1TR1TF0TR0IE1IT1IE0IT0(1)中断标志与外部中断方式选择寄存器:TCON中断请求标志寄存器20IE0和IE1:外部中断请求标志位当CPU采样到INT0(或INT1)端出现有效中断请求信号时,IE0(或IE1)位由硬件置“1”,即保存外部中断请求。在中断响应完成后转向中断服务程序时,再由硬件自动清“0”。IT0和IT1:外部中断触发方式控制位IT0(IT1)=0电平触发方式,低电平有效IT0(IT1)=1脉冲触发方式,负跳变有效 此位由软件置“1”或清“0”位地址8FH8EH8DH8CH8BH8AH89H88H位符号TF1TR1TF0TR0IE1IT1IE0IT021TF0和TF1:定时器(T0和T1)计数溢出标志位当计数器产生计数溢出时,相应的溢出标志位由硬件置“1”,并自动产生定时中断请求。当转向中断服务程序时,再由硬件自动清“0”。计数溢出标志位的使用有两种情况:采用中断方式时,作为中断请求标志位来使用;采用查询方式时,作为状态位供查询使用。位地址8FH8EH8DH8CH8BH8AH89H88H位符号TF1TR1TF0TR0IE1IT1IE0IT02223TI:串行发送中断请求标志位在发送数据过程中,当最后一个数据位被发送完成后,TI由硬件置“1”;软件查询时TI可作为状态位使用。在转向中断服务程序后,TI必须由用户在中断服务程序中用软件清“0”。位地址9FH9EH9DH9CH9BH9AH99H98H位符号SM0SM1SM2RENTB8RB8TIRI(2)SCON中的中断标志位24RI:串行接收中断请求标志位在接收数据过程中,当采样到最后一个数据位有效时,RI由硬件置“1”;软件查询时RI可作为状态位使用。在转向中断服务程序后,用软件清“0”。25中断允许与中断优先级控制AT89S51单片机的中断系统有5个中断源,两个中断优先级,可实现两级中断服务程序嵌套。实现中断允许控制和中断优先级控制是由SFR中的中断允许寄存器IE和中断优先级控制器IP来实现的。26 字节地址:0A8H位地址:0A8H~0AFH功能:用于控制是否允许使用中断。其中与中断有关的控制位共6位:EA:中断允许总控制位EA=0,中断总禁止,CPU禁止所有中断;EA=1,中断总允许,总允许后中断的禁止或允许由各中断源的中断允许控制位进行设置。位地址0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H位符号EA——ESET1EX1ET0EX0中断允许寄存器IE27EX0和EX1:外部中断允许控制位EX0(EX1)=0 禁止外部中断0(或外部中断1)EX0(EX1)=1 允许外部中断0(或外部中断1)ET0和ET1:定时器/计数器中断允许控制位ET0(ET1)=0 禁止定时器/计数器中断ET0(ET1)=1 允许定时器/计数器中断ES:串行中断中断允许控制位ES=0 禁止串行中断ES=1 允许串行中断位地址0AFH0AEH0ADH0ACH0ABH0AAH0A9H0A8H位符号EA——ESET1EX1ET0EX028单片机通过中断允许控制寄存器对中断的允许(开放)实行两级控制,即以EA作为总控制位,以各中断源的中断允许位作为分控制位。当总控制位EA=0时,关闭整个中断系统,不管分控制位状态如何,整个中断系统处于禁止状态;当总控制位EA=1时,开放中断系统,这时才能由各分控制位设置各自中断的允许与禁止。单片机复位后IE=00H,此时中断系统处于禁止状态。单片机中断响应后硬件不会自动关闭中断,因此,在转中断服务程序后,应根据需要使用能将EA复位的有关指令禁止中断,即以软件方式关闭中断。

说明:29中断允许寄存器IE30 字节地址:0B8H位地址:0B8H~0BFH功能:用于设定各中断的优先级,通过IP可将中断分为高、低两个优先级。PX0:外部中断0优先级设定位PT0:定时器0中断优先级设定位PX1:外部中断1优先级设定位PT1:定时器1中断优先级设定位PS:串行中断优先级设定位位地址0BFH0BEH0BDH0BCH0BBH0BAH0B9H0B8H位符号———PSPT1PX1PT0PX0为“0”的位优先级低为“1”的位优先级高CPU复位时,IP中的各位均被清0中断优先级控制寄存器IP31IP寄存器32单片机对同一优先级中断请求的查询次序:中断源入口地址同级内的中断优先权外部中断00003H最高最低定时器0溢出中断000BH外部中断10013H定时器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函数类型函数名(形式参数表)[interruptn][usingn]

关键字interrupt后面的n是中断号,n的取值范围为0~4。编译器从8*n+3处产生中断向量,具体的中断号n和中断向量取决于不同的89C51系列单片机芯片。42

89C51系列单片机可以在内部RAM中使用4个不同的工作寄存器组,每个寄存器组中包含8个工作寄存器(R0~R7)。C51编译器扩展了一个关键字using,专门用来选择8051单片机中不同的工作寄存器组。using后面的n是一个0~3的常整数,分别选中4个不同的工作寄存器组。当前工作寄存器由PSW中RS1、RS0两位设置。“using”只允许用于中断函数,它在中断函数入口处将当前寄存器组保留,并在中断程序中使用指定的寄存器组,在函数退出前恢复原寄存器组。在定义一个函数时using是一个选项,如果不用该选项,则由编译器选择一个寄存器组作绝对寄存器组访问。43AT89C51单片机中的5个中断源服务程序代码中断源中断源服务程序代码外部中断00定时器0中断1外部中断12定时器1中断3串行口中断444注意:关键字using和interrupt的后面都不允许跟一个带运算符的表达式。关键字using对函数目标代码的影响如下:在函数的入口处将当前工作寄存器组保护到堆栈中;指定的工作寄存器内容不会改变;函数返回之前将被保护的工作寄存器组从堆栈中恢复。使用关键字using在函数中确定一个工作寄存器组时必须十分小心,要保证任何寄存器组的切换都只在仔细控制的区域内发生,如果不做到这一点将产生不正确的函数结果。45带using属性的函数原则上不能返回bit类型的值。并且关键字using不允许用于外部函数,关键字interrupt也不允许用于外部函数,它对中断函数目标代码的影响如下: 在进入中断函数时,特殊功能寄存器ACC、B、DPH、DPL、PSW将被保存入栈;如果不使用寄存组切换,则将中断函数中所用到的全部工作寄存器都入栈;函数返回之前,所有的寄存器内容出栈;中断函数由8051单片机指令RETI结束。46编写单片机中断函数程序应遵循以下规则

1.中断函数不能进行参数传递,如果中断函数中包含任何参数声明都将导致编译出错。2.中断函数没有返回值,如果企图定义一个返回值将得到不正确的结果。因此建议在定义中断函数时将其定义为void类型,以明确说明没有返回值。473.在任何情况下都不能直接调用中断函数,否则会产生编译错误。 因为中断函数的返回是由8051单片机指令RETI完成的,RETI指令影响8051单片机的硬件中断系统。如果在没有实际中断请求的情况下直接调用中断函数,RETI指令的操作结果会产生一个致命的错误。484.如果中断函数中用到浮点运算,必须保存浮点寄存器的状态,当没有其它程序执行浮点运算时可以不保存。C51编译器的数学函数库math.h中,提供了保存浮点寄存器状态的库函数fpsave和恢复浮点寄存器状态的库函数fprestore。495.如果在中断函数中调用了其它函数,则被调用函数所使用的寄存器组必须与中断函数相同。用户必须保证按要求使用相同的寄存器组,否则会产生不正确的结果,这一点必须引起足够的注意。如果定义中断函数时没有使用using选项,则由编译器选择一个寄存器组作绝对寄存器组访问。另外,由于中断的产生不可预测,中断函数对其它函数的调用可能形成递归调用,需要时可将被中断函数所调用的其它函数定义成再入函数。506.C51编译器从绝对地址8*n+3处产生一个中断向量,其中n为中断号。该向量包含一个到中断函数人口地址的绝对跳传。在对源程序编译时,可用编译控制指令NOINTVECTOR抑制中断向量的产生,从而使用户能够从独立的汇编程序模块中提供中断向量。51只有在一条指令全部执行完毕之后,才能响应中断请求,以确保指令的完整执行。中断服务流程执行主程序返回断点执行一条指令关中断保护现场和断点开中断中断服务关中断恢复现场开中断有中断请求?取下一条指令YN52C51中断服务程序的注意事项:1)若要在执行当前中断程序时禁止更高优先级中断,可先用软件关闭CPU对中断的响应,在中断返回前再开放中断。2)注意外部电平触发的中断不锁存。若在外部电平出现时被中断屏蔽,而在中断识别之前电平消失,它被完全忽略——中断处理本身不能锁存外部电平请求。3)外部中断0、1及定时器0、1的中断申请标志在CPU响应中断后会自动清0,但串行口中断标志TI/RI及定时器2的中断申请标志TF2不会自动清0,必须在中断服务程序中用软件清0,否则会立即产生重复中断,程序会陷入死循环。对于串口中断,通常要判别是RI或TI中断。4)为提高中断响应的实时性,中断服务程序应尽量简短,并避免使用复杂变量类型及复杂算术运算。通常在中断服务程序中使用一些标志,由主程序或相应背景程序根据对应的标志作相应的处理。53按键通过中断方式控制LED灯状态。54#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitLED=P0^0;voidmian(){ LED=1; EA=1; EX0=1; TCON=0x01; while(1);}voidExternal_Interrupt_0()interrupt0{ LED=~LED;}55C51编程举例例题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"voidDelay(unsignedinti){ unsignedintj; for(;i>0;i--) for(j=0;j<333;j++) {;}}voidINT0_ROUTING()interrupt0using1{//输入程序代码EX0=0;P0=0X0F;Delay(800);P0=0xf0;Delay(800);//EX0=1;}57voidINIT_INT0(){ EA=1; EX0=1; IT0=1; //EX1=1; //IT1=1; //IP|=0x01; //IE|=0x01;}58voidInitInterrupt(){ INIT_INT0();}voidmain(void){InitInterrupt();P2=0x80;while(1){P0=0xff;}

}59例题5-2:在51单片机的P1口上接有8只LED。在外部中断0输入引脚P3.2,(/INT0)接有一只按钮开关K1。在外部中断1输入引脚P3.3,(/INT1)接有一只按钮开关K2。程序要求K1和K2都未按下时,P1口的8只LED呈流水灯显示,仅K1(P3.2)按下时,左右4只LED交替闪烁。仅按下K2(P3.3),P1口的8只LED全部闪亮。两个外中断的优先级相同。60#include"reg51.h"voidDelay(unsignedinti){ unsignedintj; for(;i>0;i--) for(j=0;j<333;j++) {;}}voidINT0_ROUTING()interrupt0using1{//输入程序代码P1=0X0F;Delay(500);P1=0xf0;Delay(500);}61voidINT1_ROUTING()interrupt2using2{//输入程序代码P1=0XFF;Delay(500);P1=0x00;Delay(500);}62voidINIT_INT0(){ IT1=1; IP|=0x01; IE|=0x01;}voidINIT_INT1(){ IT1=1; IP|=0x04; IE|=0x04;}voidInitInterrupt(){ INIT_INT0(); INIT_INT1();}63voidmain(){ //输入程序代码 unsignedcharplay[9]={0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; unsignedchara; InitInterrupt(); for(;;) { for(a=0;a<9;a++) { Delay(500); P1=play[a]; } }}64中断优先级的作用不仅体现在中断响应时,而且也体现在中断服务过程中,即允许把正在进行的中断服务暂停下来,而转去进行优先级高的中断服务,这就是中断嵌套。中断可以多层嵌套。即一个正在执行的中断服务可以被另一个优先级高的中断请求所打断,使CPU转去为新的中断服务;而新的中断服务又可以被优先级更高的中断所打断,形成又一层嵌套。这样的嵌套还可以继续多层,如同多级子程序调用一样。中断嵌套6589S51单片机的中断嵌套因为89S51单片机只具有两个优先级,因此具备两级中断服务嵌套的功能,中断嵌套只能一层,其对中断优先级的处理原则是:低优先级中断请求不能打断高优先级的中断服务;但高优先级中断请求可以打断低优先级的中断服务,从而实现中断嵌套。同优先级的中断不能嵌套。即如果一个中断请求已被响应,则同级的其它中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论