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