首页 > 其他分享 >Timer(定时器)

Timer(定时器)

时间:2024-09-06 09:14:36浏览次数:7  
标签:定时器 16 中断 Timer TIM 模式 时钟

定时器介绍

  是一个内设计时装置,到时间就会触发中断,   STC8内设有5个16位定时器,timer0~timer4,当定时器数到65536(2^16)时触发中断   timer0有4种工作模式:模式0(16位自动重装载模式),模式1(16位不可重装载模式),模式2(8位自动重装模式),模式3(不可屏蔽中断的16位自动重装载模式)   timer1有3种工作模式:模式0(16位自动重装载模式),模式1(16位不可重装载模式),模式2(8位自动重装模式),timer1在模式 3时无效,停止计数。   timer2的工作模式固定为16位自动重装载模式。timer2可以当定时器使用,也可以当串口的波特率发生器和可编程时钟输出。   timer3、timer4与timer2一样,它们的工作模式固定为16位自动重装载模式。timer3、timer4 可以当定时器使用,也可以当串口的波特率发生器和可编程时钟输出。

时钟周期

  时钟周期是系统时钟一个完整的周期所需的时间。它的倒数就是时钟频率,即每秒钟发生的时钟周期数。STC8H的时钟频率为24MHz,   1s / 24MHz,1000 000 000ns / 24 000 000 = 41.67ns

机器周期

  也叫做指令周期。指令周期是一条指令的执行时间。现在的STC8H可以有两种配置,一个是1T,一个是12T   1T也就是处理一条指令的时间为1个时钟周期,为41.67ns,12T也就是处理一条指令的时间为12个时钟周期,为12 * 41.67ns

原理

  已知STC8单片机使用的是16位的定时器/计数器,计数范围是0-65535,当16位全部存1之后再计数1,就会触发中断   65535 * 41.67ns = 2.73ms,也就是从0开始到这个触发中断也就是2.73ms
//配置定时器
void TIMER_Config(){
    TIM_InitTypeDef init;
	init.TIM_Mode = TIM_16BitAutoReload;
     //工作模式,TIM_16BitAutoReload(自动重置为0),TIM_16Bit(手动重置),TIM_8BitAutoReload,TIM_16BitAutoReloadNoMask
	init.TIM_ClkSource = TIM_CLOCK_1T;	
     //时钟源,TIM_CLOCK_1T(41.67us),TIM_CLOCK_12T(12 * 41.67us),TIM_CLOCK_Ext(外部时钟源)
	init.TIM_ClkOut = ENABLE;
     //可编程时钟输出,ENABLE,DISABLE(ENABLE触发中断时会在P35输出高低电平信号)
	init.TIM_Value = 65536 - (MAIN_Fosc / 1000);
     /*装载初值
     16位定时器存放范围是0-65535,我们用的板子频率是24M,1s数24000000个数,1ms数24000个数
     所以为了计时比较准确就让定时器数24000就触发中断,也就是每过1ms就触发中断
     就是从65536 - 24000 数到65536就是1ms的时间,就触发一次中断
     但不能直接写24000,因为不同的单片机的时钟主频是不同的,为了代码的可移植性
     MAIN_Fosc是config文件中宏定义的时钟主频,(MAIN_Fosc / 1000)是根据不同时钟主频计算出的1ms所数的数
     */	
	init.TIM_Run = ENABLE;
     //是否运行	ENABLE,DISABLE。
    Timer_Inilize(Timer0,&init);
    //调用初始化函数
    NVIC_Timer0_Init(ENABLE,Priority_1);
    /*
    打开中断使能,配置中断优先级
    配置优先级注意事项:
    1、当使用同一个定时器时最好是把其他使用此定时器且想要实现的功能中断优先级抬高,不然每过1ms触发中断,可能会打断想实现的功能
    2、当优先级相同时会根据次序来决定中断的高低
    3、此时,就需要去查询手册的同级中断优先级中断查询次序表,次序在前优先中断
    */
}
//中断触发时,会执行定时器0的中断函数,也就是每到1毫秒就会触发下面的中断函数
//========================================================================
// 函数: Timer0_ISR_Handler
// 描述: Timer0中断函数.
// 参数: none.
// 返回: none.
// 版本: V1.0, 2020-09-23
//========================================================================
/*
interrupt是中断函数的标志,表示这个函数是中断函数
TMR0_VECTOR是中断向量,每个中断源都有对应的处理程序,这个处理程序称为中断服务程序,其入口地址称为中断向量。所有中断的中断服务程序入口地址构成一个表,称为中断向量表;也有的机器把中断服务程序入口的跳转指令构成一张表,称为中断向量跳转表。
*/
void Timer0_ISR_Handler (void) interrupt TMR0_VECTOR//进中断时已经清除标志
{
    
}

 

标签:定时器,16,中断,Timer,TIM,模式,时钟
From: https://www.cnblogs.com/izxw/p/18395879

相关文章

  • QT教程:start()和startTimer()的区别
    start()-QTimer类的成员函数        start()是QTimer类的成员函数,用于启动一个基于QTimer对象的定时器。QTimer是Qt中常用的定时器类,它会在设定的时间间隔后发出timeout()信号。用法QTimertimer;timer.start(1000);//每隔1000毫秒触发一次time......
  • Linux驱动开发基础(定时器、mmap)
    所学来自百问网目录1.定时器1.1定时器时间单位1.2内核函数1.3定时器的应用举例2.mmap2.1内存映射现象与数据结构2.2ARM架构内存映射简介2.2.1一级页表映射过程2.2.2二级页表映射过程2.2.3应用程序新建内存映射2.2.3.1mmap调用过程2.2.3.2cache和buffer......
  • BIOS相关定时器
    TSC(TimestampCounter)是CPU内部的计时器,记录从CPU启动以来的时钟周期数,通常用于高分辨率的时间戳和性能计数。可能会存在多核不同步的问题。APIC(AdvancedProgrammableInterruptController)CPU内部的本地APIC:用于处理本地中断和定时器功能(定时中断)。以及多处理器系统中协......
  • 51单片机 - 定时器0(按键控制LED流水灯模式)
    时间:2024.9.2目的:手撕51作者:Whappy定时器0寄存器配置1.定时器0配置过程首先要配置定时器的寄存器TCON和TMOD使计数器开始计数及定时器的初始值,配置使这个链路连起来。#include<REGX52.H>voidTimer0_Init(){ TMOD=0x01;//工作模式寄存器 //控制寄存器 TF......
  • Golang当中的定时器
     参考:https://blog.csdn.net/qq_56999918/article/details/130499688 1packagemain23import(4"fmt"5"time"6)78funcTimer_stop(t*time.Timer){9ifnil!=t{10t.Stop()11}12......
  • imx6ull_GPT定时器
    一、定时器介绍原理图:时间计算:T=1/F=1/100HZ=0.01S二、I.MX6ullGPT定时器介绍简介:     GPT内部寄存器1.GPT定时器工作原理(1)选择时钟信号Theclockthatisinputtotheprescalercanbeselectedfrom4clocksources.Thefollowingtabl......
  • AT32F403A通用定时器03
    上期:AT32F403A通用定时器02https://blog.csdn.net/weixin_64557865/article/details/140933118?spm=1001.2014.3001.5501目录一、输出部分1.PWM模式A2.PWM模式B3.强制输出模式4.输出比较模式5.单周期模式6.快速输出模式二、案例1.TMR联合DMA(1)功能(2)配置介绍步......
  • 单片机中的定时器:精确时间的掌控者
    在单片机的世界里,定时器就像是一个精确的时间守护者,默默地为各种任务提供准确的时间基准。从简单的定时功能到复杂的实时控制系统,定时器都发挥着至关重要的作用。本文将深入探讨单片机中的定时器,包括其工作原理、应用场景以及编程实现等方面,旨在帮助读者更好地理解和应用这一重......
  • C# 定时器 Timer 如何精确到 1-2 毫秒以内
    最近在排查项目OTA的一个问题,触发了一毫秒或者2毫秒执行一次进程间通信的,导致通信阻塞的问题。这样就需要用到模拟触发1ms或者2ms触发事件。这让我第一时间想到了C#的定时器。由于我们项目用到的框架是基于.NETFramwork4.8的,所以我就建立了一个.NETFramwork4.8的WPFDemo去验证......
  • 【STM32】STM32F1基本定时器(HAL库)
    00.目录文章目录00.目录01.STM32概述02.定时器分类03.基本定时器框图①时钟源②计数器时钟③计数器④自动重装载寄存器定时时间的计算04.定时器计数模式及溢出条件05.附录01.STM32概述STM32是一款由意法半导体(STMicroelectronics,简称ST)公司制造的微控......