定时器

article/2025/10/10 19:16:26

51中断系统的组成

定时/计数器的基本原理


逻辑开关闭合后,脉冲信号将对加1计数器充值。若计数器的容量为2 n (n为整数),则当数值达到满计数值后将产生溢出,使中断请求标志TFx(x为0或1)进位为1,同时加1计数器清零。
如果在启动计数之前将TFx清零,并将一个称为计数初值a的整数先置入加1计数器,则当观察到TFx为1时表明已经加入了(2n - a)个脉冲,如此便能计算出脉冲的的到达数量了。

  • 如果上述脉冲信号时来自单片机的外部信号,则可通过这一方法进行计数统计,即可作为计数器使用
  • 如果上述脉冲信号是来自单片机内部的时钟信号,则由于单片机的振荡周期非常精准,故而溢出时统计的脉冲数便可换算成定时时间,因此可作为定时器使用

定时/计数器工作原理

在这里插入图片描述
系统时钟(系统内部振荡器)经12分频后的脉冲(即机器周期)(12分频为12除以频率)信号和来自外部引脚Tx的脉冲信号,通过逻辑开关 C / T ‾ \overline{T} T 的切换可实现两种功能:

  • C / T ‾ \overline{T} T =0 时为定时器方式
  • C / T ‾ \overline{T} T =1 时为计数器方式

根据上述原理,定时器方式下的定时时间 t可表示为:

t =(计数器满计数值 - 计数初值a)× 机器周期
= (2 n - a)× 12 f o s c \frac{12}{f _{osc} } fosc12

可见,t 与 n,a, f o s c f_{osc} fosc(时钟频率,MHz)3个因素有关,在时钟频率 f o s c f_{osc} fosc和计数器容量n一定的情况下,定时时间与计数初值有关,计数初值越大,定时时间越短。
同理,计数器方式下的计数值 N 可表示为
N = 计数器满计数值 - 计数初值 = 2 n - a

定时/计数器的结构


由上图可知,T0和T1分别由高8位和低8位两个特殊功能寄存器组成,即

  • T0由TH0(字节地址8CH)、TL0(字节地址8AH)
  • T1由TH1(字节地址8DH)、TL1(字节地址8BH)

定时/计数器的控制是通过两个特殊功能寄存器实现的,其中,

  • TMOD是定时/计数器的工作方式寄存器,由它确定定时/计数器的工作方式和功能

  • TCON是定时/计数器的控制寄存器,用于管理T0和T1的启停、溢出和中断

电路图

要求

D1~D8灯间隔1s闪烁

完整程序

#include<reg51.h>
unsigned char t;
void main()
{TMOD=0x01;//0000 00|01|  M1=0,M0=1,定时器T0模式1,16位计数器EA=1;//中断总允许ET0=1;//定时器T0的中断开关TR0=1;//启动定时器0while(1);
}
void timer() interrupt 1
{    //定时时间50000μs=(65536-a)×12/fosc   fosc=11.0592≈12//一个较大的数字分成两部分,分别存入定时器T0的高八位和低八位//8位最大能表示数字256,高8位和低8位一起可表示一个最大数字256256//括号内的结果除以256将整数存入定时器T0的高8位TH0//括号内的结果取余256将余数存入定时器T0的低8位TL0//TH0=(65536-50000)/256;//得到整数部分存入高8位	  60  0011 1100//TL0=(65536-50000)%256;//得到余数部分存入低8位	 176  1011 0000//2的16次方=65536 ,单位时间50000μs=50ms,2的8次方=256 ,(65536-50000)/256=60  (60)binary=0011 1100TH0=(65536-50000)/256;//定时器T0的高8位 //(65536-50000)%256=176   (176)binary=1011 0000 TL0=(65536-50000)%256;//定时器T0的低8位	t++;//如果t累加到20,则执行if语句(即t=20时表示1秒)	if(t==20) //20个50ms(定时时间)=1s{t=0;//t清零,以便进行下一次计数P1=~P1;//取反实现led的闪烁}
}

解释部分语句

TH0=(65536-50000)/256;
TL0=(65536-50000)%256;

如果你选的单片机的晶振一定,比如12MHZ来说吧,机器周期是1us,就是说每1us产生一次计数,就拿50ms来说,这是你想要的计时,意思是,对机器周期进行50000计数就可以得到我想要的,可T0是一个可以对机器周期能进行65536次计数,也就是说我想要的50MS不能让T0溢出,怎么办?那么先给这个定时器里面放些数,放多少,就是我们想要的50MS在加上一个多少就能等于65536,也就是65536和50000的差值,这个值就是我们说的初值。

为什么除以256,因为我们的计时器是两个8位组成的,那么要把那些差值装进这两个8位,那么低8位最多能装256个机器周期,那么256计满了就用高8位的,就是说低8位满一次高8位加1,那么高8位装多少,低8位就满了几次,算法就是用差值除一下256取其整数,剩下的,就是还剩了小于256次数的就放在低8位,就是差值的余数。如果我要放一个超过256的数,肯定是超过先放高八位,把剩下的部分放在低八位中了,TH0=(65536-50000)/256就是把TL0中放不下的部分放在THO中,再把剩下的部分放在TH0中。
该解释摘抄自:https://zhidao.baidu.com/question/172351721.html

效果图


http://chatgpt.dhexx.cn/article/XXiKHESF.shtml

相关文章

定时器同步

cube Gated Mode定时器同步 遇到的问题主从模式介绍&#xff08;参考&#xff09;解决方法定时器代码和开启代码 遇到的问题 在改造一块无刷电机电调时&#xff0c;遇到一些问题&#xff0c;其中就有&#xff1a;两个定时器分别是三个PWM的H和L驱动脚&#xff0c;当直接设置ti…

Linux定时器

原文&#xff1a;正点原子Linux驱动手册 Linux内核时间管理 系统时间管理需要一个硬件定时器提供时钟 &#xff0c;通常这个定时器时通用的&#xff0c;有利于系统移植。 像UCOS 或 FreeRTOS 一般使用 Systick 作为系统时钟源&#xff08;systick 是cortex-m 内核提供的定时器…

单片机定时器

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 一、定时器简介 C51中的定时器和计数器是同一个硬件电路支持的&#xff0c;通过寄存器配置不同&#xff0c;就可以将他当做定时器 或者计数器使用。 确切的说&#xff0c;定…

定时器使用

目录 一、定时器简单介绍 二、定时器的使用 三、定时器的实现 一、定时器简单介绍 定时器就相当于是闹钟 在网络编程中定时器非常关键的 比如浏览器浏览某个网页网卡了&#xff0c;浏览器就会转圈圈&#xff08;阻塞等待&#xff09;&#xff0c;这个等待不是无限等待&…

51单片机定时器/计数器(定时器中断)

51单片机定时器/计数器&#xff08;中断系统&#xff1a;定时器中断&#xff09; 实现功能 通过定时器终端控制LED灯 D1 间隔一秒闪烁 单片机型号&#xff1a;STC89C52 定时器介绍 1、51单片机定时器原理 定时器实质上就是一个加1计数器。它随着计数器的输入脉冲进行自加1&a…

定时器用法

在JavaScr中&#xff0c;定时器可以让我们在设定的时间间隔之后来执行代码&#xff0c;而不是在函数被调用后立即执行。而定时器分别有两种类型&#xff1a; 一次性定时器&#xff1a;仅在指定的延迟时间后触发一次。间隔性定时器&#xff1a;每隔一定的时间间隔就触发一次。 …

STM32定时器

目录 一 定时器的基本介绍 二 定时器的原理框图 1、定时器时钟 2 时基单元 3 捕获输入 4 PWM输出。 三 定时器的应用 1 定时器的基础定时计数功能 2 PWM比较输出 3 外部脉冲计数 a、外部触发输入&#xff08;ETR--外部时钟模式2&am…

SpringBoot定时器

SpringBoot定时器 1 介绍2 注解3 代码4 Cron表达式1. 格式2. 取值3. 特殊字符4. 经典案例 5 Cron既然那么麻烦就生成吧 1 介绍 定时器是一种控制任务延时调用&#xff0c;或者周期调用的技术。 作用&#xff1a;定时邮件、短信发送、更新数据、同步数据、检查数据库和缓存数据…

555定时器

555定时器 美国signetics公司1972年研制&#xff0c;取代机械式定时器&#xff0c;因为输入端有3个5k欧的电阻得名 电路结构 输入引脚 输出引脚 1.因为要接电容&#xff0c;电流较大&#xff0c;需要用oc门进行输出 2.需要接上拉电阻接vcc功能引脚 5号引脚对参考电压的影…

SysTick 定时器

11.1关于 SysTick 定时器 SysTick定时器(又名系统滴答定时器)是存在于Cortex-M3的一个定时器&#xff0c;只要是ARM Cotex-M系列内核的MCU都包含这个定时器。使用内核的SysTick定时器来实现延时&#xff0c;可以不占用系统定时器&#xff0c;节约资源。由于SysTick是在CPU核内…

JavaScript之定时器

定时器 一、 setTimeout() 定时器二、停止 setTimeout() 定时器三、setInterval() 定时器四、清除setInterval() 定时器五、电子时钟案例 在很多页面中&#xff0c;我们都可以看到一些倒计时或者和时间相关的效果&#xff0c;今天小熊将就JavaScript里面的倒计时做一概述。 首先…

STM32-通用定时器-定时器中断

1 STM32的定时器 STM32F103ZET6一共有8个定时器&#xff0c;其中分别为&#xff1a;高级定时器&#xff08;TIM1、TIM8&#xff09;&#xff1b;通用定时器&#xff08;TIM2、TIM3、TIM4、TIM5&#xff09;&#xff1b;基本定时器&#xff08;TIM6、TIM7&#xff09;。 …

Python——定时器

1.定时器 Timer定时器源码实现&#xff0c;和自定义一个线程方式一样&#xff0c;都是继承Thread类&#xff0c;重写了run()方法&#xff0c;只是实现的功能是延时执行一个函数或方法。 &#xff08;1&#xff09;线程定时器(Timer)解释&#xff1a; Timer类是Thread的子类&a…

[JavaEE]定时器

专栏简介: JavaEE从入门到进阶 题目来源: leetcode,牛客,剑指offer. 创作目标: 记录学习JavaEE学习历程 希望在提升自己的同时,帮助他人,,与大家一起共同进步,互相成长. 学历代表过去,能力代表现在,学习能力代表未来! 目录: 1.定时器的概念 2.标准库中的定时器 3.实现定时…

定时器的作用

一、简介。 在很多时候&#xff0c;我们设计网页时&#xff0c;为了某种表现形式&#xff0c;会使用到定时器这一功能&#xff0c;如&#xff1a;为了保证用户有仔细阅读我们的用户条款&#xff0c;我们会给确认按钮设置只有条款被打开&#xff0c;并超过5秒才允许点击。 二、…

定时器简介

文章目录 一.定时器基本介绍A.CPU时序B.定时器的原理 二.定时/计数器的相关寄存器A.定时器工作方式寄存器&#xff08;TMOD&#xff09;B.控制寄存器&#xff08;TCON&#xff09; 三.定时器的四种工作方式图解 一.定时器基本介绍 A.CPU时序 振荡周期&#xff1a;CPU外部晶振…

定时器基本常识

1.概念解读 1.1定时器和计数器&#xff0c;电路一样 1.2定时或者计数的本质就是让单片机某个部件数数 1.3当定时器用的时候&#xff0c;靠内部震荡电路数数 1.4当计数器用的时候&#xff0c;书外面的信号&#xff0c;读取针脚的数据 2.定时器怎么定时 定时器的本质原理&a…

定时器详解

1. 什么是定时器&#xff08;timer&#xff09; 定时器实际上就是Soc当中的一个内部外设。 &#xff08;1&#xff09;定时器与计数器 定时器常与计数器扯到一起&#xff0c;计数器也是soc当中的一个内部外设&#xff0c;计数器顾名思义是用来计数的&#xff0c;就和我们的秒…

定时器(Timer)

一、定时器是什么&#xff1f; 定时器类似于我们生活中的闹钟&#xff0c;可以设定一个时间来提醒我们。 而定时器是指定一个时间去执行一个任务&#xff0c;让程序去代替人工准时操作。 标准库中的定时器: Timer 方法作用void schedule(TimerTask task, long delay)指定dela…

STM32-定时器详解

目录 前言 一、定时器基本介绍 1. STM32定时器 2. 通用定时器功能和特点 3. 计数器模式 4. 定时器工作原理 a.定时器框图 b.时钟产生器部分 c.时基单元 d.输入捕获通道 e.输出比较通道&#xff08;PWM&#xff09; 二、定时器中断应用 1.内部时钟选择 2.计数器模式 …