登录/注册

单片机定时器

更多

好的,我们用中文来详细讲解单片机的定时器/计数器

简单来说,单片机定时器(Timer/Counter)是其内部一个非常重要的独立硬件单元,核心功能是进行精准的“计数”,并根据计数值实现“定时”或对外部事件进行“计数”

? 核心概念解释

  1. 本质是计数器:

    • 定时器的核心是一个计数器寄存器。它可以按照一定的规律自动递增或递减(通常是递增)。
    • 计数器的“数”可以来源于两个地方:
      • 内部时钟信号(用于定时): 接收来自单片机系统时钟(或者经过分频的系统时钟)的信号作为计数脉冲。计数器的每一次计数,代表一个固定时间间隔(如1个时钟周期)
      • 外部引脚信号(用于计数): 接收从单片机特定外部引脚输入的电平变化信号(如上升沿或下降沿)。计数器记录的是这个引脚上发生的事件(跳变)次数
  2. 定时 (Timing):

    • 当计数器使用内部时钟源进行计数时,由于这个时钟频率非常精准且固定,就可以实现计时功能。
    • 如何定时? 设定计数器的初始值和一个目标溢出值
      • 当计数器从初始值开始计数值(比如x)累加到超过最大值(称为溢出)时,会触发一个中断信号或者设置一个标志位
      • 计数器溢出所需要的时间 = (计数器最大值 - 初始值 + 1) * 计数脉冲周期
      • 通过精确设定初始值x,就能得到需要的定时时间。例如,计数脉冲周期是1微秒,想要定时1毫秒(1000微秒),就需要让计数器计1000次,那么初始值可设为 最大值 - 1000
    • 应用: 产生精确的延时(如延时1秒)、周期性的操作(如每10毫秒检测一次按键、每1毫秒刷新一次显示)、测量输入信号的时间(如脉冲宽度测量)。
  3. 计数 (Counting):

    • 当计数器使用外部引脚输入的信号进行计数时,它就是用来计量外部事件发生的次数
    • 应用: 计量旋转编码器的转动脉冲数、测量输入信号的频率或周期(需要配合定时器)、计算产品的通过数量。

? 定时器/计数器的主要组成部分和工作要素

  1. 计数器寄存器 (TCNTn):

    • 核心部分,实际进行加/减计数的寄存器。用户通常可以读写它的值(读取当前计数、写入初始值)。
  2. 预分频器:

    • 位于系统时钟源和计数器输入之间,用于降低计数脉冲的频率
    • 作用: 极大地扩展定时时间范围。如果不分频,时钟频率很高,计数器很快会溢出,难以实现长时间的定时(比如1秒)。分频后,计数脉冲变慢,达到相同计数次数需要的时间更长。分频系数通常是2、4、8、16、32、64、128、256等。
  3. 控制寄存器 (TCCRn):

    • 用户通过这个寄存器配置定时器的工作模式:
      • 选择时钟源(内部、外部?哪个引脚?边沿?)。
      • 设置预分频器的分频系数。
      • 选择工作模式
  4. 输出比较寄存器 (OCRn) 和输出比较功能:

    • 当计数器值达到设定在OCRn寄存器中的值时:
      • 可以产生比较匹配中断
      • 可以自动控制相关的输出引脚 (OCn) 翻转电平或置位/清零。这是实现PWM(脉冲宽度调制) 输出和精确输出波形的核心。
      • 应用(PWM): LED亮度调节、直流电机速度控制、舵机角度控制、产生音频信号等。
  5. 输入捕获寄存器 (ICRn) 和输入捕获功能:

    • 当指定的外部引脚上发生特定的边沿事件(上升沿、下降沿或双边沿)时,当前的计数器值会被瞬间“捕获”并保存ICRn寄存器中,同时可以产生中断。
    • 应用: 精确测量外部输入信号的脉冲宽度占空比周期频率
  6. 溢出/中断逻辑:

    • 当计数器溢出(从最大值变回0)或发生输出比较匹配发生输入捕获事件时:
      • 会设置对应的状态标志位,反映发生了某个事件。
      • 可以触发中断请求,让CPU执行相应的中断服务程序 (ISR) 来处理事件(重载计数器初值、处理采集的数据、执行特定任务等)。
  7. 工作模式(常见):

    • 正常模式 (Normal / Overflow): 最基本模式。计数器不断计数,从0到最大值(如0xFFFF)然后溢出回到0。
    • 比较匹配清零模式 (CTC - Clear Timer on Compare match): 计数器加到与OCRn设定的值相等时,自动清零并产生匹配中断。可产生固定频率的方波。
    • 快速PWM模式 (Fast PWM): 计数器加到最大值溢出清零。在加计数过程中,当计数器的值小于OCRn值时,输出引脚为高(或低);大于等于时翻转。用于高频PWM。
    • 相位修正PWM模式 (Phase Correct PWM): 计数器先加后减。计数方向改变时或计数过程达到比较值时可能改变输出。频率比Fast PWM低,但分辨率更高,波形对称性好。
    • 外部事件计数模式: 用于对外部引脚输入的脉冲计数。

? 使用定时器的基本步骤(编程角度)

  1. 初始化配置:
    • 通过配置控制寄存器 (TCCRn) 来:
      • 选择工作模式(如Normal, CTC, Fast PWM)。
      • 配置时钟源和预分频系数(决定计数频率或定时时间范围)。
      • 配置输出和输入功能(如比较输出模式、输入捕获触发边沿)。
      • 禁用计数器(在完全配置好之前)。
  2. 设定寄存器初始值(可选):
    • 计数器寄存器 (TCNTn) 写入期望的初始值(用于定时)。
    • 输出比较寄存器 (OCRn) 写入比较值(用于产生输出或CTC定时)。
  3. 设置中断(如果需要):
    • 中断屏蔽寄存器(通常叫 TIMSK 等)中,使能所需的中断源(溢出中断、比较匹配中断、输入捕获中断)。
    • 在程序的总中断使能位设置好后,编写对应事件的中断服务程序 (ISR)
  4. 启动定时器:
    • TCCRn 寄存器中设置正确的预分频系数(即非0值),定时器即开始计数。
  5. (中断服务中) 处理事件:
    • 溢出中断服务程序中:通常需要手动重载计数器初始值
    • 比较匹配中断服务程序中:执行需要在精确时间点执行的代码(如果需要精确间隔输出,在CTC模式中也可能需要重载初始值)。
    • 输入捕获中断服务程序中:读取输入捕获寄存器 (ICRn) 的值,这是捕获事件发生时计数器的值。结合两次捕获值可以计算时间差(如脉冲宽度)。

? 总结与应用场景

? 举个简单例子(定时器实现LED闪烁)

  1. 配置定时器工作在Normal模式,预分频系数选择64,系统时钟8MHz -> 计数频率 = 8MHz/64 = 125KHz -> 计数周期T=8微秒。
  2. 计算500ms需要计数次数 = 0.5s / 8μs = 62500次。
  3. 计数器最大值是65535,设置初始值x = 65535 - 62500 + 1 = 3036
  4. 配置允许定时器溢出中断。
  5. 启动定时器(设置预分频系数为64)。
  6. 当计数器溢出时(从65535到0),进入中断服务程序:
    • 切换LED引脚状态(开变关,关变开)。
    • 关键: 重新给计数器寄存器TCNTn写入初始值3036,以保证下一次溢出也是500ms后。
    • 清除中断标志(有些单片机自动清除)。
  7. 这样,每500ms,LED状态翻转一次,形成周期为1秒(500ms亮+500ms灭)的闪烁。

理解好定时器的工作原理和配置方法,是掌握单片机应用开发的关键一步!希望这个中文解释对你有所帮助!?

简述单片机定时器的工作原理

单片机定时器的工作原理是一个复杂而精细的过程,它涉及到单片机内部的多个组件和机制。

2024-08-19 18:20:33

单片机定时器的用法

本章以CW32通用定时器为例介绍单片机定时器的用法。

2024-01-04 10:37:43

51单片机定时器定时1秒程序流水灯结果分析

51单片机是一种广泛应用的嵌入式微控制器,具有高性能、低功耗、易扩展等优势。在实际应用中,定时器常用于

2023-12-26 14:57:57

51单片机——定时器的原理和使用

定时器的原理1.cpu时序的有关知识震荡周期:为单片机提供定时信号的震荡源的周期(由外部的晶振)状态周期:2个震荡周期,用s表示机械周期 6个状

资料下载 李霞 2021-11-10 18:50:59

使用单片机实现定时器的程序免费下载

  本文档的主要内容详细介绍的是使用单片机实现定时器的程序免费下载。

资料下载 佚名 2020-06-05 17:35:51

单片机定时器的程序免费下载

本文档的主要内容详细介绍的是单片机定时器的程序免费下载。

资料下载 佚名 2019-08-30 17:28:24

STC单片机定时器设置入门资料和STC89C52RC单片机定时器示例代码

 STC单片机定时器设置 STC单片机定时器的使用可以说非常简单,只要掌

资料下载 1123127317 2019-08-22 17:30:00

使用定时器需要设置的寄存和51单片机定时器的示例代码说明

51单片机共有两个定时器,T0与T1,包含计数和定时两种模式,使用定时器

资料下载 张国厚 2019-08-07 17:33:00

单片机定时器中断应用案例

定时器中断,顾名思义就是在规定的时间内发送中断请求,要实现定时器中断,单片机需要能够正确地计算时间,

2023-10-31 14:49:58

51单片机定时器讲解

前面我们讲解了通用IO输入输出,延时函数和外部中断,今天我们讲解单片机另一个重要的功能,定时器。顾名思义,定时器就是用来

2023-07-14 16:22:14

51单片机编程开发之定时器定时器中断概述

定时/计数器从电路上来讲是一个脉冲计数器,当计数脉冲来自于单片机内部机器

2023-05-24 15:13:49

单片机定时器驱动

RD8Tx单片机定时器闪灯程序。

2023-04-23 09:16:43

单片机软件定时器的实现方法

目前市面上的单片机基本都带有硬件定时器功能,单片机应用程序开发中也经常会用到定时器

2023-01-17 15:14:59

基于单片机定时器的设计方法

用单片机实现一个定时器只要对单片机里的特殊寄存器进行设置就可以实现了,下

2020-11-02 16:58:03

单片机定时器赋初值的方法解析

8位的定时器最大可计数2的8次方为256,16位的定时器最大可计数2的16次方为65536。由于单片机的

2019-11-13 16:28:18

7天热门专题 换一换
相关标签