2020/1/241第5章80C51的中断系统80C51单片机的中断系统5.180C51单片机的中断处理过程5.280C51单片机的中断程序设计5.32020/1/2425.180C51单片机的中断系统5.1.180C51中断系统的结构CPU进行工作A时发生了事件B,请求CPU马上处理CPU暂时中断当前工作A,转去处理事件B事件B处理完后,回到工作A被中断的地方继续处理A工作中断可以嵌套中断的概念主程序A响应返回断点RETI……中断服务程序B中断源中断请求中断服务中断返回中断系统中断的优点利用率高实时性强可靠性好2020/1/24380C51中断系统的结构5个中断源、2个优先级EX0EAPX001ET0PT001EX1PX101ET1PT101ESPS01≥1RITISCONTCONIE0TF0IE1TF110101IT0IT1INT0INT1T0T1RXTXIEIP111111110硬件查询自然优先级自然优先级中断入口中断入口高级低级中断源中断源2020/1/244中断源5.1.280C51的中断源外部中断0(INT0)外部中断1(INT1)T0溢出中断(TF0)T1溢出中断(TF1)串行口中断(RI或TI)INT02020/1/245TCON为定时器/计数器的控制寄存器,字节地址为88H76543210TCONTF1TR1TF0TR0IE1IT1IE0IT0字节地址:88H电平方式(ITx=0),INTx引脚低电平时IEx=1,响应中断后IEx不自动清0(INTx引脚状态)。边沿方式(ITx=1),INTx引脚负跳变时IEx=1,响应中断后IEx自动清0。外部中断标志IE1、IE0(用IEx表示)2020/1/246两种触发方式比较:电平方式时,INTx低电平必须保持到响应时,否则就会漏掉;在中断服务结束前,INTx低电平必须撤除,否则中断返回之后将再次产生中断。例,8255的中断请求线在接受读或写操作后即被复位,因此以其去请求电平触发方式的中断比较方便。边沿方式时,采样到有效下降沿后,在IEx中将锁存一个1。若CPU暂时不能响应,申请标志也不会丢失,直到响应时才清0。例,ADC0809的转换结束信号EOC为正脉冲,经反相后就可以作为80C51的INTx信号。2020/1/247IE0—外部中断请求0的中断请求标志位。IE0=0,无中断请求。IE0=1,外部中断0有中断请求。当CPU响应该中断,转向中断服务程序时,由硬件清“0”IE0。IE1—外部中断请求1的中断请求标志位,意义与IE0类似。TF0—T0溢出中断请求标志位。T0计数后,当最高位产生溢出时,由硬件置“1”TF0,向CPU申请中断,CPU响应TF0中断时,清“0”TF0,TF0也可由软件清0。TF1—T1的溢出中断请求标志位,功能和TF0类似。2020/1/248溢出中断标志TF1、TF0(用TFx表示)溢出中断请求标志TFx,Tx启动后就开始由初值进行加1计数,直至最高位产生溢出使TFx=1向CPU请求中断。CPU响应中断后TFx自动清0。SCON的中断标志76543210SCONTIRI字节地址:98HRI:串口接收中断标志,响应中断时不能自动清除TI:串口发送中断标志,响应中断时不能自动清除2020/1/2495.1.380C51中断的控制中断允许控制中断源的开放和屏蔽由IE控制(1,开放;0,禁止)76543210IEEAESET1EX1ET0EX0字节地址:A8HEX0:外中断0允许ET0:T0中断允许EX1:外中断1允许ET1:T1中断允许ES:串口中断允许EA:CPU中断允许2020/1/2410总的开关中断控制位EA(IE.7位):EA=0,所有中断请求被屏蔽。EA=1,CPU开放中断,但五个中断源的中断请求是否允许,还要由IE中对应的5个中断请求允许控制位的状态来决定。IE中各位的功能如下:(1)EA:中断允许总控制位0:CPU屏蔽所有的中断请求(CPU关中断);1:CPU开放所有中断(CPU开中断)。(2)ES:串行口中断允许位0:禁止串行口中断;1:允许串行口中断。2020/1/2411(3)ET1:定时器/计数器T1的溢出中断允许位0:禁止T1溢出中断;1:允许T1溢出中断。(4)EX1:外部中断1中断允许位0:禁止外部中断1中断;1:允许外部中断1中断。(5)ET0:定时器/计数器T0的溢出中断允许位0:禁止T0溢出中断;1:允许T0溢出中断。(6)EX0:外部中断0中断允许位。0:禁止外部中断0中断;1:允许外部中断0中断。2020/1/2412例5-1若允许片内2个定时器/计数器中断,禁止其它中断源的中断请求。编写设置IE的相应程序段(1)用位操作指令来编写如下程序段:CLRES;禁止串行口中断CLREX1;禁止外部中断1中断CLREX0;禁止外部中断0中断SETBET0;允许定时器/计数器T0中断SETBET1;允许定时器/计数器T1中断SETBEA;CPU开中断(2)用字节操作指令来编写:MOVIE,#8AH或者用:MOV0A8H,#8AH;A8H为IE寄存器字节地址2020/1/2413中断优先级控制中断优先级由IP控制(1,高级;0,低级)76543210IPPSPT1PX1PT0PX0字节地址:B8HPX0:外中断0优先级PT0:T0中断优先级PX1:外中断1优先级PT1:T1中断优先级PS:串口中断优先级同一优先级的自然顺序:自高至低:INT0、TO、INT1、T1、串口。2020/1/2414中断优先级遵循的原则在同时收到几个同一优先级的中断请求时,优先响应哪一个中断,取决于内部的查询顺序。正进行的中断服务,同级或低级中断不能对其中断,但可以被高级中断所中断。为此,中断系统内设有对应高、低2个优先级状态触发器(用户不能寻址)。状态触发器的复位由中断返回指令RETI控制。2020/1/2415例5-2设置IP寄存器的初始值,使2个外中断请求为高优先级,其它中断请求为低优先级。(1)用位操作指令SETBPX0;2个外中断为高优先级SETBPX1CLRPS;串行口、2个定时器/计数器;为低优先级中断CLRPT0CLRPT12)用字节操作指令MOVIP,#05H或:MOV0B8H,#05H;B8H为IP寄存器的字节地址2020/1/24165.280C51单片机中断处理过程5.2.1中断响应条件和时间中断响应条件有中断请求相应的中断允许位为1CPU开中断(即EA=1)无同级或更高级中断正在被服务遇下面情况之一将不被响应(此间中断条件失效,中断丢失)正在处理同级或高级中断当前查询周期不是所执行指令的最后一个机器周期正在执行RETI或访问IE或IP的指令2020/1/2417中断响应时间中断响应至少需要3个完整的机器周期(3~8个)!S1保护断点,长调用至入口中断服务S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6标志查询ε中断有效M1M2M3M4M5受阻时要附加3~5个机器周期(无同级或高级中断正进行)查询周期不是当前指令的最后机器周期(如MUL,+3)查询周期恰逢RETI类指令(且后跟MUL指令+5)2020/1/24185.2.2中断响应过程CPU响应中断过程将相应优先级状态触发器置1(阻断后来同级或低级中断)执行硬件LCALL指令(PC入栈,中断服务程序入口址送PC)执行中断服务程序编写中断服务程序注意中断服务程序入口存放指令LJMP或AJMP现场保护与现场恢复2020/1/24195.2.3中断返回中断服务程序最后指令必须是RETI,其功能:将断点从堆栈弹送PC,CPU从原断点继续执行将相应优先级状态触发器清0,恢复原来工作状态注意不能用RET代替RETI中断服务程序中PUSH和POP必须成对使用2020/1/24205.3中断服务程序的设计一、中断服务程序设计的任务(1)设置中断允许控制寄存器IE。(2)设置中断优先级寄存器IP。(3)对外中断源,是采用电平触发还是跳沿触发。(4)编写中断服务程序,处理中断请求。前3条一般放在主程序的初始化程序段中。例5-3假设允许外部中断0中断,并设定它为高级中断,其它中断源为低级中断,采用跳沿触发方式。在主程序中编写如下程序段:SETBEA;CPU开中断SETBET0;允许外中断0产生中断SETBPX0;外中断0为高级中断SETBIT0;外中断0为跳沿触发方式2020/1/2421二、采用中断时的主程序结构常用的主程序结构如下:ORG0000HLJMPMAINORG中断入口地址LJMPINT⋮ORGXXXXHMAIN:主程序INT:中断服务程序2020/1/2422三、中断服务程序的流程2020/1/2423例5-4根据图5-9的中断服务程序流程,编出中断服务程序。假设,现场保护只需将PSW和A的内容压入堆栈中保护。典型的中断服务程序如下:INT:CLREA;CPU关中断PUSHPSW;现场保护PUSHACC;SETBEA;CPU开中断;中断处理程序段CLREA;CPU关中断POPACC;现场恢复POPPSWSETBEA;CPU开中断RETI;中断返回,恢复断点2020/1/24245.3.1中断程序举例【例5-5】单外部中断源示例80C51CLKQCLKDVCCP3.0INT074LS74D7D0┆┆P1.0P1.7┆┆ORG0000HSTART:LJMPMAINORG0003HLJMPINTOORG0030HMAIN:CLRIT0;电平SETBEASETBEX0MOVDPTR,#1000H……主程序:2020/1/2425中断服务程序:ORG0200HINT0:PUSHPSWPUSHACCCLRP3.0;由P3.0输出0NOPNOPSETBP3.0MOVP1,#0FFH;置P1口为输入MOVA,P1;输入数据MOVX@DPTR,A;存入数据存储器INCDPTR;修改数据指针,指向下一个单元……POPACC;恢复现场POPPSWRETI2020/1/2426【例5-6】多外部中断源示例80C51P1.3INT0XI0P1.0+5VINT1XI1XI2XI3XI411111中断服务程序:ORG0003HLJMPINSE0ORG0013HLJMPINSE1……INSE0:PUSHPSW;XI0中断服务PUSHACC……POPACCPOPPSWRETI(转下页)2020/1/2427INSE1:PUSHPSW(接上页)PUSHACCJBP1.0,DV1;P1.0为1,转XI1中断服务程序JBP1.1,DV2;P1.1为1,转XI2中断服务程序JBP1.2,DV3;P1.2为1,转XI3中断服务程序JBP1.3,DV4;P1.3为1,转XI4中断服务程序INRET:POPACCPOPPSWRETIDV1:……;XI1中断服务程序AJMPINRET……DV4:……;XI4中断服务程序AJMPINRET