【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


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


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

 

  • 39
    点赞
  • 156
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
### 回答1: 首先,A51是一种基于8051微控制器的汇编语言。在8051微控制器上编写程序时,可以使用汇编语言编写程序,并将其编译为二进制机器代码,然后将其烧录到芯片中。 startup.a51文件是8051微控制器启动代码的源文件,用于在8051芯片上运行汇编程序时初始化系统设置和设置寄存器。这个文件通常由芯片制造商提供,并包含一些系统级别的功能,例如初始化存储器、设置时钟频率和配置中断向量等。 startup.a51文件通常会在整个程序开发过程中保持不变,因为它是8051芯片的系统级别代码。因此,程序员可以专注于编写应用程序代码,而不必关心芯片启动和系统初始化的细节。 在编写8051微控制器程序时,程序员可以将startup.a51文件包含在他们的项目中,并且将其链接到他们的代码中,以确保系统初始化代码能够在8051芯片上正确运行。 ### 回答2: 51单片机启动文件startup.a51是一种汇编语言文件,用于初始化并启动51单片机。它包含了51单片机的启动代码,负责进行硬件初始化和设置。 首先,startup.a51文件会设置栈指针,即初始化堆栈。堆栈用来保存程序运行时的临时变量和函数调用的返回地址。 接下来,启动文件会初始化外部存储器(如RAM和ROM)的地址和数据线,并将它们连接到相应的片内内存和外设。 然后,启动文件会对中断进行设置和初始化。它会定义中断向量表,即将中断向量的地址和中断服务程序的入口地址联系起来。这样,在发生中断时,单片机就可以根据中断向量表找到和执行对应的中断服务程序。 此外,启动文件还会对时钟和定时器进行初始化。它会设置定时器的初始值和工作模式,使得单片机能够按照指定的时间间隔产生定时中断。 最后,启动文件会执行主程序的入口函数。主程序是由开发者编写的应用程序代码,它包含了处理输入输出、逻辑运算、控制流程等功能。 总之,startup.a51文件是51单片机启动时必要的代码文件。它通过执行初始化步骤,为单片机的正常工作做好准备,并将控制权交给应用程序。 ### 回答3: startup.a51是51单片机启动文件,它起着非常重要的作用。在单片机上电时会首先执行这个文件中的代码。下面我来详细解释它的功能和作用。 首先,startup.a51文件包含了一些必要的初始化代码,用于设置单片机的基本工作环境。它会设置机器模式、堆栈指针、内存空间等。这些设置对于单片机正常工作是必不可少的。 其次,startup.a51文件还包含了中断向量表的定义。中断向量表是用来保存中断地址的一个表格。当中断事件发生时,单片机会自动跳转到对应中断向量的处理程序去执行。startup.a51文件会为每个中断向量分配一个处理程序的地址。 此外,startup.a51文件中还包含了一些初始化数据和变量的定义。在程序运行之前,这些数据和变量会被存储在相应的内存地址中。这些数据和变量的定义可以在程序中使用,提供了方便的操作。 最后,startup.a51文件还会跳转到主程序的入口点,将控制权交给主程序。主程序是用户自己编写的,是实际执行功能的核心代码。 总之,startup.a51是51单片机启动文件,负责进行一系列的初始化设置和准备工作。它定义了中断向量表、初始化数据和变量,并将控制权交给主程序。没有这个文件,单片机将无法正常启动和运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

嵌入式up

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

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

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

打赏作者

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

抵扣说明:

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

余额充值