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

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

 

学习目标:

        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占八位

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

如图所示,

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

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

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

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

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

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

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

 

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

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

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

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

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

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

1.TMOD寄存器

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

这里我们就要用到    TMOD  了   

【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)_第7张图片 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

【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)_第8张图片 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。所以,用软件可控制定时/计数器的启动 与停止。

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

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

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

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

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


实践训练:

#include 
#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   

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

 即  TH1 = 0xee TL0 = 0x00

即可定时   5ms

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

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

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

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

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

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

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


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


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

你可能感兴趣的:(杂谈,单片机,51单片机,嵌入式硬件)