您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 81MCS-51单片机的定时器计数器
第六章MCS-51单片机的定时器/计数器实现定时常用的三种方法:软件定时:占用CPU时间,效率低。用555电路:不可编程。可编程芯片:功能强,需要另外扩展。单片机内部有2个16位的定时/计数器:使用灵活,编程方便。--优先选用6.1定时器/计数器结构一.定时器/计数器的结构及工作原理MCS-51单片机内部有两个16位可编程的定时器/计数器,即定时器T0和定时器T1。每个定时器/计数器的基本部件是两个8位的计数器(其中TH1、TL1是T1的计数器,TH0、TL0是T0的计数器)拼装而成。它们是采用加“1”方式工作的。两个特殊功能寄存器(TMOD和TCON)用来对定时器/计数器的工作方式进行选择和控制。8051单片机的定时器/计数器结构如下图所示。内部总线工作方式工作方式TH1TL1TH0TL0TCONTMODT1T0微处理器8051单片机定时器/计数器结构示意图加1计数器(高8位、低8位)TMOD,工作方式设置;TCON,启动、停止及设置溢出标志。定时功能----计数输入信号是内部时钟脉冲,其计数脉冲来源于晶振时钟输出信号的12分频,即每个机器周期使寄存器的值加1。定时器可看做是对机器周期的计数器。所以,定时计数频率是振荡频率的1/12。计数功能----计数脉冲来自相应的外部输入引脚,T0为P3.4,T1为P3.5。只要T0或T1的引脚上有一个1到0的负跳变,相应的计数器就加1.在TMOD中,各有一个控制位(C/T),分别用于控制定时/计数器T0和T1工作在定时器方式还是计数器方式。定时模式,对内部机器周期计数定时时间t=计数值NxTcy计数模式,对外部事件脉冲计数计数脉冲周期要大于2TcyT0和T1计数器都只能递增计数,当16位计数器的计数值增加到0FFFFH时,再输入1个脉冲就会使计数器的值回零,并发生溢出信号,置相应的标志位(TCON中TF0或TF1置1),向CPU发出中断请求。设定计数次数:计数器的计数量程-计数初值。二.定时器/计数器的控制寄存器与定时器/计数器有关的控制寄存器有:1.定时器控制寄存器TCONTF1:定时器/计数器1(T1)的溢出中断标志位。TF0:定时器/计数器0(T0)的溢出中断标志位。TR1:定时器/计数器1的运行控制位。通过置1或清0来启动或停止T1的计数。TR0:定时器/计数器0的运行控制位。单片机复位后,TCON寄存器的所有位均为0.2.工作方式控制寄存器TMOD高4位用于定时器1,低4位用于定时器0①M1,M0:工作模式选择位。定时器/计数器四种工作模式选择如表6-1所示。表6-1工作方式选择表M1M0方式说明00013位定时器/计数器01116位定时器/计数器102自动装入时间常数的8位定时器/计数器113对T0分为两个8位独立计数器;对T1置方式3时停止工作②C/T:定时器方式或计数器方式选择位C/T=0时,为定时器方式C/T=1时,为计数器方式③GATE:门控位当GATE=0时,TCON寄存器中的TR0或TR1为1,则可立即启动定时器/计数器;当GATE=1时,不但要TR0或TR1为1,且单片机的INT0或INT1引脚的输入要为高电平,才能启动定时器/计数器。三.定时器/计数器0或1的工作方式1.方式0—13位方式。由TL0的低5位和TH0的8位组成。TL0的5位计数溢出后,TH0的计数加1,直到全部的13位计数值为全1后,下一个计数脉冲的到达将使TF0置位为1,向CPU发出中断请求,同时把计数器变为全“0”。其定时时间为:(213-初值)×机器周期2.方式1—16位方式16位计数,由TL0作为低8位、TH0作为高8位;16位计数,由TL1作为低8位、TH1作为高8位。其定时时间为:(216-初值)×机器周期3.方式2—8位自动装入时间常数方式TL0作为8位内部计数器,TH0作为重装初值寄存器,在TL0计数溢出置位TF0标志的同时,由硬件控制直接将重装初值装入TL0,开始新一轮的计数,如此不断循环。方式2和方式0、1最大的差别就是计数器的初值是由硬件控制自动装入的。方式0、1一旦计数溢出,就表示计数器已回0,如果要按照原先的初值重新计数,就需要通过软件重装计数器初值。方式2适合于用作较精确的脉冲信号发生器。4.方式3—2个8位方式仅T0可以工作在方式3,T1处于方式3时停止计数。此时,T0分成2个独立的计数器—TL0和TH0,前者用原来T0的控制信号(TR0、TF0),后者用原来T1的控制信号(TR1、TF1)。(1)TH0由TR1启动/停止,溢出TF1(2)TL0由TR0启动/停止,溢出TF0(3)TH0只能定时,TL0可以定时/计数,且都是8位。1.初始化步骤MCS-51内部定时器/计数器是可编程的,其工作方式和工作过程均可由MCS-51通过程序对它进行设定和控制。因此,MCS-51在定时器/计数器工作前必须先对它进行初始化。初始化步骤为:(1)根据题目要求先给定时器方式寄存器TMOD送一个方式控制字,以设定定时器/计数器的相应工作方式。(2)根据实际需要给定时器/计数器选送定时器初值或计数器初值,以确定需要定时的时间和需要计数的初值。6.2定时器/计数器的初始化(3)根据需要给中断允许寄存器IE选送中断控制字和给中断优先级寄存器IP选送中断优先级字,以开放相应中断和设定中断优先级。(若采用中断方式)(4)给定时器控制寄存器TCON送命令字,以启动或禁止定时器/计数器的运行。2.计数器初值的计算定时器/计数器可用软件随时随地启动和关闭,启动时它就自动加1计数,一直计到满,即全为1,若不停止,计数值从全1变为全0,同时将计数溢出位置1并向CPU发出定时器溢出中断申请。对于各种不同的工作模式,最大的定时时间和计数数值不同。这里在使用中就会出现两个问题:一是要产生比定时器最长的定时时间还要短的时间和比计数器最多的计数次数还要少的计数次数;二是要产生比定时器最长的定时时间还要长的时间和比计数器最多的计数次数还要多的计数次数。如果计数初值设定为C,则计数器从初值C开始作加1计数到计满为全1所需要的计数值设定为D,由此便可得到如下的计算通式:C= M -D①式中,M为计数器量程,该值和计数器工作模式有关。在模式0时,M为213;在模式1时,M为216;在模式2和模式3时,M为28。3.定时器初值的计算在定时器方式下,计数器由单片机脉冲经12分频后计数。因此,定时器定时时间T的计算公式为式中,Tc为定时器的初始常数值;T为计数器从初值Tc开始作加1计数到计满为全1所需要的时间;M为计数器量程,和定时器的工作模式有关;fosc是单片机晶体振荡器的频率。在上式中,若设Tc = 0,则定时器定时时间为最大(初值为0,计数从全0到全1,溢出后又为全0)。由于M的值和定时器工作模式有关,因此不同工作模式下定时器的最大定时时间也不一样。例如,若设单片机主脉冲晶体振荡器频率fosc为12 MHz,则最大定时时间为模式0时:Tmax = 213 × 1µs = 8.192 ms模式1时:Tmax = 216× 1µs = 65.536 ms模式2和3时:Tmax = 28× 1µs = 0.256 ms例6-5.用定时器1,方式2实现1s的延时。【例6-1】设定时器T0工作在模式0时,时钟振荡频率为6MHz,要求定时时间为1ms。解将数据代入公式②得定时器T0初值为612)(cTMµs=1ms=1000µsTc=213-500=7692=1E0CH化成二进制数为Tc=1111000001100B(213-Tc)×12根据13位定时器/计数器特性,先把低5位0CH送TL0,TL0的高三位置零,高8位F0H送至TH0。可用下列指令实现定时器T0初始化。MOVTMOD,#00H;T0工作于模式0,定时方式MOVTL0,#0CH;低5位送TL0寄存器MOVTH0,#0F0H;高8位送TH0寄存器【例6-2】若单片机时钟频率fosc为12MHz,请计算定时2ms所需的定时器初值。解由于定时器工作在模式2和模式3下时的最大定时时间只有0.256ms,因此要想获得2ms的定时时间,定时器必须工作在模式0或模式1。若采用方式0,则根据式②可得定时器初值为Tc=11022313µs=6192=1830H=0001100000110000B同样,先把低5位10000B送TL0,TL0的高3位置零,余下的8位11000001B送至TH0。这样就得到定时器工作在模式0时的初值C110H,TH0应装C1H,TL0应装10H。若采取模式1,则有Tc=11022316µs=63536=F830HTH0应装F8H;TL0应装30H。【例6-3】设T1作定时器,以模式1工作,定时时间为10ms;T0作计数器,工作在模式2,T0(P3.4)引脚上发生一次事件(脉冲)即溢出。解T1的时间初值为(216-Tc)×2µs=10msTc=EC78HT0的计数初值常数为FFH。初始化程序:MOVTMOD,#16H;T1定时模式1,T0计数模式2MOVTL0,#0FFH;T0时间常数送TL0MOVTH0,#0FFH;T0时间常数送TH0MOVTL1,#78H;T1时间常数(低8位)送TL1MOVTH1,#0ECH;T1时间常数(高8位)送TH1SETBTR0;置TR0为1,允许T0启动计数SETBTR1;置TR1为1,允许T1启动计【例6-4】设定时器T0,工作在模式1,试编写一个延时1s的子程序。解若主频频率为6MHz,可求得T0的最大定时时间为Tmax=216×2µs=131.072ms我们就用定时器获得100ms的定时时间再加10次循环得到1s的延时,可算得100ms定时的定时初值:(216-Tc)×2µs=100ms=100000µsTc=216-50000=15536=3CB0H程序如下:ORG0000HMOVTMOD,#01H;初始化T0MOVR7,#10;循环10次DLY1MS:MOVTL0,#0B0H;装入T0初值MOVTH0,#3CHSETBTR0;开始计时LOOP1:JBCTF0,LOOP2;查询溢出标志位判断100ms时间是否到JMPLOOP1;100ms时间不到,则等待LOOP2:DJNZR7,DLY1MS;100ms时间到,则TF0清零,且判断循环次数SJMP$;1s时间到END例6-5.用定时器1,方式2实现1s的延时(12MHZ)。解:因方式2是8位计数器,其最大定时时间为:256*1μs=256μs,为实现1s的延时,可选择定时时间为250μs,再循环4000次。定时时间选定后,可确定计数值为250,则定时器1的初值为:X=M-计数值=256-250=6=6H。采用定时器1,方式2工作,因此,TMOD=20H。DELAY:MOVR7,#40;置25ms计数循环初值MOVR6,#100;置250μs计数循环初值MOVTMOD,#20H;设定时器1为方式2MOVTH1,#06H;置定时器初值MOVTL1,#06HSETBTR1;启动T1LP1:JBCTF1,LP2;查询计数溢出SJMPLP1;无溢出则继续计数LP2:DJNZR6,LP1;未到25ms继续循环MOVR6,#100DJNZR7,LP1;未到1s继续循环RET;返回主程序6.3定时器/计数器的应用定时器/计数器是单片机的重要组成部分,其工作方式灵活,功能强大,配合中断使用可减轻CPU的负担,减少外围电路。本节通过实例说明定时器/计数器的使用方法。【例6-6】试通过定时器实现方波输出。设时钟频率fosc为12 MHz,从P1.0输出频率周期为1ms的方波,如图所示。解利用定时器T0作定时器,选用工作模式1,设输出的方波占空比为50%,则T0的时间常数初值为(216-Tc)×1µs=0.5msTc=65036=FE0CH方法一:通过查询标志位的方法实现。ORG0000HMOVTMOD,#01H;设定T0工作在模式1MOVTL0,#0CHMOVTH0,#0FEHSE
本文标题:81MCS-51单片机的定时器计数器
链接地址:https://www.777doc.com/doc-6369030 .html