0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

08_51入门_定时器中断

天才小狸花 来源:Sigle_chip 作者:Sigle_chip 2022-09-13 10:38 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

在程序运行中,我们有着去定时运行某一功能的需求,或许1s、或许0.5s。如果使用delay函数,必然导致会使得其他任务阻塞。使用定时器对于程序的精准计时有着很大作用,获取去达到计时的目的,也可以使用定时器,如超声波的测距方式。

我们生活中采用秒等单位作为生活中的基本单位,而秒的详细定义为

铯-133原子位于海平面处于非扰动基态时两个超精细能级间跃迁对应的辐射频率ΔνCs以Hz(即等于s-1)为单位表达时选取固定数值9192631770倍来定义秒

其铯-133原子的辐射频率的9192631770为1s

时钟

单片机内部当然不可能使用铯原子作为计时的时钟源,通常是采用石英晶振制成的一种谐振器件,其时钟频率为其固有属性,只受到自身影响。

通过与51单片机的XTL1和XTL2引脚构成一个皮尔斯振荡器,通过内部时钟电路的整形调整,向单片机提供稳定的时钟频率。若为有员晶振直接将时钟引脚接到XTL1引脚。

常用于单片机的晶振频率有11.0592MHz,12MHz等,为什么会有11.0592这么特殊的晶振频率呢,这涉及到通信的问题,这里暂不引入。

12MHz表示以Hz(即等于s-1)为单位表达时选取固定数值12000000倍为1s。

当然,如果我们使用计数器模式,时钟源便为外部引脚的电平变化,分别是连接51单片机的 P3.4 P3.5两个口。

周期

时钟周期

其时钟周期是指振荡源的周期,定义为时钟脉冲的倒数。

外部晶振12M
则时钟周期为 1s/12M= 1S/12 000 000 = 1/12us

外部晶振11.0592M
则时钟周期为 1s/11.0592M = 1S/11 059 200 = 1/11.0592us

外部晶振24M
则时钟周期为 1s/24M= 1S/24 000 000 = 1/24us

机器周期

机器周期,是指执行一单位指令所需要的时钟周期个数。

机器周期也称为CPU周期。
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。
一般情况下,一个机器周期由若干个时钟周期组成。如 1T,就表示,需要 1个时钟周期; 12T即为 12个时钟周期。这些都只是
一单位指令的时间(如自增、自减等),多单位指令时间进行倍乘(如赋值语句需要2个机械周期,即乘以2倍),
传统的8051单片机就是12T的,即完成1个单位指令所需时间为12个时钟周期。 1T的完成1个单位指令所需时间则为1个机器周期。

传统的8051使用12Mhz晶振的机器周期是,1T的要比12T的速度更快,而STC89C51RC系列支持6T模式,相当于速度翻倍。

1T 12Mhz的机器周期为1/12us
12T 12Mhz的机器周期为1us

指令周期

CPU完成一条指令的时间叫指令周期

一般一条完整的指令包括:取指周期、间址周期、执行周期、中断周期。

寄存器

在使用定时器时,我们需要对定时器/计数器的初始化。

第一步,开中断,对IP和IE赋值。

第二步,配置模式,对TMOD赋值。

先确定定时器还是计数器,TMOD中有相应的控制位 [ C/T ]来选择T0或T1为定时器还是计数器.

在将控制位GATE打开,最后配置模式位M0,M1,两位可配置4种模式。

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

定时器/计数器的核心部件是一个加法(也有减法)的计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:
如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每12个时钟得到一个计数脉冲,计数值加1;
如果计数脉冲来自单片机外部引脚(T0为P3.4,T1为P3.5),则为计数方式,每来一个脉冲加1。

由于8051单片机为8位单片机,寄存器最多为8位,计数周期太小。

通过两个寄存器组成16位寄存器(实际还是俩),其16位最多可计时 216个机器周期,12T,12Mhz下为 65,535us。

当开启定时器后,16位计时器每个机器周期值自加,全为1时触发中断,执行中断程序,根据是否在使用定时器再将值写入16位寄存器,学习单片机嵌入式,元器件有需求可以去唯样商城看看,学生还有优惠哦。

初值计算

TL表示低8位。TH表示高八位。

其值为

0XFFFF -(初值(单位:s)/1s)*(晶振频率/12)

其初值计算可用相应的工具,如STCISP就自带计算,但我们要理解其相应的工作方式。

审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6074

    文章

    45361

    浏览量

    664396
  • 定时器
    +关注

    关注

    23

    文章

    3361

    浏览量

    121889
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32L083的基本定时器

    CW32L083 内部集成 3 个基本定时器 (BTIM),每个 BTIM 完全独立且功能完全相同,各包含一个 16bit 自动重装 载计数并由一个可编程预分频驱动。BTIM 支持定时器
    发表于 12-15 06:23

    什么是自动唤醒定时器

    CW32F030 内部集成 1 个自动唤醒定时器 (AWT),AWT 包含一个 16bit 向下计数,并由一个可编程预分频驱动。AWT 可选 5 种计数时钟源,可工作于定时模式或计
    发表于 12-11 07:24

    CW32通用定时器—输出比较

    计数溢出,这个事情会触发一个中断,被叫做定时器溢出中断,也就是说,定时器依靠对稳定的时钟源定次数计数来实现定时,并且每一个
    发表于 12-11 06:45

    【乾芯QXS320F开发板试用】定时器中断

    CPUTimer_enableInterrupt(CPUTIMER0_BASE);// 设置定时器中断 CPUTimer_startTimer(CPUTIMER0_BASE); // 开启定时器
    发表于 12-09 16:56

    CW32定时器中断介绍

    载计数并由一个可编程预分频驱动。BTIM 支持定时器模式、计数模式、触发启动模式和门控模式 4 种工作模式,支持溢出事件触发中断请求
    发表于 12-01 07:08

    单片机定时器中断

    51单片机内部共有两个16位可编程的定时器/计数,即定时器T0和定时器T1。它们既有定时功能又
    发表于 11-24 06:22

    PWM、定时器、SysTick 区别及应用场景

    。下面我们来梳理清楚。一、基本概念定时器(Timer)MCU内最基础的计数外设,通过计数时钟周期实现定时、计数功能。多数MCU内部有多个通用定时器,可配置为定时中断
    的头像 发表于 11-17 10:53 273次阅读
    PWM、<b class='flag-5'>定时器</b>、SysTick 区别及应用场景

    cs32a010定时器的问题

    按照例程写了定时器的初始化,还是无法进入中断 比较奇怪我使用定时器为什么要用输入捕获? 还有周期是否该设为x-1?
    发表于 11-06 10:49

    SysTick系统滴答定时器简介

    SysTick—系统定时器是属于CM33内核中的一个外设,内嵌在NVIC中。系统定时器是一个24bit的向下递减的计数,计数每计数一次的时间为 1/SYSCLK,一般我们设置系统时
    的头像 发表于 09-23 09:50 1369次阅读
    SysTick系统滴答<b class='flag-5'>定时器</b>简介

    大彩讲堂:VisualHMI-LUA教程-定时器的使用指南

    定时器的使用
    的头像 发表于 08-31 16:59 885次阅读
    大彩讲堂:VisualHMI-LUA教程-<b class='flag-5'>定时器</b>的使用指南

    stm32H743定时器溢出的原因?怎么解决?

    我利用定时器更新中断实现软件计时,定时时间是固定的按照{10ms, 20ms,650ms, 50ms,50ms}周期性进行的。由于下一次的计时时间是需要在定时器
    发表于 06-23 08:26

    第十二章 SysTick——系统定时器

    本章介绍了W55MH32的SysTick系统定时器,它是24位递减计数,含4个寄存,可配置定时中断,用于产生时基 等。
    的头像 发表于 05-22 17:16 856次阅读
    第十二章 SysTick——系统<b class='flag-5'>定时器</b>

    MCU定时器/计数

    RISC-V核低功耗MCU通过灵活的定时器架构、低功耗模式适配及硬件级中断优化,在工业控制、智能家居等场景中实现高精度计时与能耗控制的协同设计,满足复杂任务调度与实时响应的双重需求‌。 一、‌硬件
    的头像 发表于 04-27 13:54 609次阅读

    STM32G474HRTIM使用HRTIM配置了主定时器中断,为啥调试的跳转到硬件中断,进不去定时器中断,为什么?

    各位大佬,我使用HRTIM配置了主定时器中断,为啥调试的跳转到硬件中断,进不去定时器中断 下面是我的初始化代码
    发表于 03-13 08:17