⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 51单片机加rt8019硬件平台,上web方案及详细代码
💻 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 + -