2020/1/241第5章80C51的中断系统及定时/计数器80C51单片机的中断系统5.180C51单片机的中断处理过程5.280C51单片机的定时/计数器5.380C52的定时/计数器25.42020/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)2020/1/245触发方式设置及中断标志76543210TCONTF1TR1TF0TR0IE1IT1IE0IT0字节地址: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/247溢出中断标志TF1、TF0(用TFx表示)溢出中断请求标志TFx,Tx启动后就开始由初值进行加1计数,直至最高位产生溢出使TFx=1向CPU请求中断。CPU响应中断后TFx自动清0。SCON的中断标志76543210SCONTIRI字节地址:98HRI:串口接收中断标志,响应中断时不能自动清除TI:串口发送中断标志,响应中断时不能自动清除2020/1/2485.1.380C51中断的控制中断允许控制中断源的开放和屏蔽由IE控制(1,开放;0,禁止)76543210IEEAESET1EX1ET0EX0字节地址:A8HEX0:外中断0允许ET0:T0中断允许EX1:外中断1允许ET1:T1中断允许ES:串口中断允许EA:CPU中断允许2020/1/249中断优先级控制中断优先级由IP控制(1,高级;0,低级)76543210IPPSPT1PX1PT0PX0字节地址:B8HPX0:外中断0优先级PT0:T0中断优先级PX1:外中断1优先级PT1:T1中断优先级PS:串口中断优先级同一优先级的自然顺序:自高至低:INT0、TO、INT1、T1、串口。2020/1/2410中断优先级遵循的原则几个中断同时申请,先响应高级的中断正进行的中断服务,同级或低级中断不能对其中断,但可以被高级中断所中断。为此,中断系统内设有对应高、低2个优先级状态触发器(用户不能寻址)。状态触发器的复位由中断返回指令RETI控制。2020/1/24115.280C51单片机中断处理过程5.2.1中断响应条件和时间中断响应条件有中断请求相应的中断允许位为1CPU开中断(即EA=1)遇下面情况之一将不被响应(此间中断条件失效,中断丢失)正在处理同级或高级中断当前查询周期不是所执行指令的最后一个机器周期正在执行RETI或访问IE或IP的指令2020/1/2412中断响应时间中断响应至少需要3个完整的机器周期(3~8个)!S1保护断点,长调用至入口中断服务S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6S1S2S3S4S5S6标志查询ε中断有效M1M2M3M4M5受阻时要附加3~5个机器周期(无同级或高级中断正进行)查询周期不是当前指令的最后机器周期(如MUL,+3)查询周期恰逢RETI类指令(且后跟MUL指令+5)2020/1/24135.2.2中断响应过程CPU响应中断过程将相应优先级状态触发器置1(阻断后来同级或低级中断)执行硬件LCALL指令(PC入栈,中断服务程序入口址送PC)执行中断服务程序编写中断服务程序注意中断服务程序入口存放指令LJMP或AJMP现场保护与现场恢复2020/1/24145.2.3中断返回中断服务程序最后指令必须是RETI,其功能:将断点从堆栈弹送PC,CPU从原断点继续执行将相应优先级状态触发器清0,恢复原来工作状态注意不能用RET代替RETI中断服务程序中PUSH和POP必须成对使用2020/1/24155.2.4中断程序举例【例5-1】单外部中断源示例80C51CLKQCLKDVCCP3.0INT074LS74D7D0┆┆P1.0P1.7┆┆ORG0000HSTART:LJMPMAINORG0003HLJMPINTOORG0030HMAIN:CLRIT0;电平SETBEASETBEX0MOVDPTR,#1000H……主程序:2020/1/2416中断服务程序:ORG0200HINT0:PUSHPSWPUSHACCCLRP3.0;由P3.0输出0NOPNOPSETBP3.0MOVP1,#0FFH;置P1口为输入MOVA,P1;输入数据MOVX@DPTR,A;存入数据存储器INCDPTR;修改数据指针,指向下一个单元……POPACC;恢复现场POPPSWRETI2020/1/2417【例5-2】多外部中断源示例80C51P1.3INT0XI0P1.0+5VINT1XI1XI2XI3XI411111中断服务程序:ORG0003HLJMPINSE0ORG0013HLJMPINSE1……INSE0:PUSHPSW;XI0中断服务PUSHACC……POPACCPOPPSWRETI(转下页)2020/1/2418INSE1: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中断服务程序AJMPINRET2020/1/24195.380C51单片机的定时/计数器定时/计数器的结构基本型:T0,定时、计数。T1,定时、计数、串口波特率发生器。增强型:增加了T2。见5.3.4节。5.3.1定时/计数器的结构和工作原理GATEC/TM1M0GATEC/TM1M0TH1TL1TH0TL0T1方式T0方式T1引脚T0引脚机器周期脉冲内部总线TMODTCON外部中断相关位TF1TR1TF0TR0TH1、TL1TH0、TL0TCONTMOD2020/1/2420定时/计数器的工作原理实质是16位加1计数器定时器模式时,是对内部机器周期计数。计数值乘以机器周期就是定时时间计数器模式时,是对外部事件计数。脉冲由T0(P3.4)或T1(P3.5)引脚输入。注意:(若计数值为N,计数初值为X)•溢出信号使TF0或TF1置1,并发出中断请求,16位时有:N=65536-X,或X=65536-N•12MHz晶振时,计数频率低于0.5MHz2020/1/24215.3.2定时/计数器的控制工作方式寄存器TMOD76543210TMODGATEC/TM1M0GATEC/TM1M0字节地址:89HGATE:门控位。GATE=0时,只要TRx为1,就可启动计数器工作;GATA=1时,定时器的启动还要加上INTx引脚为高电平这一条件。C/T:模式选择位。清0为定时模式,置1为计数方式。M1M0:工作方式设置位。可设置四种工作方式(见下页)。2020/1/2422M1M0工作方式说明00方式013位定时/计数器01方式116位定时/计数器10方式28位自动重装定时/计数器11方式3T0分成两个独立的8位定时/计数器;T1此方式停止计数注意:TMOD不能进行位寻址2020/1/2423控制寄存器TCON76543210TCONTF1TR1TF0TR0字节地址:88HTFx:Tx溢出标志位。响应中断后TFx有硬件自动清0。用软件设置TFx可产生同硬件置1或清0同样的效果。TRx:Tx运行控制位。置1时开始工作;清0时停止工作。TRx要由软件置1或清0(即启动与停止要由软件控制)。2020/1/24245.3.3定时/计数器的工作方式T0有方式0、1、2、3;T1有方式0、1、2。以T0为例说明。方式0:13位方式TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚00机器周期TH0TL08位5位溢出TCONTMODD0D7D7D0申请中断12020/1/2425C/T=1时,则为计数模式,有:X=213-N=8192-NC/T=0时,则为定时模式,有:X=213-N=8192-N,N=t/Tcy【例5-3】若计数个数N为2,求计数初值。公式法计算:X=8192-2=8190=1FFEH求补法计算:对0000000000010B取反加1为:1111111111110B(1FFEH)初值计算:公式法求补法:X=对N求补2020/1/2426门控位作用当GATE=0时仅由TR0控制与门的开启。与门输出1时,控制开关接通,计数开始;当GATE=1时与门的开启由INT0和TR0共同控制。这种方式可以用来测量INT0引脚上正脉冲的宽度。注意:方式0的计数初值高8位和低5位确定麻烦,实际应用中常由16位的方式1取代。2020/1/2427方式1:16位方式TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位8位溢出TCONTMODD0D7D7D0申请中断X=216-N=65536-N计数范围:1~65536计数初值要分成2个字节分别送入TH0、TL02020/1/2428【例5-4】若要求定时器T0工作于方式1,定时时间为1ms,当晶振为6MHz时,求送入TH0和TL0的计数初值各为多少?应怎样送入TH0和TL0?由于晶振为6MHz,所以机器周期Tcy为2µS,因此:N=t/Tcy=1×10-3/2×10-6=500X=216-N=65536-500=65036=FE0CH也可以利用以下2条指令完成:MOVTL0,#(65536-500)MOD256;余数为计数初值的低字节MOVTH0,#(65536-500)/256;商为计数初值的高字节用传送指令分别将FEH送入TH0中,0CH送入TL0中即可。2020/1/2429方式2:8位自动重装方式X=28-N=256-N计数范围:1~256特别适合与脉冲信号发生器TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚INT0引脚10机器周期TH0TL08位溢出TCONTMODD0D7D7D0申请中断2020/1/2430方式3:(仅T0有此方式,T1的方式3将停止计数)TL0进行8位定时/计数TH0进行8位定时(T1方式2时,可出借TR1、TF1)TF1TR1TF0TR0GATEC/TM1M0GATEC/TM1M01&≥110T0引脚