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 + -
显示快捷键?