首页 > 编程知识 正文

定时计数器的工作方式有几种(定时计数器t1有几种工作方式)

时间:2023-05-04 10:06:57 阅读:96103 作者:2445

在之前的研究中,我们已经知道通过设置TMOD的M1位和M0位可以选择定时器/计数器的四种工作模式。当T0和T1使用前三种工作模式时,除了寄存器和控制位不同之外,其他操作类似。此外,T1没有运行模式3。以T0为例,描述四种工作模式。

00-1010当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输出频率为500赫兹的方波信号和12赫兹的晶体振荡器。

分析如下:

假设信号频率为500赫兹,周期为2毫秒。由于输出信号是方波信号,计时时间为半个周期,即1000微秒。

那么初始定时值=2 13 -t/T机=8192-1000/1=7192

TH0=7192/32=0xe0

TL0=71922=0x18

C语言的源程序如下:

00-1010当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语言的源程序如下:

00-1010当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

程序如下:

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。