📄 timer.c
字号:
//------------------------------------timer.c-----------------------------
#include "includes.h"
typedef struct
{
uchar volatile Ctrl;
uint Interval;
uint Counter;
}TIMERCON;
//---------------------------------------------------------------------------
static TIMERCON data TimerCon[MAX_TIMER];
//----------- 定时器0初始化--------------------
void init_t0(void)
{
AUXR=0x02;
TR0 = FALSE;
TMOD = TMOD & 0xf0 | 0x01; //T0方式1,
TH0 = TCH_20ms;
TL0 = TCL_20ms;
ET0 = TRUE; //开中断
TR0 = TRUE;
}
//-----------------扩展定时器初始化----------------------------------------------------------
void Timer_Init(void)
{
uchar data i;
for(i=0; i<MAX_TIMER; i++)
{
TimerCon[i].Ctrl=0;
TimerCon[i].Interval=0;
TimerCon[i].Counter=0;
}
}
//-----------------------------------------------------------------------------------
uchar Timer_GetEvent(uchar ID)
{
uchar volatile data evf;
evf = (TimerCon[ID].Ctrl & EVF_TIMERMATCH);
TimerCon[ID].Ctrl &= (~EVF_TIMERMATCH);
return evf;
}
//-----------------------------------------------------------------------------------
void SetTimer(uchar ID, uint Interval)
{
if (ID >= MAX_TIMER)
return;
Interval=Interval/10;
TimerCon[ID].Ctrl = TCF_RUN;
TimerCon[ID].Interval = Interval;
TimerCon[ID].Counter = 0;
}
//-----------------------------------------------------------------------------------
void KillTimer(uchar ID)
{
if (ID >= MAX_TIMER)
return;
TimerCon[ID].Ctrl = 0;
TimerCon[ID].Interval = 0;
TimerCon[ID].Counter = 0;
}
//-----------------------------------------------------------------------------------
void Timer_Run(void) using 2
{
uchar data i;
for(i=0; i<MAX_TIMER; i++)
{
if (TimerCon[i].Ctrl & TCF_RUN)
{
TimerCon[i].Counter++;
if(TimerCon[i].Counter >= TimerCon[i].Interval)
{
TimerCon[i].Counter = 0;
TimerCon[i].Ctrl |= EVF_TIMERMATCH;
}
}
}
}
//-----------T0中断程序---------------------------
void T0_INT() interrupt 1 using 2
{
TH0 = TCH_20ms; // 重装定时器
TL0 = TCL_20ms;
Timer_Run();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -