第5章中断系统和定时/计数器本章要点中断的基本概念80C51中断源(5个)中断控制寄存器中断处理过程中断优先控制和中断嵌套中断系统的应用80C51定时/计数器(2个)定时/计数器控制寄存器定时/计数器工作方式定时/计数器的应用5.180C51中断系统5.1.1中断概述什么叫中断?CPU暂时中止其正在执行的程序,转去执行请求中断的那个外设或事件的服务程序,等处理完毕后再返回执行原来中止的程序,叫做中断。为什么要设置中断?⑴提高CPU工作效率⑵具有实时处理功能⑶具有故障处理功能⑷实现分时操作5.1.2中断源和中断控制寄存器中断源中断源是指能发出中断请求,引起中断的装置或事件。80C51单片机的中断源共有5个,其中2个为外部中断源,3个为内部中断源。INT0:外部中断0,中断请求信号由P3.2输入。INT1:外部中断1,中断请求信号由P3.3输入。T0:定时/计数器0溢出中断,对外部脉冲计数由P3.4输入。T1:定时/计数器1溢出中断,对外部脉冲计数由P3.5输入。串行中断:包括串行接收中断RI和串行发送中断TI。中断控制寄存器80C51单片机中涉及中断控制的有3个方面4个特殊功能寄存器。①中断请求:定时和外中断控制寄存器TCON;串行控制寄存器SCON;②中断允许控制寄存器IE;③中断优先级控制寄存器IP。中断请求控制寄存器TCON的结构、位名称、位地址和功能如下:TCOND7D6D5D4D3D2D1D0位名称TF1—TF0—IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H功能T1中断标志—T0中断标志—INT1中断标志INT1触发方式INT0中断标志INT0触发方式①TF1:T1溢出中断请求标志T1计数溢出后,由CPU内硬件自动置“1”,表示向CPU请求中断。CPU响应该中断后,片内硬件自动对其清0。②TF0:T0溢出中断请求标志T0计数溢出后,TF0=“1”(同上)。③IE1:外中断INT1中断请求标志当P3.3引脚信号有效时,触发IE1置“1”。当CPU响应该中断后,由片内硬件自动清0(自动请0只适用于边沿触发方式)。④IE0:外中断INT0中断请求标志当P3.2引脚信号有效时,IE0=“1”(同上)。⑤IT1:外中断INT1触发方式控制位IT1=“1”,边沿触发方式,当P3.3引脚出现下跳边脉冲信号时有效。IT1=“0”,电平触发方式,当P3.3引脚为低电平信号时有效。IT1由软件置位或复位。⑥IT0:外中断INT0触发方式控制位其意义和功能与IT1相似。串行控制寄存器SCON①TI:串行口发送中断请求标志②RI:串行口接收中断请求标志CPU在响应串行发送、接收中断后,TI、RI不能自动清0,必须由用户用软件清0!SCOND7D6D5D4D3D2D1D0位名称——————TIRI位地址——————99H98H功能——————串行发送中断标志串行接收中断标志中断允许控制寄存器80C51对中断源的开放或关闭是由中断允许控制寄存器IE控制的,可用软件对各位分别置“1”或清0,从而实现对各中断源开放或关闭。IE的结构、位名称和位地址如下:IED7D6D5D4D3D2D1D0位名称EA——ESET1EX1ET0EX0位地址AFH——ACHABHAAHA9HA8H中断源CPU——串行口T1INT1T0INT0①EA:CPU中断允许控制位EA=1,CPU开中;EA=0,CPU关中,且屏蔽所有5个中断源。②EX0:外中断INT0中断允许控制位EX0=1,INT0开中;EX0=0,INT0关中。③EX1:外中断INT1中断允许控制位EX1=1,INT1开中;EX1=0,INT1关中。④ET0:定时/计数器T0中断允许控制位ET0=1,T0开中;ET0=0,T0关中。⑤ET1:定时/计数器T1中断允许控制位ET1=1,T1开中;ET1=0,T1关中。⑥ES:串行口中断(包括串发、串收)允许控制位ES=1,串行口开中;ES=0,串行口关中。说明:80C51对中断实行两级控制,总控制位是EA,每一中断源还有各自的控制位。首先要EA=1,其次还要自身的控制位置“1”。如要使INT0开中断MOVIE,#10000001B或者:SETBEASETBEX0中断优先级控制寄存器IP80C51有5个中断源,划分为2个中断优先级:高优先级和低优先级。IP的结构、位名称和位地址如下:IPD7D6D5D4D3D2D1D0位名称———PSPT1PX1PT0PX0位地址———BCHBBHBAHB9HB8H中断源———串行口T1INT1T0INT0①PX0:INT0中断优先级控制位。PX0=1,为高优先级;PX0=0,为低优先级;②PX1:INT1中断优先级控制位。控制方法同上。③PT0:T0中断优先级控制位。控制方法同上。④PT1:T1中断优先级控制位。控制方法同上。⑤PS:串行口中断优先级控制位。控制方法同上。5.1.3中断处理过程中断处理过程大致可分为四步:中断请求、中断响应、中断服务、中断返回。中断请求中断源发出中断请求信号,相应的中断请求标志位(在中断允许控制寄存器IE中)置“1”。中断响应CPU查询(检测)到某中断标志为“1”,在满足中断响应条件下,响应中断。⑴中断响应条件①该中断已经“开中”;②CPU此时没有响应同级或更高级的中断;③当前正处于所执行指令的最后一个机器周期;④正在执行的指令不是RETI或者是访向IE、IP的指令,否则必须再另外执行一条指令后才能响应。⑵中断响应操作CPU响应中断后,进行下列操作:①保护断点地址;②撤除该中断源的中断请求标志;③关闭同级中断;④将相应中断的入口地址送入PC。80C51五个中断入口地址:INT0:0003H;T0:000BH;INT1:0013H;T1:001BH;串行口:0023H中断入口地址是固定的,且相互间隔只有8B。一般来说,8B安排不下一个中断服务程序,可安排一条跳转指令,跳转到其他合适的区域编制真正的中断服务程序!执行中断服务程序中断服务程序应包含以下几部分:⑴保护现场⑵执行中断服务程序主体,完成相应操作。⑶恢复现场中断返回在中断服务程序最后,必须安排一条中断返回指令RETI,当CPU执行RETI指令后,自动完成下列操作:⑴恢复断点地址。⑵开放同级中断,以便允许同级中断源请求中断。保护现场:是指把断点处有关寄存器的内容压入堆栈保护,以便中断返回时恢复。通常有关的是特殊功能寄存器Acc、PSW和DPTR等。5.1.4中断响应等待时间若排除CPU正在响应同级或更高级的中断情况,中断响应等待时间为:3~8个机器周期。5.1.5中断请求的撤除中断源发出中断请求,相应中断请求标志置“1”。CPU响应中断后,必须清除中断请求“1”标志。否则中断响应返回后,将再次进入该中断,引起死循环出错。对定时/计数器T0、T1中断,CPU响应中断时就用硬件自动清除了相应的中断请求标志位TF0、TF1。外中断INT0、INT1,若采用边沿触发方式,CPU响应中断时,也用硬件自动清除相应的中断请求标志IE0或IE1。若采用电平触发方式,CPU响应中断时,虽也用硬件自动清除相应中断请求标志IE0或IE1,但相应引脚(P3.2或P3.3)的低电平信号若继续保持下去,中断请求标志IE0或IE1就无法清0,也会发生重复响应中断情况。对串行口中断,CPU响应中断后并不自动清除相应的中断请求标志TI或RI,用户应在串行中断服务程序中用软件清除TI或RI。5.1.6中断优先控制和中断嵌套中断优先控制80C51中断优先控制首先根据中断优先级,此外还规定了同一中断优先级之间的中断优先权。其从高到低的顺序为:INT0、INT1、T0、T1、串行口。中断优先级是可编程的,而中断优先权是固定的,不能设置,仅用于同级中断源同时请求中断时的优先次序。80C51中断优先控制的基本原则:①高优先级中断可以中断正在响应的低优先级中断,反之则不能。②同优先级中断不能互相中断。③同一中断优先级中,若有多个中断源同时请求中断,CPU将先响应优先权高的中断,后响应优先权低的中断。中断嵌套当CPU正在执行某个中断服务程序时,如果发生更高一级的中断源请求中断,CPU可以“中断”正在执行的低优先级中断,转而响应更高一级的中断,这就是中断嵌套。中断嵌套只能高优先级“中断”低优先级,低优先级不能“中断”高优先级,同一优先级也不能相互“中断”。中断嵌套结构类似与调用子程序嵌套,不同的是:①子程序嵌套是在程序中事先按排好的;中断嵌套是随机发生的。②子程序嵌套无次序限制,中断嵌套只允许高优先级“中断”低优先级。5.1.7中断系统的应用中断初始化⑴设置堆栈指针SP(可设置SP=60H或50H)⑵定义中断优先级⑶定义外中断触发方式⑷开放中断(必须同时开放二级控制)⑸安排好等待中断或中断发生前主程序应完成的操作内容。中断服务主程序中断服务子程序内容要求:⑴在中断服务入口地址设置一条跳转指令,转移到中断服务程序的实际入口处。⑵根据需要保护现场。⑶中断源请求中断服务要求的操作。⑷恢复现场。与保护现场相对应,注意先进后出、后进先出操作原则。⑸中断返回,最后一条指令必须是RETI。例5-1出租车计价器计程方法是车轮每运转一圈产生一个负脉冲,从外中断(P3.2)引脚输入,行驶里程为轮胎周长×运转圈数,设轮胎周长为2m,试实时计算出租车行驶里程(单位米),数据存32H、31H、30H。解:编程如下:ORG0000H;复位地址LJMPSTAT;转初始化ORG0003H;中断入口地址LJMPINT;转中断服务程序ORG0100H;初始化程序首地址STAT:MOVSP,#60H;置堆栈指针SETBITO;置边沿触发方式MOVIP,#01H;置高优先级MOVIE,#81H;开中MOV30H,#0;里程计数器清0MOV31H,#0;MOV32H,#0;LJMPMAIN;转主程序,并等待中断ORG0200H;中断服务子程序首地址INT:PUSHAcc;保护现场PUSHPSW;MOVA,30H;读低8位计数器ADDA,#2;低8位计数器加2mMOV30H,A;回存CLRA;ADDCA,31H;中8位计数器加进位MOV31H,A;回存CLRA;ADDCA,32H;高8位计数器加进位MOV32H,A;回存POPPSW;恢复现场POPAcc;RETI;中断返回5.280C51定时/计数器定时/计数器是单片机系统一个重要的部件,其工作方式灵活、编程简单、使用方便,可用来实现定时控制、延时、频率测量、脉宽测量、信号发生、信号检测等。此外,定时/计数器还可作为串行通信中波特率发生器。5.2.1定时/计数器概述80C51单片机内部有两个定时/计数器T0和T1,其核心是计数器,基本功能是加1。对外部事件脉冲(下降沿)计数,是计数器;对片内机周脉冲计数,是定时器。机周脉冲时间乘以机周数就是定时时间。计数器由二个8位计数器组成。T0的两个8位计数器是TH0和TL0,TH0是高8位,TL0是低8位;T1的两个8位计数器是TH1和TL1,合起来是16位计数器。定时时间和计数值可以编程设定,其方法是在计数器内设置一个初值,然后加1计满后溢出。调整计数器初值,可调整从初值到计满溢出的数值,即调整了定时时间和计数值。定时/计数器作为计数器时,外部事件脉冲必须从规定的引脚输入,T0的外部事件脉冲应从P3.4引脚输入,T1的外部事件脉冲应从P3.5引脚输入,从其他引脚输入无效。且外部脉冲的最高频率不能超过时钟频率的1/24。5.2.2定时/计数器的控制寄存器定时/计数器控制寄存器TCONTCON低4位与外中断INT0、INT1有关,已在中断中叙述。高4位与定时/计数器T0、T1有关。TCONT1中断标志T1运行标志T0中断标志T0运行标志INT1中断标志INT1触发方式INT0中断标志INT0触发方式位名称TF1TR1TF0TR0IE1IT1IE0IT0位地址8FH8EH8DH8CH8BH8AH89H88H⑴TF1:定时/计数器T1溢出标