📄 timer.c
字号:
#define TIMER_GLOBAL
#include "includes.h"
TIMER *Freelist;
TIMER *Userlist;
void Init_Timer(void)
{
UCHAR i;
StartTa0();
Userlist = NULL;
Freelist = NULL;
for(i=0; i<MAX_TIMER; i++)
{
//Timer_Tcb[i].id = 0;
Timer_Tcb[i].on_off = OFF;
Timer_Tcb[i].ldtime = 0;
Timer_Tcb[i].lefttime = 0;
Timer_Tcb[i].proc = NULL;
Timer_Tcb[i].next = Freelist;
Freelist = &Timer_Tcb[i];
}
}
TIMER * Create_Timer(void far (*p)())
{
TIMER *ptr;
if(Freelist==NULL) return NULL;
ptr = Freelist;
Freelist = Freelist->next;
//ptr->id = 0;
ptr->on_off = OFF;
ptr->proc = p;
ptr->ldtime = 0;
ptr->lefttime = 0;
ptr->next = Userlist;
Userlist = ptr;
return Userlist;
}
void Remove_Timer(TIMER *ptr)
{
TIMER *tptr;
if(ptr==NULL)return;
//ptr->id = 0;
ptr->on_off = OFF;
ptr->proc = NULL;
ptr->ldtime = 0;
ptr->lefttime = 0;
tptr = Userlist;
if(ptr==tptr)
{
Userlist = Userlist->next;
tptr->next = Freelist;
Freelist = tptr;
return;
}
else
{
while((tptr->next)!=ptr&&(tptr->next)!=NULL)
{
tptr = tptr->next;
}
if(tptr->next==NULL) return;
tptr->next = ptr->next;
ptr->next = Freelist;
Freelist = ptr;
}
}
void Start_Timer(TIMER *ptr,WORD time,WORD attrib)
{
ptr->lefttime = (DWORD)(((DWORD)time)*((DWORD)attrib));
ptr->ldtime = (DWORD)(((DWORD)time)*((DWORD)attrib));
ptr->on_off = ON;
}
void Stop_Timer(TIMER *ptr)
{
ptr->on_off = OFF;
}
DWORD Get_Lefttime(TIMER *ptr)
{
return ptr->lefttime;
}
void Restart_Timer(TIMER *ptr,WORD time,WORD attrib)
{
DWORD temp;
DWORD temp1;
temp = Get_Lefttime(ptr);
temp1 = (DWORD)(((DWORD)time)*((DWORD)attrib));
if(temp>=temp1)
{
ptr->lefttime = (DWORD)(((DWORD)time)*((DWORD)attrib));
ptr->ldtime = (DWORD)(((DWORD)time)*((DWORD)attrib));
}
}
void Timer_Reduce(void)//10ms做一次//
{
TIMER *tptr;
if(Userlist==NULL)return;
tptr = Userlist;
while(tptr!=NULL)
{
if(tptr->on_off==ON)
{
if(tptr->lefttime!=0)tptr->lefttime--;
}
tptr = tptr->next;
}
}
void Timer_Entry(void)
{
static TIMER *tptr;
static uchar flag=0;
//if(Userlist==NULL)return;
if(flag==0)
{
flag = 1;
tptr = Userlist;
}
//tptr = Userlist;
if(tptr!=NULL)
{
if((tptr->on_off==ON)&&(tptr->lefttime==0))
{
tptr->on_off = OFF;
if(tptr->proc!=NULL)
{
tptr->proc();
clr_watchdog();
}
}
tptr = tptr->next;
}
else
{
tptr = Userlist;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -