?? 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 + -