51单片机 定时器详解


51单片机定时器详解

在 51 单片机中,定时器/计数器(Timer/Counter)是一个非常重要的功能模块,用于处理定时、计数和事件触发等任务。定时器可以在应用程序中产生周期性中断,常用于精确的时间延迟、事件计数等场合。本文将详细介绍51单片机中定时器的工作原理、模式及其应用场景。


1. 定时器/计数器简介

在 51 单片机中,定时器/计数器可以被配置为计时计数模式:

  • 定时模式:单片机内部的振荡器(通常由外部晶振提供时钟信号)驱动定时器按固定频率计数。
  • 计数模式:定时器由外部输入信号触发,每检测到一个上升或下降沿时,计数器的值会增加1。

标准的 8051 单片机通常具有两个定时器:定时器 0定时器 1,它们各自都有独立的寄存器和控制方式。在部分改进版 51 单片机中(如 8052),还增加了 定时器 2,功能更为丰富。


2. 定时器/计数器的寄存器结构

51 单片机的定时器由以下几个主要寄存器控制:

  • TMOD(Timer Mode)寄存器:用于选择定时器/计数器的工作模式和功能。
  • TCON(Timer Control)寄存器:用于控制定时器的启动和中断标志。
  • TH0、TL0 和 TH1、TL1:用于存储定时器 0 和定时器 1 的高 8 位和低 8 位数据。

TMOD 寄存器

TMOD 是一个 8 位寄存器,其结构如下:

76543210
说明GATE1C/T1M1M0GATE0C/T0M1M0
  • GATE:控制定时器是否受外部中断(INT0、INT1)控制。
  • C/T:控制定时器/计数器模式,0 为定时器模式,1 为计数器模式。
  • M1、M0:用于设置定时器的工作模式。

TCON 寄存器

TCON 是 8 位寄存器,定时器相关的主要控制位如下:

76543210
说明TF1TR1TF0TR0IE1IT1IE0IT0
  • TF1、TF0:定时器1、0的溢出标志。
  • TR1、TR0:定时器1、0的启动控制位。

3. 定时器的工作模式

51单片机的定时器有 4 种工作模式,通过 TMOD 寄存器的 M1 和 M0 位来设置。

模式 0:13 位计数器模式

  • 使用 8 位 THx 和 5 位 TLx,共计 13 位计数。
  • 计数范围:0 到 8191。
  • 适用于对精度要求不高的情况,因为计数范围相对较小。

模式 1:16 位计数器模式

  • 使用 8 位的 THx 和 TLx,共 16 位计数。
  • 计数范围:0 到 65535。
  • 是最常用的模式,提供更大的计数范围和良好的精度。

模式 2:8 位自动重装模式

  • 仅使用 TLx,THx 用于存储重装值。
  • 当 TLx 溢出时,自动加载 THx 中的重装值。
  • 适用于产生固定周期的中断。
模式 3:定时器 0 双 8 位定时模式
  • 将定时器 0 分为两个独立的 8 位定时器 TL0 和 TH0。
  • 适用于需要两个8位计数器的应用场景。

4. 定时器中断的原理

在定时器计数达到最大值并溢出时,会触发溢出中断,将对应的 TCON 中断标志(TF0、TF1)置位,同时触发相应的中断服务函数(ISR)。以下是实现一个定时器中断的基本步骤:

  1. 设置定时器模式:通过 TMOD 寄存器选择工作模式。
  2. 加载初始值:向 THx 和 TLx 寄存器写入初始值。
  3. 启动定时器:将 TRx 位设为 1。
  4. 开启中断:设置定时器中断允许位。
  5. 编写中断服务程序:在中断服务程序中处理溢出事件。

5. 定时器的常见应用场景

5.1 定时中断

定时器的最常见应用是生成固定周期的中断。例如,1ms 的定时中断可以通过以下公式确定初值:

[
初值 = 65536 - \frac{定时时间}{机器周期时间}
]

在 12MHz 的时钟频率下,机器周期时间为 1µs,若需 1ms 中断,则初值为:

[
初值 = 65536 - 1000 = 64536
]

代码实现如下:

#include <reg51.h>void Timer0_Init() {TMOD |= 0x01;       // 选择定时器0的模式1(16位模式)TH0 = 0xFC;         // 加载初值高字节TL0 = 0x18;         // 加载初值低字节TR0 = 1;            // 启动定时器0ET0 = 1;            // 使能定时器0中断EA = 1;             // 使能总中断
}void Timer0_ISR() interrupt 1 {TH0 = 0xFC;         // 重新加载初值TL0 = 0x18;// 处理代码,例如:翻转 LED 状态P1 = ~P1;
}void main() {Timer0_Init();while(1);
}

5.2 计数事件

在外部计数模式下,定时器可以用来计数外部事件,比如脉冲计数器。配置 C/T 位为 1,即可将定时器转换为计数器模式。


6. 注意事项

  • 定时精度:由于51单片机的机器周期固定,因此定时精度取决于晶振频率,需选择合适的晶振。
  • 溢出问题:在加载初始值时需注意避免溢出。
  • 中断响应:中断服务程序尽量简单,避免长时间占用 CPU。

7. 总结

51 单片机的定时器功能强大且灵活,支持多种模式和应用场景。合理配置定时器,不仅可以实现精准的定时操作,还可以用于事件计数和外部触发事件。熟练掌握定时器的应用,能够大幅提升 51 单片机的开发效率和功能实现能力。


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

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

相关文章

利用 Avalonia UI 构建 Blazor 混合应用程序

Blazor 是一个 .NET 前端框架&#xff0c;用于仅使用 .NET 技术构建 Web 应用程序。2021 年&#xff0c;Blazor 扩展到桌面端&#xff0c;推出了 Blazor Hybrid&#xff08;混合&#xff09;&#xff0c;使开发者可以在桌面平台上使用已有的技能。 Blazor 混合应用程序是传统的…

为什么要学习 Java 编程

1991 年&#xff0c;Sun Microsystems 创造了历史。 当时的目标是设计一种用于电视机顶盒的编程语言。 James Gosling&#xff08;Java 之父&#xff09;本人可能从未预料到&#xff0c;他即将为 IT 行业的未来奠定基础。 Java 以其简洁易读的代码形式和复杂的面向对象编程语…

Bootstrap 5 表格

Bootstrap 5 表格 引言 Bootstrap 5 是目前最流行的前端框架之一,它提供了一套丰富的组件和工具,帮助开发者快速构建响应式、移动优先的网页。在本文中,我们将重点探讨 Bootstrap 5 中的表格组件,包括其基本用法、样式定制以及高级功能。 基本表格 在 Bootstrap 5 中,…

uniapp MD5加密

安装&#xff1a; npm install js-md5 -D 引入&#xff1a; import Md5 from js-md5 需求加密一个对象&#xff0c; login_form: {openId: 123456789,phone: ,scenario: 656677,phoneSessionKey: ,openIdSessionKey: ,timeStamp: , }, //10位时间戳&#xff08;秒&#xff09;…

K-M算法(图像凭借特征点匹配)

K-M算法&#xff0c;也被称为匈牙利算法。 二分图匹配算法&#xff0c;K-M也可以应用到图像拼接上的特征点匹配。 其主要利用两个可行顶标的调节以及等价子图的生成&#xff0c;从而加权二分图退化成无权二分图&#xff0c;最后利用寻求增广矩阵来求解无权二分图的最佳匹配。 先…

ELK-ELK基本概念_ElasticSearch的配置

文章目录 一、什么是ELK&#xff1f;有什么用&#xff1f;ELK是什么&#xff1f;ElasticsearchLogstashKibana ELK的作用 二、ElasticSearch的安装与基本配置为何需要依赖JDK&#xff1f;使用yum install java-11-openjdk和使用Oracle官网提供的jdk的rpm包安装JDK的区别 参考资…

怎么查看navicat的数据库密码

步骤1:打开navicat连接数据库工具&#xff0c;顶部的文件栏-导出结果-勾选导出密码-导出 步骤2&#xff1a;导出结果使用NotePad或文本打开&#xff0c;找到&#xff0c;数据库对应的的Password"995E66F64A15F6776“”的值复制下来 <Connection ConnectionName"…

linux驱动-i2c子系统框架学习(1)

可以将整个 I2C 子系统用下面的框图来描述&#xff1a; 可以将上面这一 I2C 子系统划分为三个层次&#xff0c;分别为用户空间、内核空间和硬件层&#xff0c;内核空间就包括 I2C 设备驱动层、I2C 核心层和 I2C 适配器驱动层&#xff0c; 本篇主要内容就是介绍 I2C 子系统框架中…

基于SSM的企业管理系统(源码+lw+调试+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【金融风控】相关业务介绍及代码详解

金融风控相关业务介绍 【了解】项目整体介绍 1.风控业务和风控报表</span> 零售金融产品 相关的指标 风控建模流程 ​ #2.特征工程 特征构造 特征筛选 ​ 3.评分卡模型构建 逻辑回归 集成学习 XGBoost LightGBM 模型评估 ​ #4.样本不均衡问题/异常点检测 【了解】今日…

【LeetCode】【算法】647. 回文子串

LeetCode 647.回文子串 题目描述 给你一个字符串s&#xff0c;请你统计并返回这个字符串中回文子串的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串是字符串中的由连续字符组成的一个序列。 思路 思路&#xff1a;中心拓展法 中心拓展法的意思是说&#xf…

Late Chunking×Milvus:如何提高RAG准确率

01. 背景 在RAG应用开发中&#xff0c;第一步就是对于文档进行chunking&#xff08;分块&#xff09;&#xff0c;高效的文档分块&#xff0c;可以有效的提高后续的召回内容的准确性。而对于如何高效的分块是个讨论的热点&#xff0c;有诸如固定大小分块&#xff0c;随机大小分…

华为机试HJ26 字符串排序

首先看一下题 描述 编写一个程序&#xff0c;将输入字符串中的字符按如下规则排序。 规则 1 &#xff1a;英文字母从 A 到 Z 排列&#xff0c;不区分大小写。 如&#xff0c;输入&#xff1a; Type 输出&#xff1a; epTy 规则 2 &#xff1a;同一个英文字母的大小写同时存在时…

学习正则表达式,如何校验手机号与电子邮箱

文章目录 一、正则表达式基础知识1.特殊字符&#xff08;Metacharacters&#xff09;2.字符类&#xff08;Character Classes&#xff09;3.预定义字符集&#xff08;Predefined character classes&#xff09;4.分组&#xff08;Groups&#xff09;5.量词&#xff08;Quantifi…

[QUIC] QUIC Frames

PADDING PADDING Frame {Type (i) = 0x00, }这个帧用于增加 QUIC 包的大小。 对于 Initial 包, 可以用它来增加包大小以达到要求的最小包的大小限制。 填充 QUIC 包以对抗流量分析。 这个帧的大小为1字节,表明自己是一个 PADDING 帧。 PING PING Frame {Type (i) = 0x01, …

蓝桥杯备赛(持续更新)

16届蓝桥杯算法类知识图谱.pdf 1. 格式打印 %03d&#xff1a;如果是两位数&#xff0c;将会在前面添上一位0 %.2f&#xff1a;会保留两位小数 如果是long&#xff0c;必须在数字后面加上L。 2. 进制转化 2.1. 十进制转任意进制&#xff1a; 十进制转任意进制时&#xff…

责任链模式 Chain of Responsibility

1 意图 使多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;并沿着这条链传递该请求&#xff0c;直到有一个对象处理它为止。 2 结构 Handler 定义一个处理请求的接口;(可选)实现后继链。 ConcreteHandler …

设计模式小结一工厂模式

先上结论: 工厂模式,也是一个开发者必须要掌握的设计模式。笔者记得大学里编程接触到的第一个设计模式就是工厂模式,现在回过头来看,那时接触的应该叫简单工厂模式,工厂模式还包括:工厂方法模式、抽象工厂模式。 开干! 老规矩,先上理论: 工厂模式(Factory Pattern…

SQL Server 2008 R2 详细安装教程及错误解决教程

SQL Server 2008 R2 详细安装教程及错误解决教程 文章目录 SQL Server 2008 R2 详细安装教程及错误解决教程1.装载或解压ISO文件2. 运行setup程序3. 下载并安装.NET Framework3.54.选择全新安装或向现有安装添加功能5.输入秘钥同意条款6.选择安装类型7.设置角色8.功能选择9.实例…

国际版JAVA同城打车源码同城服务线下结账系统源码适配PAD支持Android+IOS+H5

架构分析 导航栏&#xff1a;位于界面上方&#xff0c;包含了“数据中心”、“消息”、“用户中心”等主要功能模块的入口&#xff0c;方便用户快速访问。左侧功能模块&#xff1a;在界面的左侧&#xff0c;以列表形式展示了多个功能模块&#xff0c;如“数据中心”、“消息中…