定时器计数器4种工作方式性能特点(计数器的4种工作方式及应用)
在前面的学习中,我们已经知道通过设置TMOD的M1、M0两位,可以选择定时/计数器的四种工作方式。T0和T1在使用前三种工作方式时,除使用的寄存器和控制位不同外,其他操作相似。另外,T1没有工作方式3。下面以T0为例来讲述4种工作方式。
工作方式0及应用当M1M0=00时,T0采用方式0工作,如图5-2所示,此时T0是一个由TL0的低5位和TH0的8位构成的13位计数器(注:TL0的高3位未用)。
图5-2 定时/计数器T0工作方式0的原理图
13位计数器的最大计数值为2 13 =8192,若振荡器的时钟频率 f OSC=12MHz时,机器周期为1 μ s,方式0最大的定时时间为8192 μ s。
若TL0的低5位计数满时,直接向TH0进位(而不是向TL0的第6位进位);13位定时/计数溢出时,TF0置“1”。
技巧
定时/计数原理:定时/计数器只有在计数值达到最大(发生溢出)时,才会产生中断。那么任意值的定时或计数怎么实现呢,比如采用方式0时,我们需要计数500,那么,计数开始前,在定时/计数器中写入预置数7692(8192-500),就可以达到需要的效果。
【例5-1】 利用T0方式0定时由P1.0输出频率为500Hz的方波信号,晶振为12MHz。
分析如下:
已知信号的频率为500Hz,则周期为2ms,由于输出的是方波信号,定时时间为半个周期,即1000us。
则 定时初值=2 13 -t/T机器=8192-1000/1=7192
TH0= 7192/32=0xe0
TL0= 71922=0x18
c语言的源程序如下:
工作方式1及应用
当M1M0=01时,T0采用方式1工作,如图5-3所示,此时T0是TL0和TH0构成16位的定时/计数器,最大计数值为2 16 =65536,其他特性和方式0相似。
图5-3 定时/计数器T0工作方式1的原理图
【例5-2】 利用定时器0产生10Hz的方波,由P1.0口输出,设晶振频率为12MHz。
分析如下:
频率为10Hz的方波,周期为100ms,定时时间为50ms,12MHz晶振的机器周期为1us。
T0初值=2 16 -t/T机器=65536-50000/1=55536=0x3cb0
则TH0=0x3c,TL0=0xb0
C语言的源程序如下:
工作方式2及应用
当M1M0=10时,T0采用方式2工作,如图5-4所示,此时T0是一个8位自动重装定时/计数器,低8位TL0用作计数(最大计数值为2 8 =256),高8位TH0用于保存计数初值。若TL0计数已满发生溢出,TF0置“1”的同时,TH0中的初值将自动装入TL0。
图5-4 定时/计数器T0工作方式2的原理图
提示
方式2的计数范围虽然比较小,但是初值可自动恢复,因此适用于计数范围较小、需要重复计数的场合,例如脉冲信号发生器。
【例5-3】 在工业流水线生产中,常利用传感器检测货品经过个数。这里我们进行模仿操作,由单片机定时器T1的外部脉冲输入引脚对检测的脉冲信号进行计数,当计数满12个时,让电机运转3秒后停止。脉冲计数及电机控制的电路如图5-5所示。
图5-5 脉冲计数及电机控制电路图
分析如下:
利用T1的方式2计数对外部脉冲计数,根据题目要求,当计数12次能够产生溢出,则T1的初值应设定为256-12=244。TMOD寄存器的高4位是针对T1进行设置,其中M1M0=10设为方式2,
设为计数方式。电机的启动与停止通过P1.0进行控制,当P1.0输出1时三极管导通,电机得电运行,当P1.0输出0时,三极管截止,电机失电停止。
c语言的源程序如下:
工作方式3及应用
当M1M0=11时,T0采用方式3工作,如图5-6所示,在这种工作方式下,T0被拆成两个独立的定时/计数器来用。其中,TL0使用T0原有的资源,可以作为8位定时/计数器;TH0使用T1的TR1和TF1,只能对内部脉冲计数,作为定时器使用。
图5-6 定时/计数器T0工作方式3的原理图
当T0工作在方式3时,T1仍可设置为方式0、方式1或方式2,如图5-7所示。此时,T1由定时/计数方式选择位切换其定时或计数功能,当计数器计满溢出时,将输出送往串行口。在这种情况下,T1一般用作串行口波特率发生器。
图5-7 T0工作在方式3时T1的三种工作方式
提示
由于T1的TR1位被TH0占用,因此,其启动和关闭较为特殊。当工作方式设置完成时,T1就开始运行;将T1的工作方式设置为方式3时,T1停止工作。
【例5-4】 有一应用系统,将T1置于方式2作为串行口的波特率发生器,现要求T0增加一个外部中断源,中断时P1.1口取反,并由P1.0输出频率为10KHz的方波信号(假设单片机的晶振频率为12MHz)。
分析如下:
由于T1已经被使用,因而T0既要作为方波信号发生器,又要增加一个外部中断源,只能采用工作方式3,其中TH0为8位定时器,TL0为预置初值0xff的计数器。
10KHz方波的周期为100us,因此,TH0初值为256-100/2=206=0xce
程序如下:
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。