🚩write in front🚩
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
🔎大家好,我是泽奀,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^星级博主~掘金⇿InfoQ创作者~周榜34»总榜1889🏅
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩
🍊定时器介绍
51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部进行完成的。这个其实就是我们前面之前玩的那些硬件就是,比如说独立按键以及数码管和LCD1602 的这些硬件实际上都是单片机的 IO 口进行控制的一个外设,就像我们单片机都是实实在在的设备。但是我们这个定时器呢?虽说也是一个实在的电路,但这个电路都是在 MCU 单片机的电路内部进行完成的。就是说我们这个单片机 STC89C52 芯片给拿走。而光有这个单片机就可以实现定时器的这个功能,这个定时器就是属于单片机的一个内部资源。
拓展→MUC:微控制单元,又称单片微型计算机或者单片机,是把中央处理器的频率与规格做适当缩减,并将内存、计数器、USB、A/D转换、UART、PLC、DMA等周边接口,甚至LCD驱动电路都整合在单一芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。
🍏定时器作用如下↓
Ⅰ 用于计时系统,可实现 软件计时,或者使程序每隔一固定时间完成一项操作。
Ⅱ 替代长时间的 Delay() ,提高 CPU 的运行效率和处理速度,当然还有其它的一些用途。
🍏软件定时
软件定时器是用程序模拟出来的定时器,可以由一个硬件定时器模拟出成千上万个软件定时器,这样程序在需要使用较多定时器的时候就不会受限于硬件资源的不足,这是软件定时器的一个优点,即数量不受限制。
但由于软件定时器是通过程序实现的,其运行和维护都需要耗费一定的CPU资源,同时精度也相对硬件定时器要差一些。
🍏⒉种寄存器
单片机里面,共有两种寄存器,第一种是ROM,第二种是RAM。
⒈ROM的功能⇢ROM的数据在程序运行的时候是不容改变的,除非你再次烧写程序,他就会改变,就像我们的书本,印上去就改不了了,除非再次印刷,这个就是ROM的原理。
⒉RAM的功能⇢RAM就是在程序运行中,数据会随时改变的,就像我们的黑板,写上了可以擦,擦完再写上去,相当于程序运行的时候,调用ROM里面的数据进行各种运算。
🍎STC89C52定时器资源
定时器个数一共有3个(T0、T1、T2)
传统(英特尔)的 51 单片机的内部有 T0 和 T1 这两个定时器,T2 是此型号单片机增加的资源。注:T 就是 Timer (计数器) 的缩写,现在很多的单片机还会增加额外的定时器。
定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0 和 T1 的操作方式是所有 51单片机 所共有的。
注:对于单片机的每一个功能模块来说,都是由它的 SFR ,也就是 特殊寄存器 来控制的。
🍅定时器框图
定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号『注:这个闹钟是有一个时钟给它提供一个脉冲的计数脉冲』。每隔 "一秒" (这每隔一秒是相当于小闹钟每隔一秒走一格的,但我们这个定时器不是每隔一秒是每隔一个固定的时间段),计数单元的数值就增加一,当计数单元数值增加到 "设定的闹钟提醒时间" 时 (就是当我们闹钟加①加①之后加到最大值的时候,最后会拥有一个设定的闹钟,那么在这个51单片机里面就是设定的最大值),计数单元就会向中断系统发出中断申请 (中断系统其实也是51单片机的内部资源,那么中断系统其实就是一个消息提醒的一个机制"就相当于别人打断了你"),产生 "响铃提醒" ,使得程序跳转到中断服务函数中执行!
🍅拓展→中断系统是为了使CPU具有外界紧急事件的实时处理能力而进行设置的。
🍊定时器的工作模式
STC89C52 的 ****T0 和 T1 均有 ④ 种工作模式↓
编辑
- 模式0→13位定时器/计数器。
- ★模式1→16位定时器/计数器,这个是最常用的一个模式。
- ★模式2→8位自动重装模式,这个算是第二个最常用的一个模式。第二种模式主要用于串口通信产生波特率来用的『在电子通信领域,波特(Baud)即调制速率,指的是有效数据讯号调制载波的速率,即单位时间内载波调制状态变化的次数』
- 模式3→两个8位计数器。
由于这里模式一是最常用的一个模式,那么接下来我们就来详细讲解下模式一的工作模式。
编辑★ 如上图形所示是:工作模式①当中的框图
编辑
Ⅰ如上图所示:这一段是给定时器提供时钟时间的。
编辑
Ⅱ 如上图所示:这一段是属于这个它的计数系统。
Ⅲ 如上图所示:这一段是属于它的一个中断,其实中断后面还有电路。
🍅计数器流程如下↓
那么接下来主要说说这个计数系统是怎么样进行的一个流程。
⒈『定时系统是怎么计数的』TL0 和 TH0,其实这个是一个十六位的一个计数器**。在这个里面它拥有一个计数系统,高字节叫做 TH,低字节叫做 TL,0 代表的是定时器 0,这两个字节总共可以计数到 65535 ,注⇢定时器只能从 0~65535,到 65535 你想让它接下来继续往后面的话,它是不可以的(已经是最大的数字了)
⒉**『那么这个计数系统如何工作』计数系统的左边的时钟给了它提供了一个脉冲(方波),每来一个脉冲它的定时器的值就会加 1,一直这样循环往复的话。当加到 65535 的时候,那么再下一个脉冲的时候它就会产生一个溢出**,溢出的时候这个计数器就会到原来0的一个位置(因为65535加1的时候它就会回到0的位置)。所以,当它溢出的时候会掷出一个标志位。『TF0→标志位』,拥有了这个标志位它就会想中断系统进行申请中断,主要就是靠上述所说的功能来进行实现,这也是它的一个工作机制。
🍎TR0
编辑
如上图所示是属于计时系统的 控制位,用来 控制时钟。
TR0 控制定时器的启动是不是暂停,包括其它的都是控制额外的附加的功能。当TR0等于1的时候就是开始计数。
🍅定时器时钟
SYSclk⇢系统时钟,即晶振周期,本开发板上的晶振为 12 或 11.0592 MHz,MCU in 12T mode 进行 1MHZ 的一个分频,每隔 1us 进行一次计数,当它为最大值的时候就会产生一次的中断。频率公式 f = 1 / T,12 = 1 / T,例如:50=1 / T,算出来T=0.02秒,也就是50hz。的频率下振动一次需要0.02秒,以HZ为单位,T以秒(s)为单位。
分频→它会把12T的这个模式进行分频输出1MHZ。
拓展秒换算如下↓
1MHZ=1000 000HZ
1KHZ=1000HZ1KHz = 103Hz 1MHz = 103KHz 1GHz = 103MHz 1THz = 103GHz
1秒(s) =1000毫秒(ms)
1毫秒(ms)=1000微秒 (us)
1微秒(us)=1000纳秒 (ns)
1纳秒(ns)=1000皮秒 (ps)
1千赫 (kHz 103 Hz) = 1 000 Hz;
1兆赫 (MHz 106 Hz) = 1 000 000 Hz;
1吉赫 (GHz 109 Hz) = 1 000 000 000 Hz;
1太赫 (THz 1012 Hz) = 1 000 000 000 000 Hz;
T0 pin ⇢ 单片机外部上的一个接口,时钟可以由系统时钟来进行提供也可以由外部的引脚来进行提供。当它由外部引脚来进行一个提供的话。我们的定时器其实就是一个计数器,因为外部引脚每次来一个脉冲它就会进行一个加1的操作,就相当于是计脉冲的一个计数器。
所以,我们可以看到这个时钟有两个来源 系统时钟、外部的引脚(不是很常用)
编辑
如上图所示:这是一个选择开关,C = Count(计数) ,T = Timer(计时器) ,C = 1、T = 0,如果这一位给 1 就链接到 T0 pin ,给 0 的话就是连接到 SYSclk。