error.c

来自「MCS51的实现无线接收发送(315M或433M)源程序代码。」· C语言 代码 · 共 300 行

C
300
字号
/**********************************************************
*                  Error.c                                *
**********************************************************/
#define ERROR_GLOBALS 
//=========================================================
#include "Sm5964.h"
#include "Struct.h"
#include "Tools.h"
#include "Uart.h"
#include "Tmr2.h"
#include "Error.h"
//=========================================================
#define DEBUG_ERROR 0
//=========================================================
#define MAXDIAG     4
//=========================================================
INT8UI CurDiag,NumDiag;
INT16UI DiagAddr[MAXDIAG];
//=========================================================
void InitError(void)
{
   #if DEBUG_ERROR
   MDebugStrLF((INT8UC *)"InitError()");
   #endif
   CurDiag=0;
   NumDiag=0;
   InitMemBuf((INT8UI *)DiagAddr,NULL,sizeof(DiagAddr));
}
//=========================================================
void ErrExit(INT8U ErrCode)
{
   EA=0;
   while(1) 
     {
     	MDebugPara("ErrExit:",ErrCode);
     	Delay10X(0xff);
     }
}
//=========================================================
INT8U FindEmptyDiag(void)
{
	  INT8U i;
	   
   for(i=0;i<MAXDIAG;i++) 
     {
      if(DiagAddr[i]==NULL) return i;
     }
   return MAXDIAG;
}
//=========================================================
void InstallDiag(INT16U ProcAddr)
{
   INT8U Index;
   
   Index=FindEmptyDiag();
   #if DEBUG_ERROR
   MDebugPara("InstallDiag()",Index);
   #endif
   if(Index!=MAXDIAG)
     {
     	DiagAddr[Index]=ProcAddr;
      NumDiag++;
     }
   else ErrExit(ERR_INSTALLDIG);
}
//=========================================================
void ErrProc(void)
{
   if(NumDiag)
     {
      ExecFunc(DiagAddr[CurDiag]);
      if(++CurDiag>=NumDiag) CurDiag=0;
     }
}
//=========================================================

//=========================================================
void MDebugByteHex(INT8U Ch)
{
   MDebugByte(HexToAscii(Ch>>4));
   MDebugByte(HexToAscii(Ch&0X0F));
   MDebugByte(' ');
}
//=========================================================
/*
void MDebugByteHex1(INT8U Ch)
{
   MDebugByte(HexToAscii(Ch>>4));
   MDebugByte(HexToAscii(Ch&0X0F));
}
*/
//=========================================================
void MDebugLF(void)
{
	  MDebugByte(0X0D);
	  MDebugByte(0X0A);
}
//=========================================================
void MDebugStr(INT8UC *Str)
{
	  while(*Str) MDebugByte(*Str++);
}
//=========================================================
void MDebugStrLF(INT8UC *Str)
{
	  while(*Str) MDebugByte(*Str++);
	  MDebugLF();
}
//=========================================================
void MDebugPara(INT8UC *Str,INT8U Ch)
{
	  MDebugStr(Str);
	  MDebugByteHex(Ch);
	  MDebugLF();
}
//=========================================================
/*
void MDebugPara2(INT8UC *Str1,INT8U Ch1,INT8UC *Str2,INT8U Ch2)
{
	  MDebugStr(Str1);
	  MDebugByteHex(Ch1);
	  MDebugStr(Str2);
	  MDebugByteHex(Ch2);
	  MDebugLF();
}
*/
//=========================================================
/*
void MDebugPara3(INT8UC *Str1,INT8U Ch1,INT8UC *Str2,INT8U Ch2,INT8UC *Str3,INT8U Ch3)
{
	  MDebugStr(Str1);
	  MDebugByteHex(Ch1);
	  MDebugStr(Str2);
	  MDebugByteHex(Ch2);
	  MDebugStr(Str3);
	  MDebugByteHex(Ch3);
	  MDebugLF();
}
*/
//=========================================================
/*
void MDebugPara4(INT8UC *Str1,INT8U Ch1,INT8UC *Str2,INT8U Ch2,INT8UC *Str3,INT8U Ch3,INT8UC *Str4,INT8U Ch4)
{
	  MDebugStr(Str1);
	  MDebugByteHex(Ch1);
	  MDebugStr(Str2);
	  MDebugByteHex(Ch2);
	  MDebugStr(Str3);
	  MDebugByteHex(Ch3);
	  MDebugStr(Str4);
	  MDebugByteHex(Ch4);
	  MDebugLF();
}
*/
//=========================================================
/*
void MDebugWordPara(INT8UC *Str,INT16U Data)
{
	   MDebugStr(Str);
	   MDebugByteHex(Data>>8);
	   MDebugByteHex(Data);
	   MDebugLF();
}
*/
//=========================================================
/*
void MDebugDWordPara(INT8UC *Str,INT32U Data)
{
	   MDebugStr(Str);
	   MDebugByteHex(Data>>24);
	   MDebugByteHex(Data>>16);
	   MDebugByteHex(Data>>8);
	   MDebugByteHex(Data);
	   MDebugLF();
}
*/
//=========================================================
/*
void MDebugMemHex(INT8UI *Ptr,INT8U Len)
{
	  INT8U i;
	  //INT16U Addr;
	  
	  #if DEBUG_ERROR
	  //MDebugStrLF((INT8UC *)"DebugMemHex:");
	  //MDebugStr((INT8UC *)"地址:");
	  //Addr=(INT16U)Ptr;
	  //MDebugByteHex((INT8U)(Addr>>8));
	  //MDebugByteHex((INT8U)Addr);
	  //MDebugLF();
	  //MDebugStrLF((INT8UC *)"数据:");
	  #endif
	  i=0;
	  for(;Len>0;Len--)
	    {
	    	MDebugByteHex(*Ptr++);
	    	if(++i==16) i=0,MDebugLF();
	    }
	  MDebugLF();
}
*/
//=========================================================
void MDebugExMemHex(INT8UX *Ptr,INT16U Len)
{
	  INT8U i;
	  #if DEBUG_ERROR
	  //INT16U Addr;
	  //MDebugStrLF((INT8UC *)"MDebugExMemHex:");
	  //MDebugStr((INT8UC *)"地址:");
	  //Addr=(INT16U)Ptr;
	  //MDebugByteHex((INT8U)(Addr>>8));
	  //MDebugByteHex((INT8U)Addr);
	  //MDebugLF();
	  //MDebugStrLF((INT8UC *)"数据:");
	  #endif
	  i=0;
	  for(;Len>0;Len--) 
	    {
	    	MDebugByteHex(*Ptr++);
	    	if(++i==16) i=0,MDebugLF();
	    }
	  MDebugLF();
}
//=========================================================
void MDebugCodeHex(INT8UC *Ptr,INT16U Len)
{
	  INT8U i;
	  #if DEBUG_ERROR
	  //INT16U Addr;
	  //MDebugStrLF((INT8UC *)"MDebugCodeHex:");
	  //MDebugStr((INT8UC *)"地址:");
	  //Addr=(INT16U)Ptr;
	  //MDebugByteHex((INT8U)(Addr>>8));
	  //MDebugByteHex((INT8U)Addr);
	  //MDebugLF();
	  //MDebugStrLF((INT8UC *)"数据:");
	  #endif
	  i=0;
	  for(;Len>0;Len--) 
	    {
	    	MDebugByteHex(*Ptr++);
	    	if(++i==16) i=0,MDebugLF();
	    }
	  MDebugLF();
}
//=========================================================
/*
void MDebugExMem(INT8UX *Ptr,INT16U Len)
{
	  #if DEBUG_ERROR
	  //INT16U Addr;
	  //MDebugStrLF((INT8UC *)"MDebugExMem:")
	  //MDebugStr((INT8UC *)"地址:");
	  //Addr=(INT16U)Ptr;
	  //MDebugByteHex((INT8U)(Addr>>8));
	  //MDebugByteHex((INT8U)Addr);
	  //MDebugLF();
	  //MDebugStrLF((INT8UC *)"数据:");
	  #endif
	  for(;Len>0;Len--) MDebugByte(*Ptr++);
	  MDebugLF();
}
*/
//=========================================================
/*
void MDebugExMemNoLF(INT8UX *Ptr,INT16U Len)
{
	  #if DEBUG_ERROR
	  //INT16U Addr;
	  //MDebugStrLF((INT8UC *)"MDebugExMemNoLF:");
	  //MDebugStr((INT8UC *)"地址:");
	  //Addr=(INT16U)Ptr;
	  //MDebugByteHex((INT8U)(Addr>>8));
	  //MDebugByteHex((INT8U)Addr);
	  //MDebugLF();
	  //MDebugStrLF((INT8UC *)"数据:");
	  #endif
	  for(;Len>0;Len--) MDebugByte(*Ptr++);
}
*/
//=========================================================
/*
void MDebugRomHex(INT16UX Addr)
{
	  INT16U i;
	  INT8U j,Ch;
	  
	  MDebugWordPara("地址:",Addr);
	  for(j=0,i=0;i<0x200;i++)
	    {
	    	Ch=RdRom(Addr++);
	    	MDebugByteHex(Ch);
	    	if(++j==16) j=0,MDebugLF();
	    }
	  MDebugLF();
}
*/
//=========================================================

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?