精华内容
下载资源
问答
  • 51定时器初始化步骤

    万次阅读 2017-06-26 16:39:55
    定时器初始化需要六步: void TimerInit() { TMOD = 0X01; TH0 = (65536 - X) /256; //(65536-X)为定时器初值,如定时10ms,则X=1000 TL0 = (65536 - X)%256; EA = 1; ET0 = 1; TR0 = 1; } 中断函数: void Timer0 ...

    定时器初始化需要六步:

    void TimerInit()

    {

    TMOD = 0X01;

    TH0 = (65536 - X) /256;//(65536-X)为定时器初值,如定时10ms,则X=1000

    TL0 = (65536 - X)%256;

    EA =  1;

    ET0 = 1;

    TR0 = 1;

    }

    中断函数:

    void Timer0 interrupt 1

    {

    TH0 = (65536-X)/256;

    TL0 = (65536-X)%256;

    num++;

    if(num>100)

    num = 1;

    }


    /

    Step1: 设置系统CLK


    Setp2: 设置timer工作模式
    TMOD = 0x20;


    Step3: 设置timer clk源
    CKCON = 0x80;


    step4: 设置定时值
    TL1 = 0x0F;
    TH1 = 0x0F;


    step5: 启动timer
    TCON = 0x40;
    (TR1 = 1)


    step6: timer中断允许
    IE = 0x80
    (ET1 = 1)


    step7: 全部中断使能
    EA = 1;


    step8: 编写中断函数
    void Timer1_ISR (void) interrupt 3
    {
       static int counter = 0;


       if((counter++) == LED_TOGGLE_RATE)
       {
          LED = ~LED;                      // Toggle the LED
          counter = 0;
       }
    }

    展开全文
  • STM8的TIM4定时器1ms进入中断 TIM4 — 8位基本定时器 ...TIM4初始化 void Tim4_Init(void) { TIM4_DeInit(); TIM4_TimeBaseInit(TIM4_PRESCALER_64,250-1);//64分频,向上计数,16M/64/250 = 1ms计数完了触发中断

    STM8的TIM4定时器1ms进入中断

    TIM4 — 8位基本定时器
    ● 8位自动装载可调整的预分频器,比例可选为1~128之间任意的2的幂
    ● 时钟源: CPU时钟
    ● 中断源: 1个溢出/更新中断

    需要实现1ms进入一次中断,可作为系统定时器

    TIM4初始化

    void Tim4_Init(void)
    {
      TIM4_DeInit();
      TIM4_TimeBaseInit(TIM4_PRESCALER_64,250-1);//64分频,向上计数,16M/64/250 = 1ms计数完了触发中断
      TIM4_ARRPreloadConfig(ENABLE);//使能自动重装
      TIM4_ITConfig(TIM4_IT_UPDATE , ENABLE);//数据更新中断
      TIM4_Cmd(ENABLE);//开定时器
       __enable_interrupt(); 
    }

    系统内部时钟16M,经过64分频,然后除以250就得到1ms

    中断程序

    __interrupt void TIM4_UPD_OVF_IRQHandler(void) 
    {
      Sys_Timer++;
      TIM4_ClearITPendingBit(TIM4_IT_UPDATE);
    }

    主函数

    #include "stm8s.h"
    
    
    int main(void)
    {
    Tim4_Init(); //系统定时器初始化 
      while (1)
      {
          if(Sys_Timer >= 10) //10ms
        {
    
    
            Sys_Timer = 0;  
    	LedTimer++;
        }
          if(LedTimer >= 50) //0.5s     
        {
    
         LedTimer = 0;
        }
      }  
    }
    展开全文
  • 合泰 HT66F04 基准定时器初始化

    千次阅读 多人点赞 2013-12-02 10:52:56
    合泰 HT66F04 基准定时器初始化,已经应用过没有问题,和各位一起分享,如有不对之处,敬请纠正,谢谢

    以下是基准定时器TCB0的初始化,1秒中断一次


    #define  TBC_EN   (1<<7)
    #define  TBC_DIS   (1<<7)
    #define TBC0_125MS_VAL (4<<0)//125毫秒中断TBC
    #define TBC0_250MS_VAL (5<<0)
    #define TBC0_500MS_VAL (6<<0)//(32768/2)/晶振频率32768
    #define TBC0_1S_VAL    (7<<0)//32768/晶振频率32768

    void  TBC0_init(void)

    {

    _tbc=0;
    // _tbc = (1<<7); //使能TBC
    // _tbc = (0<<7); //除能TBC
    _tbc = TBC_EN|TBC0_1S_VAL; //设置TIME BASE


    _tb0e = 1;//TCB0开中断定时

    }

    #pragma vector Time_base0_isr @ 0x1c


    //---------------------------------------------------------------------------------------
    //32.768 KHz 的频率下为1S一次中断
    //---------------------------------------------------------------------------------------
    void Time_base0_isr(void)
    {
    _tb0f = 0;

    }



    展开全文
  • 定时器,有时也称为动态定时器或内核定时器,是管理内核时间的基础 内核经常要推迟执行一些代码,如下半部机制就是为了将工作推后执行 时钟中断由系统的定时硬件以周期性的时间间隔产生,这个间隔(即频率)由内核...

    定时器,有时也称为动态定时器或内核定时器,是管理内核时间的基础
    内核经常要推迟执行一些代码,如下半部机制就是为了将工作推后执行
    时钟中断由系统的定时硬件以周期性的时间间隔产生,这个间隔(即频率)由内核根据HZ来确定
    每当时钟中断发生时,全局变量jiffies(unsigned long)就加1,因此jiffies记录了自linux启动后时钟中断发生的次数。
    内核定时器用于控制某个函数(定时器处理函数)在未来的某个特定时间执行。
    内核定时器注册的处理函数只执行一次--不是循环执行的。(定时器并不周期运行,它在超时后就自行销毁,动态
    定时器不断地创建和销毁,而且它的运行次数也不受限制)

    定时器的使用只须执行一些初始化工作,设置一个超时时间,指定超时发生后执行的函数,然后激活定时器就可以了

    1. 定时器结构timer_list
    include/linux/timer.h
    struct timer_list {

     struct list_head entry;//定时器链表的入口
     unsigned long expires;//定时器到期时间
     struct tvec_base *base;

     void (*function)(unsigned long);//定时器处理函数
     unsigned long data;//传给定时器处理函数的长整形参数

     int slack;

     ...

    };

    2. 定时器的使用
    1)定义一个定时器结构
    struct timer_list timer;

    2)初始化定时器
    有很多接口函数可以初始化定时器
    init_timer(struct timer_list* timer);
    TIMER_INITIALIZER(_function, _expires, _data);
    DEFINE_TIMER(_name, _function, _expires, _data);
    通常可以这样初始化定时器并赋值func,data
    setup_timer(&timer, gpio_keys_timer, (unsigned long)data);

    定时器处理函数
    static void gpio_keys_timer(unsigned long data)
    {
     schedule_work(&work);
    }

    3)增加定时器,并激活定时器
    void add_timer(struct timer_list* timer);
    注册内核定时器,并将定时器加入到内核动态定时器链表中

    4)删除定时器
    int del_timer(struct timer_list *timer);
    del_timer_sync(struct timer_list *timer);
    del_timer_sync()是del_timer()的同步版,在删除一个定时器时需等待其被处理完(不能在中断上下文中使用)

    5)修改定时器的expire,并启动
    int mod_timer(struct timer_list *timer, unsigned long expires);
    mod_timer(&timer, jiffies + msecs_to_jiffies(50));//未考虑jiffies溢出问题

    msecs_to_jiffies()用于将ms转换成jiffies


    内核通过函数mod_timer来实现已经激活的定时器超时时间:

    mod_timer(&my_timer, jiffies+new_delay);

    mod_timer函数也能够操作那些已经初始化,但还没有被激活的定时器,假设定时器没有激活,mod_timer会激活它。假设调用时定时器未被激活,该函数返回0,否则返回1。一旦从mod_timer函数返回,定时器都将被激活并且设置了新的定时值。



    /********************************************************/
    内核定时器例子
    #include <linux/init.h>
    #include <linux/module.h>
    #include <linux/timer.h>
    #include <linux/fs.h>
    
    #define TIMER_MAJOR 234
    #define DEVICE_NAME "timer_test"
    
    /**1. 定义timer结构*/
    struct timer_list timer;
    
    static void func_timer(unsigned long data)
    {
    	/**4. 修改定时器的超时参数并重启*/
    	mod_timer(&timer, jiffies + HZ);
    	printk("current jiffies is %ld\n", jiffies);
    }
    
    struct file_operations timer_ops = {
    	.owner = THIS_MODULE,
    };
    
    static int __init timer_init(void)
    {
    	register_chrdev(TIMER_MAJOR, DEVICE_NAME, &timer_ops);
    	/**2. 初始化定时器*/
    	setup_timer(&timer, func_timer, 0);
    	#if 0
    	init_timer(&timer);
    	timer.data = 0;
    	timer.expires = jiffies + HZ;
    	timer.function = func_timer;
    	#endif
    	/**3. 添加激活计时器*/
    	add_timer(&timer);
    	
    	printk("timer_init\n");
    	return 0;
    }
    
    static void __exit timer_exit(void)
    {
    	/**4. 删除定时器*/
    	del_timer(&timer);
    	unregister_chrdev(TIMER_MAJOR, DEVICE_NAME);
    }
    
    module_init(timer_init);
    module_exit(timer_exit);
    MODULE_LICENSE("GPL");
    /********************************************************/
    # insmod timer_test.ko 
    timer_init
    timer_init
    current jiffies is 220614
    current jiffies is 220614
    current jiffies is 220714
    current jiffies is 220714


    转载于http://blog.csdn.net/shui1025701856/article/details/7580280

    展开全文
  • 1.首先确定SystemCoreClock系统时钟 系统时钟需要根据具体的系统时钟配置...//初始化并使能SysTick定时器 假设我们想配置SysTick定时器中断间隔周期为1ms,即每间隔1ms定时中断来一次。 可定义一个宏定义 #defin..
  • 学习笔记——野火STM32F103ZET6霸道——TIM基本定时器500msLED闪烁
  • 1 static void TIM3_Configuration(void) //10ms 2 { 3 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; 4 NVIC_InitTypeDef NVIC_InitStructure; 5 6 RCC_APB1PeriphClockCmd(RCC_AP...
  • 1时钟周期=1/晶振频率M 1机器周期=12(51系列12T...假设12MHZ晶振工作在51单片机12T模式下,需要使用定时器进行50MS定时操作,定时器工作在方式1; 12M的晶振每秒(s)可产生1M(10^6 us)个机器周期 50ms就需要50×100...
  • PIC12系列 TIMER0定时器初始化设置

    千次阅读 2016-07-26 14:57:35
    Timer0 模块是 8 位定时器 / 计数器,具有以下特性: • 8 位定时器 / 计数器寄存器 (TMR0) • 8 位预分频器 (与看门狗定时器共用) • 可编程内部或外部时钟源 • 可编程外部时钟边沿选择 • 溢出时产生中断
  • 库函数版本:3.5,外部8M晶振,默认没有进行分频 // 1ms中断时基 void SysTick_Configuration(void) { ... NVIC_SetPriority(SysTick_IRQn, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),0,3
  • 51单片机定时器中断函数中变量初始化的问题 #include<reg51.h>//调用头文件 #define uint unsigned int //宏定义 #define uchar unsigned char uint n=0; //查表变量 uchar temp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf...
  • SysTick是属于CM4内核中的...当重装载数值寄存器的值递减到 0的时候,系统定时器就产生一次中断,以此循环往复。基于CM4内核的MCU都有这个系统定时器,使得软件在CM4 单片机中可以很容易的移植。因此它一般用于RTOS...
  • 下面介绍如下: TIM1的初始化1us: 系统时钟是16M。 void set_TIM1_nus(u16 nus) {  /*1u的记数周期*/  /*TIM1_TimeBaseInit(0x0F,TIM1_COUNTERMODE_UP,nus,TIM1_RCR_RESET_...
  • 通用定时器1初始化程序(启动ADC) // $ Date: 4/11/2009 整理: eyes417 $//###########################################################################//// FILE : 
  • 调试中发现当单片机上电给定时器初始化的时候还有刚刚开始产生脉冲的时候会莫名其妙的进入一次中断。由于所需要的脉冲为单个脉冲并非连续脉冲,脉冲宽度从us到ms不等,所以每一次产生单脉冲的时候需要对定时器的预分...
  • /************************************************************************...* 描 述: 定时器T3通过中断方式控制每10ms输出一个下降沿 *************************************************************************
  • LPC2478 arm7内核,芯片复位后默认开启了定时器0和定时器1的时钟与电源,但timer2、timer3的却默认关闭,所以关于定时器0、1初始化的程序里没有开启时钟和电源的语句。然后我看了一些参考资料,发现关于timer2、...
  • C8051F330定时器

    2011-11-19 20:37:26
    C8051F330定时器初始化、定时40MS计数送数码管
  • //Timer0 初始化 while(1);//死循环,等待 Timer0 溢出中断 } void Timer0_irq() interrupt INTERRUPT_T0 { TH0=(65536-TIMER0_VALUE)/256; //写入初值 TL0=(65536-TIMER0_VALUE)%256; count_ms++; //软件计数器加1 ...
  • 定时器中断

    2019-11-07 16:15:19
    文章目录定时器中断时钟定时器POSIX定时器定时器操作timer_create()(创建定时器)timer_settime()(初始化定时器)timer_gettime()(获得一个活动定时器的剩余时间)timer_getoverrun()(取得一个定时器的超限运行次数)...
  • 定时器

    千次阅读 2017-02-11 21:37:48
    定时器的实现
  • POSIX定时器

    2014-04-02 11:40:43
    最强大的定时器接口来自POSIX时钟系列,其创建、初始化以及删除一个定时器的行动被分为三个不同的函数:timer_create()(创建定时器)、timer_settime()(初始化定时器)以及timer_delete(销毁它)。 创建一个定时器:...
  • stm32 设置10ms定时器

    千次阅读 2020-04-16 11:40:52
    /* ********************************************************************************************************* * * 模块名称 : timer2驱动模块 * ... //初始化中断 NVIC_Configuration(); bsp_InitTimer2(); }
  • 一、STM32F103定时器 定时器种类 定时器 ...TIM2,TIM3,TIM4,TIM5 16 向上、向下、向上/下 1~65536之间任意数 可以 4 没有 通用定时计数,PWM输出,输入捕获,输出比较 基本定时器 TIM6,TIM7 1
  • 本实验实现通过CC2530的定时器3(8位)查询方式控制LED1以1S的周期性闪烁,此实验使用有关定时器3的2个寄存器T3CTL(定时器3控制寄存器),IEN1(中断使能1寄存器)。 有关CC2530的GPIO基本知识、普通GPIO操作有关寄存器...
  • Contiki学习笔记3定时器

    千次阅读 2016-05-23 21:18:23
    函数就是初始化系统时钟,这里面cc2530使用的是sleep定时器来定时,中断时间也即定时时间是7.8ms。每次中断都会使全局变量count+1。 clock_time() 函数就是计时函数,直接返回count的值,这样就知道当前时间了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,553
精华内容 10,621
关键字:

初始化定时器3ms