当前位置:   article > 正文

STC89C52定时器的简介

stc89c52

一、序言

针对于STC89C52RC而言,这个芯片内部包含了三个定时器——T0、T1和T2,他们的中断优先级分别是1、3和5。

怎么还有一个定时器2呢?博主也是今天整理这篇博客的时候,翻阅芯片手册才发现的。如果说,我们经常用的T0和T1叫做通用定时器的话,那么T2我愿称之为高级定时器。今天这篇博客是给小白介绍定时器的,就暂不介绍T2的功能,有需求的话可以向博主留言。

那么进入正题。

二、定时器的基本介绍

先来分析一下,他为什么叫做定时器?
本质上来说:他就是存储数据的寄存器,每过一个机器周期,存储的数据值加1,这个时候寄存器的值就不断加一,当加的值溢出的时候,这个时候就会触发中断。因此你想要定时具体的时间,有两个控制因素:一个是机器周期的大小,一个是你设置寄存器的初始值。那么什么是机器周期?

因为周期时频率的倒数,所以下面的内容我都以频率来讲解。

机器周期
官方的定义来说:执行一次最简单的代码所需要的时间。那么他与什么有关呢?答案是时钟周期

时钟周期
时钟周期就是你单片机工作的外部时钟源的周期,就是我们所说的外部晶振。(最常见的就是11.0592MHZ)

机器频率就是时钟频率除以分频系数,那么对于STC89C52而言,它有两种分频系数,12分频和6分频,也就是我们经常见到的12T模式和6T模式(这些都是在STC-ISP里面设置)。

如此一来,当我们知道了单片机的机器周期是多少,就可以自由设置定时的时间了。

例如:晶振是11.0592MHZ 分频是12T的单片机,寄存器加1需要的时间是:11.0592MHZ / 12 = 0.9216MHZ;

如果设置20ms的定时周期,那么寄存器累加个数为:20000 * 0.9216 = 18432(个);则分别给

TH0(TH1) = (65535 - 18432) / 256;

TL0(TL1) = (65535 - 18432)% 256;

这样就精确的设置了定时的时间。

三、主要相关寄存器的介绍

定时器模式设置寄存器

我在这里给你简单介绍:

TMOD共有8个位,前4个位是给定时器1的,后4个位是给定时器0的。我们看后4位:

GATE位一般设置为0,如果设置为1,是用外部引脚输入的信号来开启定时器的。

C_T位在用作定时器时设置为0,设置为1是计数器模式(这里不介绍计时器的相关知识)。

M1、M0位是用来设置4种不同的定时器模式的(这个会在之后介绍四种定时器模式)。

定时器中断控制寄存器

小白完全不需要看上面的介绍,因为很难看懂.所以这里只介绍需要用到的几个:TF0、TF1、TR0、TR1、EA

TF0、TF1分别是定时器0和定时器1的中断溢出标志位,由硬件清’0’。

TR0、TR1分别是定时器0和定时器1的开启位,置’1’表示开启某一个定时器。

EA是开启总中断(这个都是要打开的)。 

四、中断模式选择:

五:单片机工作模式选择

时钟周期
时钟周期就是你单片机工作的外部时钟源的周期,就是我们所说的外部晶振。(最常见的就是11.0592MHZ)

机器频率就是时钟频率除以分频系数,那么对于STC89C52而言,它有两种分频系数,12分频和6分频,也就是我们经常见到的12T模式和6T模式(这些都是在STC-ISP里面设置)。

如此一来,当我们知道了单片机的机器周期是多少,就可以自由设置定时的时间了。

例如:晶振是11.0592MHZ 分频是12T的单片机,寄存器加1需要的时间是:11.0592MHZ / 12 = 0.9216MHZ;

如果设置20ms的定时周期,那么寄存器累加个数为:20000 * 0.9216 = 18432(个);则分别给

TH0(TH1) = (65535 - 18432) / 256;

TL0(TL1) = (65535 - 18432)% 256;

这样就精确的设置了定时的时间。

工作模式1:13位定时器

最大定时时间:2^13 / 0.9216 = 8888.89us

看图说话:

首先就是在STC-ISP里面设置分频系数。

C/T是设置定时器还是计数器,这个之后在TMOD里面同统一设置。

control:设置TR0 = 1;//打开定时器,然后GATE位在TMOD里面设置为0就可以打开整个开关。而INT0引脚表示的是可以外部输入信号控制。

接下来就是设置定时器寄存器。

最后检测溢出中断标志位。

整个程序代码就是

  1. TMOD = 0x00;//GATE = 0, C_T = 0;
  2. TR0 = 1;//打开定时器0
  3. TH0 = (8192 - 4608) / 256;//设置定时5ms
  4. TL0 = (8192 - 4608) % 32;
  5. ET0 = 1;//打开定时器0中断
  6. EA = 1;//开启总中断

工作模式2:16位定时器

最大定时时间:2^16 / 0.9216 = 71110us

看图说话

整个代码的书写步骤跟工作模式1类似。 

工作模式3:8位自动重装载

向TH0(TH1)中写入要自动重装载的值,在每一次TL0(TL1)溢出的时候,会自动将高位寄存器(TH0,TH1)的值读入地位寄存器,并且产生溢出中断。

看图说话

其他的地方都是类似的,主要区别在于

TL0 = TH0 = (256 - 184);//定时200us

工作模式4:两个8位定时器

根据芯片手册的介绍,该模式可以将一个16位定时器当作两个8位定时器来用,因此达到了扩展定时器的作用。

注意,该模式只有定时器0才有。

当设置该模式时,低位寄存器单独当作定时器,溢出中断由TF0显示,高位寄存器单独当作定时器,溢出中断由TF1显示。

在这里插入图片描述

但是在该种模式下,我如果要开启定时器1呢?那么他的溢出中断会不会跟这个模式下的混淆起来?

有知道的读者可以给我解答一下嘛?

六、范例程序

16位定时器模式

  1. void Timer0_Initial(void)
  2. {
  3. TMOD = 0x01;//16位定时器模式
  4. TR0 = 1;
  5. TH0 = (65535 - 9216) / 256;//10ms溢出中断
  6. TL0 = (65535 - 9216) % 256;
  7. ET0 = 1;
  8. EA = 1;
  9. }
  10. void Timer0_ISR(void) interrupt 1
  11. {
  12. static unsigned int count = 0;
  13. count++;
  14. TH0 = (65535 - 9216) / 256;//10ms溢出中断
  15. TL0 = (65535 - 9216) % 256;
  16. if (count == 100)//1s到达
  17. {
  18. count = 0;
  19. LED = ~LED;//LED闪烁
  20. }
  21. }

8位自动重装载模式

  1. void Timer0_Initial(void)
  2. {
  3. TMOD = 0x02;//8位自动重装载模式
  4. TR0 = 1;
  5. TH0 = TL0 = (256 - 184);//定时200us
  6. ET0 = 1;
  7. EA = 1;
  8. }
  9. void Timer0_ISR(void) interrupt 1
  10. {
  11. static unsigned int count = 0;
  12. count++;
  13. if (count == 5000)//1s到达
  14. {
  15. count = 0;
  16. LED = ~LED;//LED闪烁
  17. }
  18. }

定时器和中断:

  1. #include <REGX52.H>
  2. /**
  3. * @brief 定时器0初始化,1毫秒@12.000MHz
  4. * @param 无
  5. * @retval 无
  6. */
  7. void Timer0Init(void)
  8. {
  9. TMOD &= 0xF0; //设置定时器模式,第四位清零
  10. TMOD |= 0x01; //设置定时器模式,设置状态
  11. TL0 = 0x18; //设置定时初值
  12. TH0 = 0xFC; //设置定时初值
  13. TF0 = 0; //清除TF0标志
  14. TR0 = 1; //定时器0开始计时
  15. ET0=1;
  16. EA=1;
  17. PT0=0;
  18. }
  19. /*定时器中断函数模板
  20. void Timer0_Routine() interrupt 1
  21. {
  22. static unsigned int T0Count;
  23. TL0 = 0x18; //设置定时初值
  24. TH0 = 0xFC; //设置定时初值
  25. T0Count++;
  26. if(T0Count>=1000)
  27. {
  28. T0Count=0;
  29. }
  30. }
  31. */

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/717939
推荐阅读
相关标签
  

闽ICP备14008679号