51单片机教程(十一)- 单片机定时器

11、单片机定时器

  • 项目目标

    • 通过定时器/计数器实现流水灯控制。
  • 知识要点

    • 定时器的结构。
    • TMOD和TCON;
    • 定时/计数器工作方式;
    • 定时/计数器编程步骤;

1、项目分析

  • 前面的流水灯的时间控制通过空循环语句来实现,定时不是很精确。本章通过用定时器来控制流水灯任务可以实现精确的时间控制。这就需要了解定时器的使用。定时器和计数器实质功能相同,本章利用LED灯二进制计数任务来掌握计数器的使用。

2、技术准备

1 背景

  • 从软件延时的缺点说起
    • 前面讲过的“用若干次空循环实现延时”的例子

    • 软件延时的缺点:

      • 延时过程中,CPU时间被占用,无法进行其他任务,导致系统效率降低。延时时间越长,该缺点便越明显,因此软件延时只适用于短暂延时,或简单项目。
    • 定时/计数器

      • 单片机中有多个小闹钟,可以实现延时,这些小闹钟就是“定时器”。

2 工作原理

  • 背景

    • LED闪烁使用【演示法】实现,一般情况下不会采用延时的方式实现,CPU在程序执行到delay函数过程中需要不断执行循环空语句,会占用的CPU资源;若单边机外设较多,导致无法监控到其他的外设的中断事件。

    • 常用方法是采用:中断法。
      请添加图片描述

  • 概念

    • 定时/计数器具有定时与计时的功能

      • 计数:指对外部脉冲信号进行技术,每来一个脉冲计数值加1;当产生的信号脉冲很有规律,则多少个脉冲就能知晓是过了多少秒,从而计数功能就可以演化为定时功能。

      • 定时:根据某个基准时钟,通过对基准时钟的计数来完成定时功能。

  • 作用

    • 产生所需频率的脉冲。如产生频率1000Hz,占空比为1:1的脉冲波。

    • 累加计数的功能,计数可在一段时间内记录信号A经整形后的脉冲个数。

      请添加图片描述

    • 频率测量的功能,测量脉冲宽度或在一定时间内测量脉冲的个数,从而推算出脉冲的频率。

    • 定时/计数器的功能,对时钟信号进行计数,也可用来倒计时,秒表,循环计数等。

  • 工作原理

    • 在定时方式1下,定时/计数器0的核心是一个16位宽的

    • 由计数脉冲触发的按递增规律(即累加方式)工作的循环累加计数器(TH0+TL0)。从预先设定的初始值开始,每来一个计数脉冲就加1,当加到计数器为全1时,再输入一个脉冲,就会发生溢出现象,计数器回零,同时产生溢出中断请求信号(TF0置1)。如果定时/计数器工作于定时模式,则表示定时时间已到。

  • 工作模式

    • 定时器可以工作在不同的模式下,常见的模式包括定时模式、计数模式和PWM模式。
      • 定时模式:定时器按照预设值进行计数,当计数器达到预设值时触发中断或产生脉冲信号。
      • 计数模式:定时器根据外部输入的脉冲信号进行计数,可以用于计数外部事件的频率或脉冲数量。
      • PWM模式:定时器可以生成脉冲宽度调制(PWM)信号,用于控制电机速度、LED亮度等。
  • 定时器与计数器
    请添加图片描述


  • 单片机晶振:12M
    • 时钟周期:1 / 12000000,机器周期:12 / 12000000
    • 定时20ms:次数 * 12 / 12000000 = 0.02,次数:20000.
      • 因为采用的定时模式1,将45536(65536 - 20000)化为十六进制装载到寄存器TH0和TL0中,45536 / 256=177,45536 % 256=244,将177转化为十六进制0XB1装载到TH0,将244转化为十六进制0XF4装载到TL0。

3 定时/计数器

  • 实现定时功能,比较方便的办法是利用单片机内部的定时/计数器。也可以采用下面三种方法:
    • 软件定时:软件定时不占用硬件资源,但占用了CPU时间,降低了CPU的利用率。
    • 采用时基电路定时:例如采用555电路,外接必要的元器件(电阻和电容),即可构成硬件定时电路。但在硬件连接好以后,定时值与定时范围不能由软件进行控制和修改,即不可编程。
    • 采用可编程芯片定时:这种定时芯片的定时值及定时范围很容易用软件来确定和修改,此种芯片定时功能强,使用灵活。在单片机的定时/计数器不够用时,可以考虑进行扩展。

4 定时器溢出

  • 什么是溢出?
    任何一个计数范围有限的系统,均存在溢出现象。系统的可表达数的个数,称为模。定时器溢出时会导致定时器溢出中断请求,和该中断是否使能无关。

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

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

相关文章

基于opencv的疲劳驾驶监测系统

博主介绍:java高级开发,从事互联网行业多年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言&#xff0…

Vue 2 和 Vue 3 区别

1. 响应式系统原理 Vue 2:利用Object.defineProperty()实现属性拦截。存在局限性,无法自动监测对象属性增减,需用Vue.set/delete;数组变异方法要重写;深层对象递归转换性能差。Vue 3:采用 ES6 Proxy代理对…

mv重命名报错:-bash:syntax error near unexpected token ‘(‘

文章目录 一、报错背景二、解决方法2.1、方法一:文件名加引号2.2、方法二:特殊字符前加\进行转义 一、报错背景 在linux上对一文件执行重命名时报错。原因是该文件名包含空格与括号。 文件名如下: aa (1).txt执行命令及报错如下…

AWS 开源 Strands Agents SDK,简化 AI 代理开发流程

最近,亚马逊网络服务(AWS)宣布推出 Strands Agents(https://github.com/strands-agents/sdk-python),这一开源软件开发工具包(SDK)采用模型驱动的方法,助力开发者仅用数行代码即可构建并运行人工…

利用 AI 打造的开发者工具集合

如图. 我利用 AI 开发了这个网站花了半个小时. 目前就上了 四个 我想到的工具。 大家可以自行体验下:https://xiaojinzi123.github.io 本文并不是宣传什么产品. 只是感概 Ai 真的改变我的工作方式啊. 虽然现在 AI 对于一些已有的项目进行更改代码. 由于不了解业务,…

[自然语言处理]计算语言的熵

一、要求利用给定的中英文语料,分别计算英语字母、英语单词、汉字、汉语词的熵,并和已公开结果比较,思考汉语的熵对汉语编码和处理的影响。二、实验内容2.1 统计英文语料的熵1.代码(1)计算英文字母的熵import math #计算每个英文字母的熵 def…

如何处理“协议异常”错误

在Java中,“协议异常”通常是指在网络通信或者处理特定协议相关操作时出现的异常。以下是一些处理“协议异常”错误的方法:一、理解协议异常的类型和原因HTTP协议异常原因:在进行HTTP通信时,可能会因为请求格式错误、响应状态码异…

Spark 4.0的VariantType 类型以及内部存储

背景 本文基于Spark 4.0 总结 Spark中的 VariantType 类型,用尽量少的字节来存储Json的格式化数据 分析 这里主要介绍 Variant 的存储,我们从VariantBuilder.buildJson方法(把对应的json数据存储为VariantType类型)开始: public static Variant parseJson(JsonParser …

跨越十年的C++演进:C++20新特性全解析

跨越十年的C演进系列,分为5篇,本文为第四篇,后续会持续更新C23~ 前3篇如下: 跨越十年的C演进:C11新特性全解析 跨越十年的C演进:C14新特性全解析 跨越十年的C演进:C17新特性全解析 C20标准…

LeetCode--40.组合总和II

前言:如果你做出来了39题,但是遇到40题就不会做了,那我建议你去再好好缕清39题的思路,再来看这道题,会有种豁然开朗的感觉解题思路:这道题其实与39题基本一致,所以本次题解是借着39题为基础来讲…

Docker Desktop 安装到D盘(包括镜像下载等)+ 汉化

目录 一、 开启电脑虚拟化 1. 搜索并打开控制面板 2. 点击程序 3. 点击启用或关闭 Windows 功能 4. 打开相关功能 5. 没有Hyper-V的情况: 二、配置环境 1. 更新 WSL 到最新版 2. 设置 WSL 2为默认版本 3. 安装 Ubuntu 三. WSL 迁移到D盘 1. 停止运行wsl…

基于 OpenCV 的图像 ROI 切割实现

一、引言 在计算机视觉领域,我们经常需要处理各种各样的图像数据。有时候,我们只对图像中的某一部分区域感兴趣,例如在一张人物照片中,我们可能只关注人物的脸部。在这种情况下,将我们感兴趣的区域从整个图像中切割出…

Linux操作系统01

一、操作系统简史 二、Linux诞生与分支 三、Linux内核与发行版 内核版本号:cat /proc/version 、 u name -a 操作系统内核漏洞 【超详细】CentOS编译安装升级新内核_centos源码编译安装新版本内核 ntfs-CSDN博客 四、虚拟机 五、Docker容器技术 典型靶场集成环境…

Chrome 下载文件时总是提示“已阻止不安全的下载”的解决方案

解决 Chrome 谷歌浏览器下载文件时提示“已阻止不安全的下载”的问题。 ‍ 前言 最近更新 Chrome 后,下载文件时总是提示“已拦截未经验证的下载内容”、“已阻止不安全的下载”: ‍ 身为一个互联网冲浪高手,这些提醒非常没有必要&#x…

RocketMQ延迟消息是如何实现的?

RocketMQ的延迟消息实现机制非常巧妙,其核心是通过多级时间轮 定时任务 消息重投递来实现的。以下是详细实现原理: ⏰ 一、延迟消息的核心设计 预设延迟级别(非任意时间) RocketMQ不支持任意时间延迟,而是预设了18个…

D3 面试题100道之(21-40)

这里是D3的面试题,我们从第 21~40题 开始逐条解答。一共100道,陆续发布中。 🟩 面试题(第 21~40 题) 21. D3 中的数据绑定机制是怎样的? D3 的数据绑定机制通过 selection.data() 方法实现。它将数据数组与 DOM 元素进行一一对应,形成三种状态: Update Selection:已…

PyTorch nn.Parameter理解及初始化方法总结

一、理解 nn.Parameter 本质是什么? nn.Parameter 是 torch.Tensor 的一个子类。这意味着它继承了 Tensor 的所有属性和方法(如 .data, .grad, .requires_grad, .shape, .dtype, .device, .backward() 等)。它本身不是一个函数或模块&#xf…

【Linux】环境基础和开发工具

Linux 软件包管理器 yum 什么是软件包 在Linux下安装软件, 一个通常的办法是下载程序的源代码, 并进行编译, 得到可执行程序. 但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便…

多模态进化论:GPT-5V图文推理能力在工业质检中的颠覆性应用

前言 前些天发现了一个巨牛的人工智能免费学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站 🚀《多模态进化论:GPT-5V图文推理能力在工业质检中的颠覆性应用》 副标题:2025年实测报告显…

Linux实现一主二从模式

主从复制: 复制概念中分为两类数据库,一类是主数据库(master),一类是从数据(slave),主 数据库可以进行读写操作,并把写的操作同步给从数据库,一般从数据库是只…