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

news2025/1/24 8:41:27

 

学习目标:

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

如图所示,

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

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

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

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

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

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

 

 

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

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

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

1.TMOD寄存器

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

这里我们就要用到    TMOD  了   

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

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单片机【定时/计数器】,详细介绍-电子工程世界 (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   

 即  TH1 = 0xee TL0 = 0x00

即可定时   5ms

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

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

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

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


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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/413740.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux: 性能分析之On-CPU和Off-CPU

文章目录1. 前言2. 概述3. 分析方法概述3.1 CPU 采样 方法3.2 跟踪 方法4. 使用火焰图分析4.1 On-CPU 分析4.2 Off-CPU 分析4.2.1 Off-CPU 两种分析方法对比4.2.2 生成 Off-CPU 火焰图5. 参考资料1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读…

准备2023(2024)蓝桥杯

前缀和 一维前缀和 s[i]s[i-1]a[i]二维前缀和&#xff08;子矩阵的和&#xff09; s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j] 差分 一维数组 //b是差分数组b[i]c;b[j1]-c;例题 #include<iostream> using namespace std; int n,m; int b[100002],a[100002]; vo…

【系统集成项目管理工程师】信息系统集成及服务

&#x1f4a5;信息系统集成及服务 1、信息技术基础架构库&#xff08;ITIL&#xff09; 简介&#xff1a; 最初是为了提高英国政府部门 IT 服务质量而开发&#xff0c;但它很快在英国的各个企业中得到了广泛的应用和认可。 ITIL 包含着如何管理IT 基础设施的流程描述&#xf…

【OpenCV-Python】cvui 之 trackbar

CVUI 之 trackbar cvui::trackbar() 渲染一个 trackbar&#xff0c; 可以左右拖动或点击对数字进行增加或减少的调整。 不使用离散间隔 使用离散间隔 Python import numpy as np import cv2 import cvuidef trackbar_test():WINDOW_NAME Trackbar-Test# 创建画布frame np.z…

2023-数据质量管理方法总结

一、数据质量保障原则 如何评估数据质量的好坏&#xff0c;业界有不同的标准&#xff0c;阿里主要从4个方面进行评估&#xff1a;完整性、准确性、一致性、及时性&#xff1b; 1.完整性 数据完整性是数据最基础的保障&#xff1b; 完整性&#xff1a;指数据的记录和信息是否…

Redis高级功能

目录 1.RDB 持久化 1.1生成RDB文件的命令 1.2RDB 文件结构 1.3RDB 文件结构 - database 部分 2.AOF 持久化 2.主从复制 2.1重同步 - 完整重同步 2.2重同步 - 部分重同步 2.2.1重同步 - 部分重同步的实现 - PSYNC的实现原理 3.复制的具体过程 3.Sentinel 哨兵模式 …

MySQL Workbench使用入门

软件介绍 MySQL Workbench 是可视化数据库设计软件&#xff0c;为数据库管理员和开发人员提供了一整套可视化的数据库操作环境&#xff0c;主要功能有数据库设计与模型建立、SQL 开发&#xff08;取代 MySQL Query Browser&#xff09;、数据库管理&#xff08;取代 MySQL Adm…

【Vue框架】Vue2中element-ui/mint-ui组件库——element-ui引入组件以及使用案例、mint-ui引入组件及使用案例

文章目录一、element-ui/mint-ui组件库1.1 element-ui使用步骤1.1.1 引入组件1.1.2 修改 .babelrc文件1.2 mint-ui的使用1.2.1 安装引入组件1.2.2 Mint-ui相关组件一、element-ui/mint-ui组件库 element-ui 提供了大量的组件&#xff0c;如&#xff1a;布局组件、表单组件、JS…

运行时内存数据区之虚拟机栈——动态链接、方法返回地址与一些附加信息

动态链接&#xff08;Dynamic Linking&#xff09;——指向运行时常量池的方法引用 每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用。包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking)。比如&#xff1a;invokedynamic指令。…

算法 DAY24 回溯 || 第77题. 组合 216.组合总和III 17.电话号码的字母组合 39. 组合总和

前置知识 回溯算法模板框架如下&#xff1a;void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择&#xff1a;本层集合中元素&#xff08;树中节点孩子的数量就是集合的大小&#xff09;) {处理节点;backtracking(路径&#xff0c;选择列表); // 递归回溯&am…

rk3568点亮LCD(lvds)

rk3568 Android11/12 适配 lvds 屏 LVDS&#xff08;Low Voltage Differential Signal&#xff09;即低电压差分信号。1994年由美国国家半导体&#xff08;NS&#xff09;公司为克服以TTL电平方式传输宽带高码率数据时功耗大、电磁干扰大等缺点而研制的一种数字视频信号传输方…

堆的实现

思维导图 堆的概念 普通的二叉树是不适合用数组来存储的&#xff0c;因为可能会存在大量的空间浪费。而完全二叉树更适合使用顺序结构存储。现实中我们通常把堆(一种二叉树)使用顺序结构的数组来存储&#xff0c;需要注意的是这里的堆和操作系统虚拟进程地址空间中的堆是两回事…

【LeetCode】剑指 Offer 50. 第一个只出现一次的字符 p243 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/di-yi-ge-zhi-chu-xian-yi-ci-de-zi-fu-lcof/ 1. 题目介绍&#xff08;50. 第一个只出现一次的字符&#xff09; 在字符串 s 中找出第一个只出现一次的字符。如果没有&#xff0c;返回一个单空格。 s 只包含小写字母。 【测…

al文章生成-文章生成工具

ai文章生成器 AI文章生成器是一种利用人工智能和自然语言处理技术生成文章的工具。它使用先进的算法、机器学习和深度学习技术&#xff0c;深度挖掘和提取大量数据背后的信息&#xff0c;自主学习并合并新的信息&#xff0c;生成优质、原创的文章。 使用AI文章生成器的优点如下…

liunx mysql 主从同步设置 关键点

主库MySQL配置文件&#xff1a;该配置文件默认是在 /etc/my.cnf [mysqld] max_allowed_packet256M server-id1 log-binmysql-bin replicate-do-dbweb auto_increment_increment2 auto_increment_offset1 binlog_ignore_dbsys general_logon general_log_file/v…

Qt下载以及调试

1.概念 Qt是一个跨平台的基于C图形用户界面应用程序框架。 常见GUI&#xff1a; Qt&#xff1a;支持多平台&#xff1b;支持css&#xff1b;面向对象特性体现突出&#xff1b;发展趋势良好&#xff1b; MFC&#xff1a;仅在Windows&#xff1b;运行程序效率高&#xff1b;库安…

外包干了四年,感觉废了..

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

如何利用ventoy制作Linux to go (把deepin放到U盘里)

准备工作 最新版本 – 深度科技社区 (deepin.org) deepin镜像官方下载即可 Releases ventoy/vtoyboot GitHub ventoy启动插件选择1.0.29版本 Downloads – Oracle VM VirtualBox VirtualBox虚拟机官网 ventoy下载 VentoyRelease (lanzoui.com) 选择下载1.0.29版本 vento…

表格软件界的卷王,Excel、access、foxpro全靠边,WPS:真荣幸

Excel和Access就是表格软件的选择&#xff1f; 现在&#xff0c;铺天盖地的Excel的技能教程可谓是满天飞&#xff0c;有网上的教程&#xff0c;也有视频直播课程。 很多办公人员用Excel这种表格软件与VBA结合&#xff0c;甚至用不遗余力去学习Python编程语法&#xff0c;但Exce…

2023年会计师事务所研究报告

第一章 行业发展概况 1.1 行业概况 会计师事务所是专门从事财务、税务等领域的专业服务机构&#xff0c;其服务范围涵盖了审计、会计、税务、咨询等多个方面。 近年来&#xff0c;随着全球经济的不断发展和国际贸易的增加&#xff0c;会计师事务所行业也得到了快速发展。据统…