【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)

abd69dedee774ca5a6eeb4dcdef53cc0.png

 

学习目标:

        51定时/计数器的详解。

                  码字不易,如有帮助请收藏,点赞哦。


学习内容(背景知识,了解一下对以后学习有帮助):

        前提:首先我们知道51单片机内部有21~26个特殊功能寄存器:

  1. P.x口寄存器:P0、P1、P2、P3
  2. 数据指针寄存器:DP0H、DP0L、DP1H、DP1L
  3. 定时器:TH1、TL1、TH0、TL0、TMOD、TCON
  4. 串口:SBUF、SCON
  5. 中断:IE、IP
  6. 电源控制:PCON
  7. 堆栈指针:SP
  8. 程序状态:PSW

以上是常见的21个寄存器,后还有

  1. 辅助寄存器:AUXR1、AUXR
  2. 看门狗:WDTRST
  3. 累加器:A、B

以上是一些需要了解的寄存器,每个寄存器都有自己的作用。因为单片机内部都是逻辑运算,需要各种标志位,来开关,控制

学习之前还需要知道:

        ①51 单片机有两组定时器/计数器,因为既可以定时,又可以计数,故称之 为定时器/计数器。

        ②定时器/计数器和单片机的 CPU 是相互独立的。定时器/计数器工作的过程 是自动完成的,不需要 CPU 的参与。

        ③51 单片机中的定时器/计数器是根据机器内部的时钟或者是外部的脉冲信 号对寄存器中的数据加 1。 有了定时器/计数器之后,可以增加单片机的效率,一些简单的重复加 1 的 工作可以交给定时器/计数器处理。CPU 转而处理一些复杂的事情。同时可以实 现精确定时作用。

        简而言之,定时器就是   根据脉冲信号,计脉冲数。


正式开始学习(内容有点枯燥,但学会之后很酷):

        首先明确我们要干嘛?目标就是    写一个   5ms   触发一次的程序  只要 5ms   到了就执行一次让   灯亮一下。

        灯的端口是    P2

学习之前,首先我们要明白51单片机的基础(以下以STC89C51为例):

  1.         单片机内有两个可编程的定时/计数器 T0、T1 和一个特殊功能定时器 T2
  2.         定时/计数器的实质是加 1 计数器(16 位),由高 8 位和低 8 位两 个寄存器 THx 和 TLx 组成。

        定时器就是    一共十六位     THx占八位     TLx占八位

ba99f911f7ec4abd83b9be36ca9309a5.png

如图所示,

        当使用T1定时器的时候   就使用   TH1   TL1   各占八位   前者高八位   后者低八位

        当使用T0定时器的时候   就使用   TH0   TL0   各占八位   前者高八位   后者低八位

特殊功能定时器 T2   在这里先不讲   后续讲解。

首先我们明白了   定时器的  T1   T0

随机提问    请问当单片机频率为1Mhz的时候   等于  多少  秒?

        答:1us;周期=频率的倒数  也就是  1/1000000=0.000001s = 0.0001ms=1us

4efa79102cb844a9b23f86a2752f0288.png

 

01c0a3ef436840c7bb353adb921a743e.png

972cffc78ebb4f8ea908893299bdf425.png 

 上图更加详细!!!供大家参考!

        定时器   分  T0  和  T1两个,T0、T1又分为4种工作方式:方式0、方式1、方式2和方式3。

878d9620e9b54160b968b32f23150c35.png

 Mode0、Mode1、Mode2、Mode3为四个方式。

1.TMOD寄存器

        既然有四个方式供大家选择,那怎么选择呢???

这里我们就要用到    TMOD  了   

938e5311eb5d477b963de9c7846877c9.png

TMOD寄存器格式

例子:比如 TMOD = 0x01  想当于   0000 0001   则使用的是  定时器0  工作方式为1

 

  1. GATE 是门控位, 

        GATE = 0  定时器/计数器是否计数,仅由控制位TRx来控制(一般上电就是  0)

        GATE = 1  定时器/计数器是否计数,由外中断引脚INT1或INT0的电平和TRx一起控制

  1. C/T :定时/计数模式选择位。C/T =0 为定时模式;C/T =1 为计数模式。
  2. M1M0:工作方式设置位。定时/计数器有四种工作方式。

由此就明白   TMOD = 0x01  为什么是  定时器0  工作方式1

TMOD = 0x02   是   T0  方式2

TMOD = 0x03   是   T0  方式3

定时器1 也如法炮制   请大家自己推理一下

2.TCON控制寄存器

        上面讲了    如何填写定时器/计数器的工作方式   TMOD

现在我们开始来讲一下    控制寄存器TCON

c92bf826db2a46e6be47df081a526a9e.png

TCON格式


         如图所示  这个TCON的格式   后四格是空的  实际上不是空的   从左到右  依次是IE1、IT1、IE0、IT0,分别是中断的,这里不做过多解释,后续补上。

  1. TF1、TF0:计数溢出标志位

        T1 计数溢出时由硬件自动置 TF1 为 1。CPU 响应中断后 TF1 由硬件自动清 0。T1 工作时,CPU 可随时查询 TF1 的 状态。所以,TF1 可用作查询测试的标志。TF1 也可以用软件置 1 或清 0,同硬 件置 1 或清 0

  1. TR0、TR0:计数允许控制位

        T1 运行控制位。TR1 置 1 时,T1 开始工作;TR1 置 0 时, T1 停止工作。TR1 由软件置 1 或清 0。所以,用软件可控制定时/计数器的启动 与停止。

学习这些之后,基本够了,可以开始写定时器,以下贴一些电路图,供大家参考!

3253d3bafce44e76ace313ff185d9520.png

6198e207cddd4fd9a6c1b3ac66861507.png 

815bca5b5d9e4697880e40f01ae34662.png 

 【单片机学习】51单片机【定时/计数器】,详细介绍-电子工程世界 (eeworld.com.cn)


实践训练:

#include <reg51.h>
#include "intrins.h"

sbit key1 = P3^2;
#define led P2

#define uint unsigned int
#define uchar unsigned char

void delay(uint z) {
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}

char i = 100;
void main()
{
	TMOD = 0x01;
	TH0 = 0xee;
	TL0 = 0x00;
	P2 = 0x00;
	EA = 1;
	ET0 = 1;
	TR0 = 1;
	
	while(1)
	{
		
	}
}
void timer() interrupt 1
{
	TH0 = 0xee;
	TL0 = 0x00;
	i--;
	if(i <= 0)
	{
		P2 = ~P2;
		i=100;
	}
}

TH0 = 0xee  TL0 = 0x00   各占八位

为啥是0xee呢   这个程序的功能就是   0xee代表5ms

计算公式:

                定时时间 = (2^16-X)* 12/11.0592

即   5000 = (2^16-X)* 12/11.0592

X = 60928   

19aa81c23cfb4f268141c6548bc26ef9.png

 即  TH1 = 0xee TL0 = 0x00

即可定时   5ms

疑问解答:TMOD |= 0x01;为啥要用  |=  ???

        将TMOD表示成二进制数,然后与0x01按位进行或运算,并把最终结果赋值给TMOD。

这个是C中的一种语法        不影响结果   如: P3 |= 0x80意思是 P3=P3|Ox80 表示P3的最高位(P3.7)为1,不影响P3其他位

0baa335ee8804e9aae945f17ed940b88.png

程序结尾的定时器的部分中断代码,interrupt 1这个是中断的优先级设置

44b307f045aa4cf1a49528a7ac6c2065.png

5747406a02db434591d6d039606348c2.png


        文章到此结束,希望对大家有所帮助!!!


人生就是这样,得失无常,常存安静之心,常存宽容之心,心里放不下,自然就成了负担,负担越多,人生就越不快乐。优雅的人生,就是用平静的心,平和的心态,别再为错过了什么而懊悔。

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式up

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值