📄 timer.c
字号:
#include <iom64v.h>
#include <macros.h>
#include "main.h"
unsigned char WdtTimer = 0; //外部看门狗定时器
volatile unsigned int Timer1BaseClk = 0; //Timer1基准时钟
// 看门狗初始化函数
// prescale: 512K cycles,overtime 417ms
void watchdog_init(void)
{
WDR(); //this prevents a timout on enabling
WDTCR = 0x18; //WDCE、WDE位置1,再改变超时时间
WDTCR = 0x0D; //WATCHDOG ENABLED - dont forget to issue WDRs
}
//TIMER1 initialize - prescale:8
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 2000Hz
// actual value: 2000.000Hz (0.0%)
void timer1_init(void)
{
TCCR1B = 0x00; //stop
TCNT1H = 0xFC; //setup
TCNT1L = 0x18;
OCR1AH = 0x03;
OCR1AL = 0xE8;
OCR1BH = 0x03;
OCR1BL = 0xE8;
OCR1CH = 0x03;
OCR1CL = 0xE8;
ICR1H = 0x03;
ICR1L = 0xE8;
TCCR1A = 0x00;
TCCR1B = 0x02; //start Timer
}
//-------------------------------------------------------------------------
#pragma interrupt_handler timer1_ovf_isr:iv_TIM1_OVF
void timer1_ovf_isr(void)
{
//TIMER1 has overflowed
static unsigned char timer1int = 0;
TCNT1H = 0xFC; //reload counter high value
TCNT1L = 0x18; //reload counter low value
timer1int++;
if (timer1int >= 2)
{
//1ms
timer1int = 0;
Timer1BaseClk++;
if (Timer1BaseClk >= 60000)
{
Timer1BaseClk = 0;
}
WdtTimer++;
}
}
unsigned int GetTime(void)
{
unsigned int iTime1,iTime2;
do{
iTime1 = Timer1BaseClk;
iTime2 = Timer1BaseClk;
}while(iTime2 != iTime1);
return iTime2;
}
//-------------------------------------------------------------------------
unsigned int GetPassTime(unsigned int iPreTime)
{
unsigned int temp_i = 0;
unsigned int iCurTime = GetTime();
if (iCurTime >= iPreTime)
{
return (iCurTime - iPreTime);
}
else
{
return (60000 - iPreTime + iCurTime);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -