tmrtsk.c
来自「MCS51的实现无线接收发送(315M或433M)源程序代码。」· C语言 代码 · 共 117 行
C
117 行
/**********************************************************
* TmrTsk.c *
**********************************************************/
#define TMRTSK_GLOBALS
//=========================================================
#include "Sm5964.h"
#include "Struct.h"
#include "Tools.h"
#include "Uart.h"
#include "Error.h"
#include "Os.h"
#include "Tmr2.h"
#include "TskMan.h"
#include "TmrTsk.h"
//=========================================================
#define DEBUG_TMRTSK 0
static INT16UX T0Value;
//=========================================================
static void InitTmr0(void)
{
INT32U TimeValue;
#if DEBUG_TMRTSK
MDebugStrLF((INT8UC *)"InitTmr0()");
#endif
//EA=0;
TR0=0;
TMOD&=0XF0;
TMOD|=0X01;
TF0=0;
ET0=1;
PT0=1;
TimeValue=0x10000-FREQ/12/SECOND;
T0Value=TimeValue;
TH0=T0Value>>8;
TL0=T0Value;
TR0=1;
//EA=1;
}
//=========================================================
void InstallTmr(INT8U TmrId,INT16U Addr)
{
#if DEBUG_TMRTSK
MDebugPara("InstallTmr:",TmrId);
#endif
#if DEBUG_TMRTSK
MDebugMemHex((INT8UI *)ProcAddr,sizeof(ProcAddr));
MDebugMemHex((INT8UI *)DelayTime,sizeof(DelayTime));
#endif
if((TmrId<MAXTIMER)&&(ProcAddr[TmrId]==NULL)&&(DelayTime[TmrId]==0)) ProcAddr[TmrId]=Addr;
else ErrExit(ERR_INSTALLTMR);
}
//=========================================================
void StartTmr(INT8U TmrId,INT16U Time)
{
if((TmrId<MAXTIMER)&&(ProcAddr[TmrId]!=NULL))
{
EA=0;
DelayTime[TmrId]=Time;
EA=1;
}
else ErrExit(ERR_STARTTMR);
}
//=========================================================
void StopTmr(INT8U TmrId)
{
StartTmr(TmrId,0);
}
//=========================================================
static void TrmTskDiag(void)
{
if((TMOD&0X0F)!=0X01) ErrExit(ERR_TMRCONFIG);
if(ET0==0) ErrExit(ERR_TMRCONFIG);
if(PT0==0) ErrExit(ERR_TMRCONFIG);
if(TR0==0) ErrExit(ERR_TMRCONFIG);
}
//=========================================================
void InitTmrTsk(void)
{
#if DEBUG_TMRTSK
MDebugStrLF((INT8UC *)"InitTmrTsk()");
#endif
InitMemBuf((INT8UI *)ProcAddr,NULL,sizeof(ProcAddr));
InitMemBuf((INT8UI *)DelayTime,0,sizeof(DelayTime));
InitTmr0();
InstallDiag(TrmTskDiag);
}
//=========================================================
void TmrTskEntry(void)
{
INT8U i;
for(i=0;i<MAXTIMER;i++)
{
if(ProcAddr[i]!=NULL)
{
if(DelayTime[i]!=0)
{
if(--DelayTime[i]==0) ExecFunc(ProcAddr[i]);
}
}
}
}
//=========================================================
void Timer0 (void) interrupt T0_VECTOR using 1
{
EA=0;
TF0=0;
TH0=T0Value>>8;
TL0=T0Value;
TR0=1;
TmrIntNum++;
EA=1;
}
//=========================================================
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?