📄 timer.c.bak
字号:
#include <iom64v.h>
#include <macros.h>
#include "main.h"
#include "com.h"
extern UART uart[2];
extern unsigned char PD_DataOut; //PD口输出数据
extern unsigned long WhileCont;
static unsigned long PreWhileCont = 0; //上一个while循环记数
static unsigned char tcont = 0; //用于记录定时器中断的次数
unsigned char flag = 0;
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++;
}
PD_DataOut ^= 0x80;
if (tcont >= 100)
{
//100ms
tcont = 0;
if (PreWhileCont == WhileCont)
{
flag = 1;
}
else
{
flag = 0;
}
PreWhileCont = WhileCont;
}
if (flag == 0){
PORTD = PD_DataOut; //PD7输出脉冲给变压器
}
}
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 + -