51单片机硬件定时器设定的初值问题

2023-12-16 08:08

本文主要是介绍51单片机硬件定时器设定的初值问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网上查了很多解释关于51单片机硬件定时设定的文章,发现说的不是特别透彻,可能大家觉得一些类似基本感念的问题就不用澄清了,所以对于我这样的入门小白理解起来有些障碍,这里我把自己的理解解释的细致多一些,希望能给同道中人一些帮助。

说到定时前需要澄清几个概念:震荡周期,状态周期,机器周期,指令周期。(学习什么知识概念必须掌握清楚,否则就“糊”了!)

震荡周期:(来自百度百科)在单片机系统中,定时器需要借助单片机内部提供的脉冲进行定时,此时,定时的依据是CPU提供的周期性振荡,振荡一次所需的时间称为振荡周期。单片机系统也可以通过外部晶体振荡器(也被称为晶振)提供振荡进行工作。

对于震荡周期的理解:计算机系统中通常需要同时处理多个任务,想要协调这些任务,就必须在制定一个时间基准。电影里有这么一个场景:在执行一项特殊任务前,特种部队的每个成员需要“对表”,其实就是这个道理。因为这个时间基准是最基本的时间依据,所以它的周期是最短的,频率是最快的(周期和频率的概念请大家自行学习),同时也是最小的时间单位。为了产生这个震荡周期的时间基准,人们使用两种方法,一种是采用CPU内部的基础电路(比如LC振荡电路)实现,另外一种是采用晶体(石英)本身的物理特性实现,采用外部晶振比采用CPU内部基础电路可以提供更加准确、稳定的时间基准。

物理指标:振荡频率 f_osc,单位MHz(兆赫兹),f 是英文 frequency(意为频率)的首字母,osc是英文oscillation(意为震荡)的首字母。 f_osc就指的是晶振的振荡频率,晶振做好后这个频率就固定了。现实中,会根据需要制作拥有不同频率的晶振,比如常用的有12MHz的晶振,还有11.0592MHz。

震荡周期的计算:震荡周期为震荡频率的倒数,例如晶振的 f_osc 为12MHz,震荡周期 T=\frac{1}{12\times10^{6}}=\frac{1}{12}\times10^{-6}秒,可见是一个非常短的时间。

状态周期:网上貌似没有十分明确的解释,这里我也不瞎编了,参考其他博主的解释我理解是CPU执行一次动作所需的时间,比如CPU执行读寄存器、写寄存器这些动作时就要改变状态,可以参考《汇编语言》中对微机执行指令的介绍。

记住一个状态周期=2个震荡周期。

机器周期:我理解是CPU执行一个“任务”所需的单位时间,可以对照状态周期中解释过的“动作”的概念,一个“任务”是由若干次“动作”组成的。以51单片机为例,一个机器周期包括了6个状态周期,即12个震荡周期,此时会发现如果使用12MHz的晶振,机器周期就是1微秒(妙啊!)。其实晶振的设计是根据计算机硬件执行“任务”或者“动作”这些“固定”时间进行设计的。

指令周期:就是CPU执行一条指令所需要的的时间,即1~4个机器周期。

有了以上这些概念再说定时器的初值设定就会理解了。

说到定时器,也可以说是计数器,在硬件上就是一组8位或者16位的寄存器,既然位数是有限个,就存在计时的时候超出范围的问题,被称为“溢出”。由此这些寄存器之外又设置了一个单独的内存空间来判断计时器工作时是否超出范围,这个单独的内存空间被称为“溢出标志寄存器”,溢出后“标志寄存器”由0变为1,计时器的各个位返回0,就像一个人在操场上长跑,跑完一圈又回到原点,但是自己心里数着已经跑过的圈数。

对于51单片机,当计时器溢出时,触发中断(中断的概念请自行学习),执行中断程序。正是这个机制,可以使我们对计算机设定一个我们需要的时间,在这个时间计时完毕后执行我们需要的一些任务,这些任务可以写在中断程序当中。

当使用8位计时器时,溢出的最大值为2的8次方,即256,就是说计时器从0开始计数,再回到0,一共数了256次。对于16位计时器来讲,从0开始计数到溢出时一共数了65536次。以8位计时器为例,如果我们需要计时器计数10次后产生中断,我们需要计时器从256-10=246开始计数,如果我们需要计时器计数100次后产生中断,我们需要计时器从256-100=156开始计数,其中246和156就是这篇文章所要解释的“初值”。因此如何设定初值,取决于我们想要计时器数过多少数,这个“数过多少数”就是我们需要的“计数次数”。对于16位寄存器,它是由“高8位寄存器”和“低8位寄存器”一起组成的,所以设置初值时需要分别设置这两个寄存器。

如果我们把“计数次数”和“时间”建立起联系,就可以实现真正的“计时”而不是“计数”了,51单片机的计时器每记一个数所需要的的时间就是一个机器周期!即1微秒(这里用外部12MHz晶振,采用12分频),所以对于8位计时器,从0开始经过256微秒后溢出,对于16位计时器,从0开始经过65536微秒后溢出。当我们需要1毫秒后计时器溢出而执行中断时,采用16位寄存器进行的时间计算就是65536-1000=64536,初值就是64536。

以上是我对计时器与中断机制的粗浅理解,如果有误,请斧正。

这篇关于51单片机硬件定时器设定的初值问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/499760

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

【STM32】SPI通信-软件与硬件读写SPI

SPI通信-软件与硬件读写SPI 软件SPI一、SPI通信协议1、SPI通信2、硬件电路3、移位示意图4、SPI时序基本单元(1)开始通信和结束通信(2)模式0---用的最多(3)模式1(4)模式2(5)模式3 5、SPI时序(1)写使能(2)指定地址写(3)指定地址读 二、W25Q64模块介绍1、W25Q64简介2、硬件电路3、W25Q64框图4、Flash操作注意事项软件SPI读写W2

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

代码训练营 Day26 | 47.排序II | 51. N-皇后 |

47.排序II 1.跟46题一样只不过加一个树层去重 class Solution(object):def backtracking(self,nums,path,result,used):# recursion stopif len(path) == len(nums):# collect our setresult.append(path[:])return for i in range(

【Qt】定时器事件

定时器事件 在之前学习QTimer中实现了定时器的功能,而在QTimer背后是QTimerEvent定时器事件进行支撑的。在QObject中提供了一个timeEvent这个函数。 startTimer启动定时器killTimer关闭定时器 Qt 中在进⾏窗⼝程序的处理过程中,经常要周期性的执⾏某些操作,或者制作⼀些动画效果,使⽤定 时器就可以实现。所谓定时器就是在间隔⼀定时间后,去执⾏某⼀

独立按键单击检测(延时消抖+定时器扫描)

目录 独立按键简介 按键抖动 模块接线 延时消抖 Key.h Key.c 定时器扫描按键代码 Key.h Key.c main.c 思考  MultiButton按键驱动 独立按键简介 ​ 轻触按键相当于一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通与断开。  ​ 按键抖动 由于按键内部使用的是机

基于stm32的河流检测系统-单片机毕业设计

文章目录 前言资料获取设计介绍功能介绍具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机设计精品

VB和51单片机串口通信讲解(只针对VB部分)

标记:该篇文章全部搬自如下网址:http://www.crystalradio.cn/thread-321839-1-1.html,谢谢啦            里面关于中文接收的部分,大家可以好好学习下,题主也在研究中................... Commport;设置或返回串口号。 SettingS:以字符串的形式设置或返回串口通信参数。 Portopen:设置或返回串口

机器视觉硬件选型根据某项目相机镜头

一 项目总需求 1、大视野检测需求: (1)大视野: ①产品尺寸15.6寸屏幕,产品大小:350mm x 225mm; ②产品料盘尺寸大小:565mm x 425mm; ③工作距离:880mm;检测精度:500μm; 1、大视野检测需求: (1)大视野: ①产品尺寸15.6寸屏幕,产品大小:350mm x 225mm; ②产品料盘尺寸大小:565mm x 425mm; 工作距离: