timer.c

来自「ATmega8实现USB接口(采用USB的CDC类」· C语言 代码 · 共 54 行

C
54
字号
#include "hardware.h"#include <avr/io.h>#include <avr/interrupt.h>#include <avr/wdt.h>#include <util/delay.h>#include "timer.h"volatile uchar  timerTimeoutCnt;volatile uchar  timerLongTimeoutCnt;/* ------------------------------------------------------------------------- */void timerMsDelay(uchar ms){    timerSetupTimeout(ms);    while(!timerTimeoutOccurred());}/* ------------------------------------------------------------------------- *//* main configures Timer 0 with 1/64 prescaler * -> 12MHz/64 = 187.5kHz --> 5.333us * overflow every 256 counts = 732.422Hz --> 1.365ms */UTIL_INTERRUPT(SIG_OVERFLOW0)   /* run with global interrupt enable */{static uchar    prescaler = 1;    cli();    if(timerTimeoutCnt != 0)        timerTimeoutCnt--;    sei();  /* allow interrupts here */    cli();    if(--prescaler == 0){   /* scale down to 10 Hz */        prescaler = 73;        if(timerLongTimeoutCnt != 0)            timerLongTimeoutCnt--;    }    sei();}/* ------------------------------------------------------------------------- */void    timerSetupTimeout(uchar msDuration){    msDuration -= msDuration >> 2;  /* approximate milliseconds with our timebase */    /* 1 - 1/4 = 0.75; 1.365 ms * 0.75 = 1.024 ms --> 2.4% deviation */    timerTimeoutCnt = msDuration;}/* ------------------------------------------------------------------------- */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?