51单片机定时/计数器相关知识点

51单片机定时/计数器相关知识点

结构组成

51单片机的定时/计数器中有两个寄存器:

  • T0:低位:TL0(字节地址8AH)高位:TH0(字节地址8CH)
  • T1:低位:TL1(字节地址8BH)高位:TH1(字节地址8DH)

他们的控制通过两个特殊功能寄存器实现, 其中:

  • TMOD定时方式控制寄存器:确定定时/计数器的工作方式和功能
  • TCON定时控制寄存器:管理T0,T1的启停、溢出、中断

两个定时器都有一根连接外部的引脚P3.4,P3.5,用于接入外部计数脉冲信号。
当软件设置T0或T1启动定时/计数器后,他们会由硬件自动运行。无需CPU干预,直到计数器溢出后才会通过中断让CPU进行后续的处理。

定时/计数器的控制

TMOD定时方式控制寄存器

以下是TMOD的寄存器组成:
TMOD定时方式控制寄存器
下面是对其中每一位的说明:

符号功能
TMOD.7GATETMOD.7控制定时器1,置1时只有在 I N T 1 ‾ \overline {INT1} INT1脚为高及TR1控制位置1时才可打开定时器/计数器1。
TMOD.3GATETMOD.7控制定时器1,置1时只有在 I N T 0 ‾ \overline {INT0} INT0脚为高及TR1控制位置1时才可打开定时器/计数器1。
TMOD.6C/ T ‾ \overline {T} TTMOD.6控制定时器1用作定时器或计数器,清零则用作定时器(从内部系统时钟输入),置1用作计数器(从T1/P3.5脚输入)
TMOD.2C/ T ‾ \overline {T} TTMOD.2控制定时器0用作定时器或计数器,清零则用作定时器(从内部系统时钟输入),置1用作计数器(从T0/P3.4脚输入)
TMOD.5/TMOD.4M1 M0定时器/计数器1模式选择
TMOD.1/TMOD.0M1 M0定时器/计数器0模式选择

定时/计数器的模式选择,其对应模式如下:

T1定时器:

M1M0模式
0013位定时器/计数器,兼容8048定时模式,TL1只用低5位参与分频,TH1整个8位全用。
0116位定时器/计数器,TL1、TH1全用
108位自动重装载定时器,当溢出时将TH1存放的值自动重装入TL1
11定时器/计数器1此时无效(停止计数)

T0定时器:

M1M0模式
0013位定时器/计数器,兼容8048定时模式,TL0只用低5位参与分频,TH0整个8位全用。
0116位定时器/计数器,TL0、TH0全用
108位自动重装载定时器,当溢出时将TH0存放的值自动重装入TL0
11定时器0此时作为双8位定时器/计数器。TL0作为一个8位定时器/计数器,通过标准定时器0的控制位控制。TH0仅作为一个8位定时器,由定时器1的控制位控制

定时/计数器的工作方式

方式1

这里不介绍具体原理,读者知道以下几点即可:

  • M1M0 = 01时,定时/计数器工作在方式1状态
  • 这个状态下满计数值为216
  • T1和T0两个定时/计数器在方式1方面没有区别
  • 当C/ T ‾ \overline {T} T = 0时,为定时器工作方式
  • GATE的作用实际上是是否设置外部引脚控制定时,如果它为0,那么定时/计数器的开与关只与TR的状态有关
  • 当C/ T ‾ \overline {T} T = 1时,为计数器工作方式
  • 处在计数器工作方式时,以该定时器对应的引脚的负脉冲作为计数信号
  • 最高计数频率为(1/24)fOSC

关于定时/计数器的初值a与定时时间t的关系:

t = ( 2 16 − a ) ⋅ 12 / f O S C t = ( 2^{16} - a ) \cdot 12/ f_{OSC} t=(216a)12/fOSC
因此,当时钟频率为12MHz时,方式1的定时范围为1~65536μs

计数器初值a与计数值N的关为:
N = 2 16 − a N = 2^{16} - a N=216a

因此,方式1的计数范围为1~65536个脉冲

方式2

当M1M0 = 10 时,定时/计数器工作于方式2

需要知道的有:

  • TLx(这里的x可以为0或者1,表示定时/计数器1或者0中的低八位寄存器)作为计数器,计满数值为28
  • THx记录TLx的初值,当TLx满时,由硬件自动将TLx的值还原为THx中的值
  • THx中的初值是由软件赋值的

定时方式2的定时时间t和计数初值分别按下式计算:

t = ( 2 8 − a ) ⋅ 12 / f O S C a = 2 8 − t ⋅ f O S C / 12 t = (2^8 - a) \cdot 12 / f_{OSC} \\ a = 2^8 - t \cdot f_{OSC} /12 t=(28a)12/fOSCa=28tfOSC/12

方式2可以产生非常精确的定时时间,适合作用于串行口波特率发生器

计数初值a与计数值N的关系为:
N = 2 8 − a N = 2^8 - a N=28a

方式0

当M1M0 = 00 时,定时/计数器工作于方式0

需要知道的有以下几点:

  • 方式0采用低5位TLx和高8位THx组成13位的加1计数器
  • 满记数值为213
  • 初值不能自动重装
  • TLx中的高三位是无效的,可以为任意值

方式0的定时时间t与计数初值a分别按照下式计算:
t = ( 2 13 − a ) ⋅ 12 / f O S C a = 2 13 − t ⋅ f O S C / 12 t = (2^{13} - a) \cdot 12 / f_{OSC} \\ a = 2^{13} - t \cdot f_{OSC}/12 t=(213a)12/fOSCa=213tfOSC/12

计数初值a与计数值N的关系为:
N = 2 13 − a N = 2^{13} - a N=213a

方式3

当M1M0 = 11时,定时/计数器工作于方式3

方式3与其他方式不同,方式3时,单片机可以组合出3种定时/计数器关系:

  1. TH0 + TF1 + TR1 组成带有中断功能的8位定时器
  2. TL0 + TF0 + TR0 组成带有中断功能的8位定时/计数器
  3. T1 组成的无中断功能的定时/计数器

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

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

相关文章

【教学类-综合练习-03】20231214 大3班 数字加减法练习(数字火车、X—Y加法减法、X乘法、X—Y数字分合)

第二次来大3班投放综合学具 第二次做综合题,大3班孩子选择的内容就跟更多了 今天高手没有来,每人能做“加减乘”

vue封装组件(一)标签和下拉框组合实现添加数据

背景: 最近接入短剧内容,需要添加短剧合作方。在详情页需要支持添加组件 方案一:标签tag加上输入框实现添加数据。图片见下 这个是刚开始做的,后来产品觉得这样会造成随意修改数据,需要改成下拉框形式添加 方案二:标签…

算法每日一题:在链表中插入最大公约数 | 链表 | 最大公约数

hello,大家好,我是星恒 今天的题目是有关链表和最大公约数的题目,比较简单,核心在于求解最大公约数,我们题解中使用辗转相除法来求解,然后我们会在最后给大家拓展一下求解最大公约数的四个方法,…

vue3学习 【2】vite起步和开发工具基本配置

vite的简介 官方文档 刚起步学习,所以我们只需要按照官方文档的入门流程即可。推荐阅读一下官网的为什么使用vite vite目前需要的node版本是18,可以参考上一篇文章的安装nvm,用来进行多版本的node管理。 vite安装与使用 npm create vitela…

Android两个APP之间跳转+手机图标修改

APP之间跳转 两个APP之间跳转同样使用Intent进行跳转,将需要跳转的APP都下载到手机中,通过主APP调用需要跳转的APP包名进行跳转。 最好在其中加上try-catch语句,当需要跳转的APP不存在时进行错误抓取。 代码如下: Intent mInten…

MySQL索引简介(包含索引优化,索引失效,最左前缀简洁版)

一、索引的基本概念 1.什么是索引 索引是一种数据结构,用于快速查找和访问数据库中的数据。它类似于书本的目录,可以帮助数据库管理系统快速定位到存储数据的位置。通过创建索引,我们可以加快数据库的查询速度并提高系统的性能。索引可以基于…

Notepad++ v7.7.1 安装及添加插件

1、notepad_v7.7.1.zip npp.7.7.1.Installer.x64.exe npp.7.7.1.Installer.x86.exe notepad_v7.7.1.ziphttps://www.123pan.com/s/VTMXjv-X6H6v.html 2、notepad插件包_64bit_4.zip ComparePlugin ---->文件对比插件 ComparePlugin.dllNppFTP ---->FTP、FTPES和SFTP …

苹果Mac图像修图软件Photomator和Pixelmator Pro 有什么区别?

同为一个团队设计的Mac修图软件Photomator和Pixelmator Pro有哪些区别呢?有哪些不一样的功能? Photomator和Pixelmator Pro区别如下: 1、用途不同 Photomator 和 Pixelmator Pro 是两个功能强大的应用程序,具有两个不同的用途。…

第8课 将推流端与播放端合并为一对一音视频聊天功能

在第二章的第7课,我们实现了一个推流端,可以把音视频推送到rtmp服务器;在第一章的第4课,我们实现了一个播放器,可以正常播放rtmp音视频流。聪明的你应该可以想到了:把推流端和播放端合并在一起,…

宋仕强论道之华强北的劣势(十八)

华强北微观上的劣势。华强北的企业同质化严重,经营策略和定价方式都差不多,内卷现象突出,价格战、恶性竞争频发,小企业利润空间不断被挤压。如华强北的手机配件市场,很多商户销售相同品牌、相同型号的手机壳、充电器、…

10款以上开源工具,用于大型语言模型应用开发

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

intersection observer实现图片懒加载

图片懒加载(Lazy Load)是一种优化网页性能的技术,它可以延迟图片的加载时间,只有当用户滚动到该图片的位置时才会进行加载。这样可以减少页面的初始加载时间,提高页面的响应速度和用户体验。 以下是使用浏览器原生支持…

skimage图像处理(全)

文章目录 一、简介二、安装三、模块简介:API reference四、项目实战4.1、2D图像处理4.1.1、打印图像属性4.1.2、读取 / 显示 / 保存图像:skimage.io.imread() skimage.io.imshow() skimage.io.imsave()4.1.3、颜色空间转换:skimage.color.r…

LeetCode2807. Insert Greatest Common Divisors in Linked List

文章目录 一、题目二、题解 一、题目 Given the head of a linked list head, in which each node contains an integer value. Between every pair of adjacent nodes, insert a new node with a value equal to the greatest common divisor of them. Return the linked l…

2401d,d理解模板映射

原文 关于映射带模板参数的函数,我惊讶地发现它仍可同运行时确定的函数,甚至是闭包等工作.我想理解它背后的机制. 注释掉的行会导致错误,即编译时无法确定choice(funcs),这是公平的,但它为何与上面两行的func不一样?我猜是因为函数在编译时是可见的字面,但闭包使这可疑. impo…

Python画草莓熊

前言 今天,我们来画草莓熊。 一、草莓熊 草莓熊,英文名Lotso,迪士尼公司和皮克斯动画工作室公司于2010年合作推出的动画片《玩具总动员3》(Toy Story3)的反派角色。Lotso就是大受欢迎的反派"草莓熊"--这是一个特殊的角色&#x…

C#的StringBuilder方法

一、StringBuilder方法 StringBuilder方法Append()向此实例追加指定对象的字符串表示形式。AppendFormat()向此实例追加通过处理复合格式字符串(包含零个或更多格式项)而返回的字符串。 每个格式项都由相应的对象自变量的字符串表示形式替换。AppendJoi…

计算机二级Python选择题考点——公共基础部分

计算机完成一条指令所花费的时间称为一个指令周期。(指令周期越短,指令执行就越快)顺序程序不具有并发性。(具有顺序性、封闭性和可再现性)结构化程序设计强调程序的易读性。系统软件:操作系统、编译程序、数据库管理系统 应用软件:杀毒软件在…

设置docker容器的时区

目录 基于Alpine镜像的Docker容器的Dockerfile中 基于dpkg包管理且使用APT的Linux发行版镜像的docker容器的Dockerfile中 基于Alpine镜像的Docker容器的Dockerfile中 # 替换国内源,可按需添加 RUN set -eux && sed -i s/dl-cdn.alpinelinux.org/mirrors.…

选择 省市区 组件数据 基于vue3 + elment-plus

h5 <el-cascader v-model"form.area" :props"{value: label,label: label }" :options"jsonData" change"handleChange" style"width: 100%;" /> script import jsonData from /utils/city.json; 选完省市区 数据是一…