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

2023-11-14

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


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


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

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 机器人TF坐标系变换与一些可视化工具的应用

    TF坐标在ROS中是一个非常重要的概念 因为机器人在做日常操作任务的时候 对于其所在位置和朝向是需要时刻知道的 而机器人是由很多节点组成的协同任务 对于每个部件 我们需要知道它的位姿 位置和朝向 这使得坐标系就成为了一个很重要的问题 TF的
  • Unity查找物体的方法总结

    文章目录 前言 一 不能找到失活对象的方法 1 Object类中的静态方法 2 GameObject类中的静态方法 二 能找到失活对象的方法 1 Transform Find 2 如何通过Transform找到自己以下的任意对象 总结 前言
  • JavaScript 判断空对象空数组

    JavaScript 判断空对象空数组 一 为什么判断空数组空对象会比较麻烦 二 判断空数组的方法 三 判定空对象的方法 四 一个判断参数为空的函数封装 来源 https www jianshu com p cadcbab793d7 我们判
  • ADAS的八大系统

    简述 ADAS Advanced Driving Assistant System 即高级驾驶辅助系统 ADAS 是利用安装于车上的各式各样的传感器 在第一时间收集车内外的环境数据 进行静 动态物体的辨识 侦测与追踪等技术上的处理 从而能够

随机推荐

  • Windows编程基础--第2节 win32程序资源管理

    操作系统 win10 64位 IDE vc 6 0 windows程序都有自己的资源 例如按钮 图标 对话框等等 这节介绍如何使用win32程序资源管理 1 继续使用上节的win32程序demo 执行File gt new添加资源 选择Fi
  • python爬虫返回403错误?加了请求头+代理也解决不了 >>看这

    一 问题分析 疑惑 使用python的requests库发起get或post请求返回403代码错误 使用postman发起请求发现状态码 lt 200 gt 竟然成功了 这是什么原因 首先排除ip问题 ip有问题的话postman也访问不了
  • 阿里技术副总裁贾扬清、微软 CTO 韦青重磅出席 AI 开发者大会!

    整理 夕颜 硬核 AI 技术大会 一年参加一次就够了 9 月 6日 7 日 2019 AI 开发者大会 AI ProCon 将在北京富力万丽酒店举行 人工智能领域技术领袖将再次齐聚一堂 共同探讨过去一年最新的 AI 技术趋势与变化 带你跟上
  • 【PytorchLearning】基于 UNet 的肺部影像语义分割案例保姆教程

    基于 UNet 的肺部影像分割 一般而言 计算机视觉领域包含三大主流任务 分类 检测 分割 其中 分类任务对模型的要求较为简单 在之前的Pytorch入门教程中已进行了较为详尽的介绍 有兴趣的小伙伴可以查看之前的博客 而检测和分割任务是比较
  • 一名全栈工程师的技术实践之路

    一 前言 1 1 什么是全栈 全栈开发是指开发人员掌握了前端 后端以及数据库等多个领域的知识和技能 能够独立完成整个项目的开发工作 在需求交付过程中 可以负责从项目的前期分析 设计到后期开发 测试 发布等整个过程 能够快速定位和解决问题 提
  • Graph 在项目中的实践

    前言 graph 图这种结构在项目中其实经常能够遇见 java 其实提供 jgrapht core 包来进行核心功能的实现 这里就使用jgrapht core 来对常见应用场景进行扩展 实现 1 引入依赖xml
  • Python爬虫 网页请求的异常处理

    网页请求的异常处理主要有两大类 urllib error URLError 用于捕获由urllib request产生的异常 使用reason属性返回错误原因 urllib error HTTPError 用于处理HTTP与HTTPS请求的
  • sql语句百万级千万级数据量分页

    在开发系统时难免会遇见分页的列表查询 针对小数据量我们可以查询的时间可以忽略不记 但针对百万级别千万级别的数据量时改怎么优化查询语句呢 该如果使用分页呢 下面总结几点 适量增加索引 在经常查询的字段上 尽量避免like in is null
  • Pycharm配置解释器(interpreter)

    关于pycharm编译器的解释器 网友朋友的分享 Pycharm配置 1 解释器 interpreter 详细了解PyCharm支持的4种Python Interpreter和配置方法 对大多数人而言就只需要 分清虚拟解释器和系统解释器 使
  • 二叉树采用二叉链表存储,求树的结点个数

    typedef struct BiTNode ElemType data struct BiTNode lchild rchild BiTNode BiTree void PrePrder BiTree T int num if T NUL
  • [leetcode 周赛 148] 1146 快照数组

    目录 1146 Snapshot Array 快照数组 描述 思路 代码实现 1146 Snapshot Array 快照数组 描述 实现支持下列接口的 快照数组 SnapshotArray SnapshotArray int length
  • nginx关于add_header的坑

    一 add header指令不会去重 nginx做反向代理时 如果后端返回的response中已经有该header头 则通过add header后会返回给客户端两个同样的header头 场景1 nginxA作为反向代理 nginxB作为we
  • 如何利用运营商大数据准确获取客户?

    在今天运营商的大数据准确捕捉客户的时代 我们似乎看到客户在我们面前若隐若现 但当我们伸手去抓他们时 我们发现他们很少 原因是什么 我们的客户之所以成为美丽的海市蜃楼 主要原因 还在于对客户的把握不够精准 什么是大数据准确性 大数据精准获客是
  • 【论文阅读】基于深度学习的时序异常检测——TimesNet

    系列文章链接 参考数据集讲解 数据基础 多维时序数据集简介 论文一 2022 Anomaly Transformer 异常分数预测 论文二 2022 TransAD 异常分数预测 论文三 2023 TimesNet 基于卷积的多任务模型 论
  • 线性相关与线性无关的定义与性质

    定义1 线性相关 K n K n K nK n Kn Kn 中向量组
  • Caffe训练过程:test_iter test_interval等概念

    转自 http blog csdn net iamzhangzhuping article details 49993899 先上一张图 大家很熟悉的一张图 首先说明一个概念 在caffe中的一次迭代iteration指的是一个batch
  • Webrtc从理论到实践六: Webrtc官方demo运行

    系列文章目录 Webrtc从理论到实践一 初识 Webrtc从理论到实践二 架构 Webrtc从理论到实践三 角色 Webrtc从理论到实践四 通信 Webrtc从理论到实践五 编译webrtc源码 文章目录 系列文章目录 操作步骤 总结
  • 语义分割模型

    1 FCN 1 通道数 21 的特征层 21 数据集类数20 背景1 每一个像素有21个通道 对21个通道进行softmax回归 之后就可以获得每一个像素的每一个类别的预测概率 因为可以确认像素概率最大的那一类 2 CNN中的最后通过全连接
  • Blender 骨骼子父级关系链接

    一 骨骼子父集关系链接 操作顺序 1 选中物体 2 选中骨骼 3 Ctrl P根据个人需求选择 多数情况会选择自动权重 如果选择顺序不同 Ctrl P出现的界面就不会显示权重选择 二 骨骼被物件遮挡 选中骨骼 在下图中的界面里 勾选在前面即
  • 【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)

    学习目标 51定时 计数器的详解 码字不易 如有帮助请收藏 点赞哦 学习内容 背景知识 了解一下对以后学习有帮助 前提 首先我们知道51单片机内部有21 26个特殊功能寄存器 P x口寄存器 P0 P1 P2 P3 数据指针寄存器 DP0H