资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第7章,89C51单片机,中断系统和定时器,89C51有较强的中断处理功能,提高效率,满足实时处理应用。内部的定时器/计数器实现定时和外部事件计数功能。本章结合应用实例加以介绍。,7.1 计算机的中断处理过程,计算机执行现行程序的过程中,出现某些急需处理的特殊请求或异常情况,CPU暂时中止现行程序,而转去对随机发生的更紧迫的事件进行处理,在处理完毕后,CPU将自动返回原来的程序继续执行。这样的过程称为中断。,中断处理方式的优点是:,.中断方式消除了CPU在查询方式中的等待现象,大大提高了CPU的工作效率。,实现分时操作。可以使多个外设同时工作,并分,时提供服务,提高CPU利用率和输入输出速度.,.面向实时处理的应用。实时控制时,请求CPU提,供服务随机发生,中断系统可立即响应并处理.,.及时进行故障处理。当出现故障时,可及时转,去执行故障处理程序,自行处理而不必停机。,7.1.2 中断的概念,中断系统:实现中断功能的部件,又称中断机构。,中断源:产生中断的请求的来源称为中断源。,中断请求:中断源向,CPU,提出的处理请求。,中断优先级:对多个中断源的请求,根据响应的,先后次序安排的级别,称为中断优先级。,中断响应:,CPU,暂时中止原先的程序,转到去处,理中断请求的过程。,中断服务:对中断请求事件的整个处理过程。,中断返回:中断处理完毕,再返回到原来程序被,中止的地方,称为中断返回。,中断处理过程,:,中断请求,:中断源向,CPU,提出的处理请求,中断响应,:,CPU,暂时中止自身的事务,转去处理中断事件的过程,,中断服务,:对事件的整个处理过程,称为中断服务(或中断处理)。,中断返回:,中断处理完毕,再返回到原来被中止的地方,称为中断返回,7.2 89C51单片机的中断处理,7.2.1 89C51的中断源和中断标志,89C51单片机有5个中断源,两个优先级,,可以实现两级中断嵌套。5个中断源分别是:,INT0,外部中断0请求,低电平有效。通过P3.2引脚输入。,INT1,外部中断1请求,低电平有效。,通过P3.3引脚输入。,T0,定时器/计数器0溢出中断请求。,T1,定时器/计数器1溢出中断请求。,TX/RX,串行口中断请求。当串行口完成,一帧数据的发送或接收时,便请求中断.,中断源分为两类:外部中断和内部中断。,外部中断源,:,外部输入的两个中断请求,INT0,(P3.2),、,INT1,(P3.3),直接触发寄存器,TCON,的,IE0,IE1,产生中断标志。,触发方式,:,脉冲或电平触发,由,TCON,中,IT0,IT1,决定,.,内部中断源:,定时器,T0,和,T1,当计数器溢出时,产生溢出中断,,使,TCON,的中断标志位,TF0,TF1,置“,1”,产生中断标志。,串行口发送接收中断源,发送中断请求标志,TI,和接收中断请求标志,RI,。,使,SCON,(,串口控制寄存器,),共用的中断标志置位。,中断标志位可以进行位寻址操作。,中断标志位:,TCON,(定时器的控制寄存器)中中断标志位,TF1,TF0,IE1,IT1,IE0,IT0,TCON,(88H),8FH 8EH 8DH 8CH 8BH 8AH 89H 88H,TCON,为定时器,/,计数器,T0,和,T1,的控制器,同时锁存,T0,和,T1,的溢出中断标志及外部,中断,0,和,1,的中断标志等。,1、,TF1,:定时器/计数器,T1,溢出中断请求标志位,2、,TF0,:定时器/计数器,T0,溢出中断请求标志位,3、,IE1,:外部中断1中断请求标志,INT1(P3.3),4、,IE0,:外部中断0中断请求标志,INT0(P3.2),5、,IT1,:,外部中断1的中断触发方式控制位。,IT1=0时,外部中断1程控为电平触发方式,IT1=1时,外部中断1程控为边沿触发方式,6、,IT0,:,外部中断0的中断触发方式控制位。,其含义与IT1类同。,TCON,各控制位的含义,SCON,(串行口控制寄存器)中中断标志位,TI,RI,SCON,(98H),9FH 9EH 9DH 9CH 9BH 9AH 99H 98H,SCON,为串行口控制寄存器,,其低2位锁存串行口的中断标志RI和TI,。,TI,:串行口发送中断请求标志。,RI,:串行口接收中断请求标志。,中断标志位:,7.2.2 89C51的中断允许控制,中断允许控制寄存器,IE,EA,ES,ET1,EX1,ET0,EX0,IE,(A8H),AFH AEH ADH ACH ABH AAH A9H A8H,EA,中断允许总控制位,。,EA,=0,,,屏蔽,所有的中断请求;,EA,=1,CPU,开放,中断。,各中断源的中断请求是否允许,还要取决于各中断源的中断允许控制位状态。这就是两级控制。,ES,串行口中断允许位,ES=0,,,禁止串行口,中断;,ES=1,,,允许串行口,中断。,ET1,定时器/计数器T1的溢出中断允许位。,ET1=0,,,禁止T1,中断;,ET1=1,,,允许T1,中断。,EX1,外部中断1的溢出中断允许位,。,EX1=0,,,禁止外部中断1,中断;,EX1=1,,,允许外部中断1,中断。,ET0,定时器/计数器T0的溢出中断允许位。,ET0=0,,,禁止T0,中断;,ET0=1,,,允许T0,中断。,EX0,外部中断0的溢出中断允许位,。,EX0=0,,,禁止外部中断0,中断;,EX0=1,,,允许外部中断0,中断。,例7-1,假设允许片内定时器/计数器中断,禁止其他中断试根据假设条件设置IE的相应值。,解,:,(IE)=10001010B=8AH,(a)用字节操作指令,MOV IE,#8AH,;或,MOV 0A8H,#8AH,;,(b)用位操作指令,SETB ET0,;定时器/计数器0允许中断,SETB ET1,;定时器/计数器1允许中断,SETB EA,;CPU开中断,7.2.3 89C51的中断优先级管理,1、89C51的中断优先级,89C51,有两个中断优先级。,每个中断请求源均可编程为高优先级中断,或低优先级中断。,优先级编程通过中断优先级寄存器,IP,控制,2、中断优先级寄存器,IP,PS,PT1,PX1,PT0,PX0,IP,(B8H),BCH BBH BAH B9H B8H,PS,串行口中断优先级控制位,PT1,定时器/计数器T1中断优先级控制位,PX1,外部中断1中断优先级控制位,PT0,定时器/计数器T0中断优先级控制位,PX0,外部中断0中断优先级控制位,若某控制位为,1,则相应中断源规定为,高级,中断,反之,为,0,,则相应的中断源规定为,低级,中断。,3、中断优先级排列顺序,当同时接收到几个同一优先级的中断请求时,响应哪个中断源则取决于内部硬件查询顺序。,其优先级顺序排列如,图,所示:,中断源同级内的中断优先级,外部中断0中断,INT0,高级,定时器/计数器,T0,溢出中断,外部中断1,INT1,定时器/计数器,T1,溢出中断,串行口中断,TI/RI,低级,4、中断优先级控制实现的功能,(1)按内部查询顺序排队,当数个中断源同时发出中断请求时,CPU根据事先确定的中断源优先级顺序,依次响应其中断请求。,(2)中断嵌套,CPU在执行主程序,低级中,断请求,响应低级中断请求,CPU,执行低级,中断服务程序,高级中,断请求,响应高级中断请求,CPU,执行高级,中断服务程序,返回低级中断程序,返回主程序,例7-2,设:8031的片外中断,(,INT0,INT1),为高优先级,片内中断,(,T0,T1,串口),为低优先级,设置IP值。,解:(IP)=00000101B=05H,(a)用字节操作指令,MOV IP,#05H,;,或,MOV 0B8H,#05H,;,(b)用位操作指令,SETB PX0,SETB PX1,CLR PS,CLR PT0,CLR PT1,7.2.4 89C51的中断响应,中断响应条件:,有中断源发出中断请求;,CPU允许中断:中断总允许位,EA=1,,,申请中断的中断源的中断允许位为1;,中断优先级别足够高,无同级或更高级中断正,在被服务。,当前的指令周期已经结束。,若现行指令为,RETI,或访问,IE,或,IP,指令时,,该指令及紧接的另一条指令已执行完。,中断响应操作过程:,保存断点,把当前PC值压入堆栈;,将相应的中断服务程序的入口地址送入PC;,对有些中断源,CPU会自动清除中断标志;,执行中断服务程序;,执行到返回指令,RETI,,中断服务程序结束,,将堆栈内容弹出到PC,返回原来断点继续执行.,各中断源及其对应的矢量地址,7.2.5 89C51的中断处理,中断处理,:,CPU,响应中断后。转入中断服务程序的入口,执行中断服务程序。从中断服务程序的第一条指令开始到返回指令,RETI,为止,这个过程称为中断处理或中断服务。,中断处理主要包括两部分内容:,1,、保护现场:,2,、为中断源服务,.在矢量地址处写一条转移指令(,LJMP,或,AJMP,),.保护现场:将有关的寄存器的内容保护起来,,通常使用入栈指令,PUSH,将其压入堆栈。,.如果中断服务时禁止更高优先级的中断,则对,IE进行设置,以屏蔽更高优先级的中断。,.为中断源服务:针对中断源要求进行处理。,编程时注意入口、出口参数的传递,.恢复现场:将原先保存的寄存器内容恢复,,通常使用出栈指令,POP,从堆栈弹出。,.如果进入中断服务时对IE进行了设置,屏蔽更,高优先级中断,则还需要进行开中断的操作。,.中断服务程序最后一条指令是,RETI,。,中断处理过程,7.2.6 89C51的中断返回,中断服务程序的最后一条指令为中断返回指令,RETI,。,CPU,执行,RETI,指令时,一方面清除中断响应时,所置位的“优先级生效”触发器,另一方面自动,从当前栈顶弹出原先保存的断点地址,送入程,序计数器,PC,,中断服务程序结束。,CPU,返回到,原来断点继续执行主程序。,注意在中断服务程序中,PUSH,和,POP,指令必须,成对使用。,例7.3 写出响应5个中断请求的中断服务有关语句。,解:,ORG 0000H,LJMP MAIN,;复位,转到MAIN执行主程序,ORG 0003H,LJMP INT0P,;外部中断0,转到INT0P执行,ORG 000BH,LJMP T0P,;定时器T0中断,转到T0P执行,ORG 0013H,LJMP INT1P,;外部中断1,转到INT1P执行,ORG 001BH,LJMP T1P,;定时器T1中断,转到T1P执行,ORG 0023H,LJMP SIOP,;串口中断,转到SIOP执行。,ORG 1000H,MAIN:,;主程序,ORG 2000H,INT0P:,;外部中断0中断服务程序,RETI,;中断返回,ORG 3000H,T0P:,;定时器T0中断服务程序,RETI ;中断返回,1、主程序,的起始地址,51系列单片机,复位,后,,(PC)=0000H,编程时应在,0000H,处写一条,跳转指令。,主程序以跳转的目标地址为起始地址开始,。,而,0003H002BH,分别为各,中断源的入口地址,。,ORG 0000H,LJMP START,中断程序说明:,2、主程序的初始化内容,初始化,:,将用到的内部部件或扩展芯片进行初始工作状态设定。,单片机,复位,后,特殊功能寄存器,IE,、,IP,内容均为,00H,,,所以应对,IE,、,IP,进行初始化编程,以开放中断,允许某些中断源中断和设置中断优先级等。,3、中断服务程序的起始地址,如中断服务程序的指令代码大于,8,个字节,则,应在相应的入口处写一条,无条件转移指令,。,并以跳转指令的目标地址作为中断服务程序的,起始地址进行编程。,中断系统对五个中断源规定了各自的入口地址,例,:ORG 0000H LJMP,START,ORG 0003H LJMP,INT0P,ORG 000BH LJMP,T0P,ORG,1000H,START,:ORG,2000H,INT0P,:ORG,3000HT0P,:,0003H,LJMP,20,00,2000H,中断服,务程序,服务程序中,注意用软件保护现场,如:,PUSH A,执行中断程序时禁止更高优先级中断,可以先用软,件禁止其它中断源中断,返回前再开放。,及时清除那些不能被硬件自动清除的中断请求标志,以免产生错误的中断。如:,CLR TF0,主程序和中断服务程序之间的参数传递与主程序和子程序的参数传递方式相同。,中断服务程序中的压栈与出栈指令必须成对使用,以程序的正确返回。,PUSH POP,中断服务程序最后一条指令为:,RETI,4、中断服务程序,7.2.7 89C51单片机的中断处理实例,:,4个故障源的显示电路,故障源,A,B,C,D,输入信号.,正常时,A,B,C,D,输入为低电平,,显示灯,LA,LB,LC,LD,全灭,.,如发生故障,,A,B,C,D,对应输入信号变,为高电平,要求相应的指,示灯点亮。,为中断源服务:针对中断源要求进行处理。,SERVE:CPL P1.,在这种模式下,T0(T1)作为一个16位的定时,中断服务程序中的压栈与出栈指令必须成对使用,以程序的正确返回。,将堆栈内容弹出到PC,返回原来断点继续执行.,如中断服务程序的指令代码大于8个字节,则,将相应的中断服务程序的入口地址送入PC;,原来断点继续执行主程序。,定时器中计数器的启动、停止由定时器控制寄存器TCON来控制,,按照实际需要,选择定时方式还是计数方式;,TCON 各控制位的含义,3,L4 ;查询,D无故障,转L4,A,B,C,D输入为低电平,,SETB EX0 ;,ORG 0003H,说明,:,采用中断方式的故障显示电路,4,个中断源的信号通过“或非门”电路和,89C51,的,外部中断,0,输入端,INT0,相连。,当发生故障时,某一信号由低电平变为高电平,时,会通过,INT0,向,CPU,提出中断请求,采用边,沿触发方式。,在中断服务程序中,通过读入,的信,号,对各个中断源进行查询,将查询的结果通,过,输出,输出为“,0”,,则点亮相应的,显示灯。,源程序:,ORG 0000H,AJMP MAIN,;复位,转向主程序,ORG 0003H,;外部中断0入口地址,AJMP INSER,;转向外部中断0程序,ORG 0030H,;主程序,MAIN:MOV A,#0FFH,MOV P1,A,;P1口为准双向口,SETB EX0,;允许外部中断0中断,SETB IT0,;选择边沿触发方式,SETB EA,;CPU开中断,HERE:SJMP HERE,;等待中断,(续:),ORG 0060H,;中断服务程序,INSER:JNB P1.0,L1,;查询,A无故障,转L1,;P1.0引起中断,LA点亮,L1:JNB P1.1,L2,;查询,B无故障,转L2,;P1.1引起中断,LB点亮,L2:JNB P1.2,L3,;查询,C无故障,转L3,;P1.2引起中断,LC点亮,L3:JNB P1.3,L4,;查询,D无故障,转L4,;P1.3引起中断,LD点亮,L4:RETI,;中断返回,END,中断技术实现的功能:,1.,分时操作:,CPU可以使多个外设同时工作,并分时为各外设提供服务,从而提高了CPU的利用率和输入和输出的速度。,2.,实时处理:,用于实时控制时,请求CPU提供服务时随机发生的。有了中断系统,CPU就可以立即响应并加以处理。,3.,故障处理:,出现出现一些故障时,CPU可及时转去执行故障处理程序,自行处理故障而不必停机.,练习:利用中断显示系统故障,如,图,所示,当系统的各部分正常工作时,四个故障源的输入均为低电平,显示灯全灭。,当某部分出现故障时,相应的输入线有低电平变为高电平,相应的发光二极管亮。,通过,INT0,线引起,89C51,中断,(,边沿触发式,),。,中断服务程序中,将各故障源的信号读入,并加以查询,以进行相应的发光显示。,INT0,P1.0,P1.1,P1.2,P1.3,P1.4,P1.5,P1.6,P1.7,89C51,R,R,R,R,LED,LED,LED,LED,利用中断显示系统故障,返回,源程序如下:,ORG 0000H,SJMP MAIN,;上电,转向主程序,ORG 0003H,;外部中断0入口地址,SJMP INSER,;转向中断服务程序,MAIN:ANL P1,#55H,为输出,SETB EX0,;允许外部中断0中断,SETB IT0,;选择边沿触发方式,SETB EA,;CPU开中断,HERE:SJMP HERE,;等待中断,中断服务程序,ORG 0300H,INSER:JNB P1.0,L1,;查询中断源,(P1.0)=0,转L1,SETB P1.1,;是P1.0引起的中断,使相应的二极管亮,L1:JNB P1.2,L2,;继续查询,L2:JNB P1.4,L3,L3:JNB P1.6,L4,L4:RETI,END,7.3 89C51单片机中的定时器,7.3.1 定时器/计数器概述,内部有两个,16,位的定时器,/,计数器,,分别称为定时器,0,(,T0,)和定时器,1,(,T1,)。,每个计数器都包括两个,8,位的特殊功能寄存器,,T0,由,TH0,和,TL0,组成,,T1,由,TH1,和,TL1,组成。,它们的核心都是,16,位的加,1,计数器,,具有时间定时和对外部事件计数的功能。利用,它们可以用于定时控制、精确延时、对事件计,数和实时检测等工作。,89C51定时器结构,都可由,工作模式寄存器,TMOD,设置为,:,定时工作方式,或,计数工作方式,。,定时器中计数器的启动、停止由定时器控制寄存器,TCON,来控制,,定时器计数的溢出由定时器控制寄存器,TCON,中的有关标志位反映。,每个定时器,/,计数器有,四,种工作模式。,定时器,/,计数器进行定时或计数时,都是自动工作,不占用,CPU,的时间。只是在计数溢出时,才可能中断,CPU,当前的操作。因此,定时器,/,计数器是单片机中使用灵活且效率很高的部件。,定时工作方式,定时器每个,机器周期,使定时器(T0或T1)的数值,加1,直至计满溢出。,当8051采用12MHz晶振时,一个机器周期为1s,计数频率为1MHz。,计数工作方式,通过引脚,T0(P3.4),和,T1(P3.5),对,外部脉冲信号计数。当输入脉冲信号产,生由1至0的下降沿时定时器的值加1。,7.3.2 定时器的工作模式寄存器,TMOD,89C51,的定时器,/,计数器是可编程的部件,应用时,首先要通过软件编程来设置它的工作方式。,根据应用要求对定时器的工作模式寄存器,TMOD,的各位来进行设定工作方式。,TMOD,在特殊功能寄存器组内,地址为,89H,,它,不能位寻址,只能用字节操作。,在,TMOD,中,低,4,位用于决定,T0,的工作模式,,高,4,位用于决定,T1,的工作模式。,系统复位时,,TMOD,寄存器的的所有位被清,0,。,TMOD,各位定义及具体的意义,TMOD,各位的功能:,M1,和,M0,操作模式控制位,。,可形成四种编码,对应四种模式。,C/T,计数/定时方式选择位,。,C/T=0,,设置为,定时方式,。定时器计数89C51,片内脉冲,即对机器周期计数。,C/T=1,,设置为,计数方式,。计数器的输入来自T0(P3.4),或T1(P3.5)端的外部脉冲。,GATE,门控位,。,GATE=0,,只用软件使TR0(或TR1)置1就可以启动定时器;,GATE=1,,只有INT0(或INT1)引脚为高电平,且使TR0(或TR1)置1时,才能启动定时器工作。,7.3.3 定时器的控制寄存器,TCON,设置控制寄存器,TCON,中某些位来启动定时器,/,计数器工作和停止运行。,当计数器计满溢出,或有外部中断请求时,TCON,中有关位标明溢出和中断情况。,TCON,可以按字节寻址,(88H),进行设置或查询。,还可以按位寻址,进行位操作。在指令中可以写,位地址,(88H8FH),,也可以写位名,如,TF1,、,TR1,、,TF0,、,TR0,。,系统复位时,,TCON,寄存器的所有位被清,0,。,TCON,各位定义及具体的意义,TF1(TCON.7),T1溢出标志位,。,当,T1,溢出时,由硬件自动使中断触发器,TF1,置,1,,并,CPU,申请中断。,当,CPU,响应中断进入中断服务程序后,,TF1,被硬件自动清,0,。,也可用软件清,0,。,TF0(TCON.5),T0,溢出标志位,。,其功能和操作情况同,TF1,。,TCON,各位的功能:,TR1(TCON.6),T1运行控制位,通过软件置1或清0来,启动,或,关闭,T1。,指令,SETB TR1,使,TR1置1,,T1开始计数.,指令,CLR TR1,使,TR1清0,,T1停止计数,TR0(TCON.4),T0运行控制位,其功能和操作情况同TR1。,IE1,IT1,IE0,IT0(TCON.30),外部中断,INT1,INT0,请求及请求方式,控制位,。,7.4 89C51单片机中定时器/计数器的应用,在定时器/计数器应用时,进行如下工作:,设定,TMOD,来选择定时器,T0,T1,的,工作方式,:,按照实际需要,选择定时方式还是计数方式,;,按照定时长短,选择工作模式,0,、,1,、,2,或,3;,按照具体要求,选择是否受,INT0(INT1),控制。,2.,根据定时时间长短和工作模式,计算计数初值,:,根据工作模式,计算出定时时间的计数初值;,将计数初值送入定时器中,(TH1,TL1,TH0,、,TL0),3.,对,TCON,的设定来,启动,定时器,/,计数器工作。,4.,正确选择用程序查询方法或程序中断方式来进,行定时时间到(计数溢出)后的处理操作。,7.4.1 定时器工作方式的设置和计数初值计算,对定时器的工作模式寄存器,TMOD,进行设定:,l.定时方式和计数方式选择。,C/T=0,,为定时方式。,启动后,每个机器周期内定时器自动加1,直至计满溢出.,C/T=1,,为计数方式。,对引脚T0(P3.4)或T1(P3.5)上外部输入脉冲信号计数,2.定时器的4种工作模式,TMOD中的M1和 M0为操作模式控制位。形成,四种编码,对应四种模式。,模式 0:,T0(或T1)模式0结构,13位,计数器,模式 0:,M1 M0=0 0,时,定时器选择,工作模式,0,。,16,位计数器,TH0,和,TL0(,或,TH1,和,TL1),只用,13,位,TH0(,或,TH1),的高,8,位,TL0(,或,TL1),的低,5,位,用作,/13,位定时器计数器。,TL0(,或,TL1),高,3,位未用。,当,TL0,的低,5,位溢出时,向,TH0,进位,;,TH0,溢出时,向中断标志,TF0,进位并申请中断。,定时时间为:,t=(2,13,T0,初值,),振荡周期,12,用于计数工作方式时,对外部脉冲计数的个数最,多为:,2,13,=8192,个。,例7.5,定时器T0工作在模式0,CPU主频 fosc=6MHz,定时1ms,T0的初值为多少?计算最长定时时间?,解:T0工作于模式0时,为13位的加1计数器,.,定时1ms,根据公式:,t=(2,13,T0初值)振荡周期12,110,-3,=(2,13,T0初值)(1/610,-6,)12,T0初值,=7692=,低5位装入TL0,则:(TL0)=01100B=0CH,高8位装入TH0,则:(TH0)=11110000B=F0H,模式1:,T0(或T1)模式1结构,16位,计数器,模式 1:,M1 M0=0 1,时,定时器选择,工作模式,1,。,在这种模式下,,T0,(,T1,)作为一个,16,位的定时,器,/,计数器。,计数器,TH0,和,TL0(,或,TH1,和,TL1),都参与操作。,定时时间为:,t=(2,16,T0,初值,),振荡周期,12,用于计数方式时,对外部脉冲计数个数最多为:,2,16,=65,536,个。,定时器T1工作在模式1,CPU主频 fosc=12MHz,定时1ms,T0的初值为多少?计算最长定时时间?,解:T1工作于模式1,计数器为16位的加1计数器,fosc=12MHz,则1个振荡周期为1/12s,.,定时时间为10ms,,根据上述公式:,t=(2,16,T1初值)振荡周期12,1010,-3,=(2,16,T1初值)(1/1210,-6,)12,T1初值D8F0H,初值的低8位装入TL1,则:(TL1)=F0H,初值的高8位装入TH1,则:(TH1)=D8H,模式2:,T0(或T1)模式2结构,8位,计数器,模式2:,M1 M0=1 0,时,定时器选择,工作模式,2,。,这种模式下,,T0(,或,T1),配置成一个可以自动重,装载计数初值的,8,位定时器,/,计数器。,TL0(TL1),作,8,位的计数器,TH0(TH1),保存计数,初值。可省去重装计数初值语句,自动连续计数,适于作串行口波特率发生器。,定时时间为:,t=(2,8,TH0,初值,),振荡周期,12,计数时,对外部脉冲计数个数最多为:,2,8,=256,例7.7,定时器T1工作模式2,CPU主频fosc=11.0592MHz,若作串行口波特率发生器,波特率为2400bps时,,T1的初值为多少?,解:T1工作于定时方式模式2时,先设定TH1和,TL1初值,T1连续不断地自动重装载和计数。,串口的控制寄存器,SCON,可设定,4,种串口工作方式,其中方式,1,和,3,时,串口的移位时钟脉冲由定时器,T1,的溢出率决定。将,T1,作为波特率的发生器。,电源控制寄存器,PCON,中,SMOD,位,(,串口波特率倍增位,),,,SMOD=1,,倍增系数,n=32,。此时,波特率由定时器,T1,的溢出率和,SMOD,的值共同决定。,由此可以得出,定时时间长短为:,T1初值=244=F4 H,在模式2时,T1初值的装入TL1和TH1,则:,(TL1)=(TH1)=F4H,初始化的指令语句为:,MOV TMOD,#20H,;设置T1工作于方式2,MOV TL1,#0F4H,MOV TH1,#0F4H,;设置波特率2400bps,模式 3:,T0模式3,TL0和TH0,分成两个独立的,8位计数器,。,T1没有模式3,在T0模式3时,T1可设置为模式02.,模式3:,M1 M0=1 1,时,定时器,T0,选择,模式,3,。,在这种模式下,对,T0,和,T1,有不同的处理。,T0,工作于模式,3,时:,TL0,和,TH0,分成两个相互独立,8,位计数器,.,TL0,利用原来,T0,的资源,:,TMOD,有关,T0,的,GATE,、,C/T,位来设置工作方式,可以作定时器使用,也可以作为计数器使用。,TCON,的,TF0,作溢出标志,TR0,作为启动控制位。,使用,T0(P3.4),、,INT0(P3.2),引脚和外部连接。,TH0,只作定时器使用,对机器周期进行计数。,TCON,的,TF1,作溢出标志,TR1,作为启动控制位。,7.4.2 定时器的启动和计数溢出的处理,TCON,寄存器,定时器的启动和计数溢出处理通过,TCON,来实现,TF1,(TCON.7)T1溢出标志位。,T1,计数溢出时,自动使,TF1,置,1,并向,CPU,申请中,断,.,当,CPU,响应中断后,自动清,0,。,TF1,也可以由程序查询,并用软件清,0,。,TF0,(TCON.5)T0溢出标志位。,T0,计数溢出时,自动使,TF0,置,1,并向,CPU,申请中,断,.,当,CPU,响应中断后,自动清,0,。,TF0,也可以由程序查询,并用软件清,0,。,TR1,(TCON.6)T1运行控制位。,该位控制,T1,的计数与否,通过软件置,1,或清,0,来,启动或停止定时器,T1,的计数。,启动,T1,工作,常用位操作指令:“,SETB TR1,”,TR0,(TCON.4)T0运行控制位。,该位控制,T0,的计数与否,通过软件置,1,或清,0,来,启动或停止定时器,T0,的计数。,启动,T0,工作,常用位操作指令:“,SETB TR0,”,2.,定时器/计数器在计数溢出时有两种处理方法:,程序查询和程序中断方法。,方法一:采用查询工作方式,定时器/计数器计数溢出时,会自动置,TCON,寄存器中的,TF0,(或,TF1,)标志位为“1”,利用程序查询该位状态的方法,检测定时器计数溢出状况,就可以根据需要完成该做的工作。,说明:如果定时器工作在模式0、1,如果需要连续工作,在处理程序中要重新装入计数初值。,指令如下:,LOOP:JNB TF0,$,;$为当前指令指针地址,CLR TF0,;清除TF0,以便再次工作.,;以下为处理程序。,也可以写成如下形式:,LOOP:JBC TF0,T0P,;查询TF0,SJMP LOOP,T0P:,;以下为处理程序,方法二:采用中断工作方式,.主程序,中完成定时器的初始化工作。包括:,定时器初始化:,设置,TMOD,、计数初值,启动定时器等,中断初始化:,设定,IP、IE,等,特别要开定时器中断,。,.中断处理子程序,:,定时器,T0,和,T1,向量地址为,000BH,、,001BH,,要,在此写转移指令,以便转移到中断处理程序中。,注意:定时器是工作在模式,0,、,1,时,如果需要连,续工作,在处理程序中要重新装入计数初值。,中断处理程序最后一条指令必须是,RETI,指令。,编程的指令如下:,初始化引导程序:,ORG 0000H,AJMP MAIN,ORG 000BH,AJMP IT0P,;T0中断服务程序入口,ORG 001BH,AJMP IT1P,;T1中断服务程序入口,主程序:,ORG 0100H,MAIN:MOV SP,#60H,;设堆栈指针,ACALL PT0MD,HERE:AJMP HERE,;等待,代替实际工作,PT0MD:MOV TMOD,#00H,;工作模式,MOV TL0,#XXH,MOV TH0,#XXH,;送计数初值,SETB TR0,;启动定时,SETB ET0,;T0开中断,SETB EA,;CPU开中断,;T1初始化语句,RET,中断服务程序:,ORG 0100H,IT0P:MOV TL0,#XXH,MOV TH0,#XXH,;重装初值,RETI,如果需要,还要有T1的中断服务程序,这里省略。,7.4.3 定时器/计数器应用实例,工作模式,0,的应用,利用定时器T0工作模式0,在引脚P1.0上输出周期为2ms的连续方波.已知单片机晶振频率为6MHz。,解:,如图在引脚 P1.0 上输出周期为 2ms 连续方波,,需要定时器 T0 产生 1ms 的定时。,每隔1ms时间 P1.0 引脚的输出取反即可。,解:,.T0工作于模式0,计数器为13位的加1计数器,,fosc=6MHz,则1个振荡周期为1/6s,定时时间为1ms,根据公式:,t=(2,13,T0初值)振荡周期12,110,-3,=(2,13,T0初值)(1/610,-6,)12,在模式0时,,初值低5位装入TL0,则:,(TL0)=,01100B=,0CH,初值高8位装入TH0,则:,(TH0)=,11110000B=,F0H,.源程序清单:(使用程序查询方式),ORG 0000H,AJMP MAIN,ORG 0100H,MOV TMOD,#00H,;设置T0工作于方式0,MOV TH0,#0F0H,;设置定时1ms初值,MOV TL0,#0CH,SETB TR0,;启动T0工作,LOOP:JNB TF0,$,;查询定时时间到否,CLR TF0,CPL P1.0,MOV TH0,#0F0H,;重装载TH0,MOV TL0,#0CH,;重装载TL0,SJMP LOOP,END,工作模式1的应用,利用定时器 T1 工作模式1,在引脚 P1.1 上输出频率为 50Hz 连续方波,已知晶振频率为12MHz。,解:,和例7.8的图示类似,,在引脚P1.1上输出频率为50Hz的连续方波,,需要定时器T1产生10 ms的定时。,每隔10ms 时间,P1.1引脚的输出取反,即可,得到50Hz的连续方波输出。,.计数初值的计算:,用定时器T1产生一个50Hz的方波,,方波周期 T=1/50=0.02s=20ms,T1定时时间为10ms,根据公式计数初值X为:,t=(2,16,T1初值)振荡周期12,1010,-3,=(2,16,T1初值)(1/1210,-6,)12,T1初值=D8F0H,在模式1时:,初值的低8位装入TL1,则:,(TL1)=F0H,初值的高8位装入TH1,则:,(TH1)=D8H,.源程序清单:使用程序查询方式。,ORG 0000H,AJMP MAIN,ORG 0200H,MOV TMOD,#10H,;设置T1为模式1,SETB TR1,;启动T1工作,LOOP:MOV TL1,#0D8H,;设置T1初值,MOV TH1,#0F0H,JNB TF1,$,;查询时间到否,CLR TF1,;产生溢出,清标志位,CPL P1.1,SJMP LOOP,;重复循环,END,工作模式2的应用,利用定时器T1的模式2 对 P3.5(T1)引脚上输入的外部脉冲信号计数。计满100次,将 P1.0端输出取反。,解:,选择工作模式:计数方式,外部信号由T1(P3.5)引脚输入,每一次负跳变计 数器加1。当输入累计到100个脉冲后,使计数器发生溢出中断,然后,在中断服务程序中完成将,P1.0 的输出取反的操作。,T1工作方式2的模式字为:,(TMOD)=60H,T0不用时,TMOD的低4位可任取,但不能进入模式3,一般取0。,计算T1工作在模式2的计数初值。,满足计数100次后溢出,则:X=2,8,100=156=9CH,因此,,TL1,的初值为,9CH,,重装初值寄存器,TH1=9CH,。,源程序清单:采用中断处理,ORG 0000H,LJMP MAIN,;复位,转向主程序,ORG 001BH,;T1中断服务程序入口地址,LJMP SERVE,;转向T0中断服务程序,ORG 2000H,;主程序,MAIN:MOV TMOD,#60H,;设置T1模式2,计数方式,MOV TL1,#9CH,;T1计数器初值,MOV TH1,#9CH,MOV IE,#88H,;定时器开中断,SETB TR1,;启动T1计数,HERE:SJMP HERE,;等待中断,SERVE:CPL P1.0,RETI,工作模式3的应用,89C51系统已使用了两个外部中断源,要求再增加一个,并由P1.0引脚输出5kHz的方波。定时器T1已作串口波特率发生器用.晶振频率fosc=12MHz,解:,.外部中断源的增加,由于已使用两个外部中断源(INT0和INT1),可以选择引脚,T0(P3.4),作附加的外部中断输入端。,这时,设置T0工作模式3的计数器方式,将,TL0,计数初值,置为FFH,。,当检测到T0引脚上的出现负跳变时,计数器加1,则TL0产生溢出,申请中断,实现外部中断申请功能.,.,P1.0引脚上5kHz的方波输出。,输出5kHz方波,周期T=1/(5kHz)=0.2ms=200s,,需要100s的定时,每隔100s,P1.0的输出取反。,.T0工作模式的选择,定时器T0可选择工作模式3,将8位计数器TL0用作上述的计数器使用,而8位TH0就可用作定时器,产生100s的定时信号。,根据以上要求,,TMOD设置为27H,。,T0为模式3,计数和定时方式,;,T1为模式2,定时方式,.计算T0工作在模式3的计数初值。,TL0,的计数初值为,FFH,。,TH0定时100s,时的计数初值X为:,,X,=256-100 12/12=,156,.程序清单:,ORG 0000H,LJMP MAIN,;转到主程序,ORG 0003H,LJMP INT0P,;转到外部中断INT0处理程序,ORG 000BH,LJMP TL0INT,;转到TL0溢出中断服务程序,ORG 0013H,LJMP INT1P,;转到外部中断INT1处理
展开阅读全文