comm.c

来自「此程序为13.56MHz的RFID底层读写卡程序」· C语言 代码 · 共 173 行

C
173
字号

#include <absacc.h>
#include <string.h>
#include "HardWare.h"
void  SendMessage();
void  SendResponse(uchar status,uchar len,uchar *datapr);
extern uchar xdata ComBuffer[MAXLEN];
extern void W_DOG(void);
extern idata uchar PCB;
/********************************************************************
* Function:		SetBaud            								*
*																	*
* input:                smode		   												*
* output:		--													*
********************************************************************/
void SetBaud(uchar smode)
{
        /* fosc=22.11845M,default Baudrate=115200bit/s */

        T2CON=0x30;   /* T2 in mode 1*/
        W_DOG();
        switch(smode)
        {
           case Baud9600:
                RCAP2L =0x0b8;
                break;
           case Baud19200:
                RCAP2L =0x0dc;
                break;
           case Baud38400:
                RCAP2L =0xee;
                break;
           default:            /* Baudrate=115200bit/s */
                RCAP2L =0xfa;
        }
       	RCAP2H =0xff;
	SCON=0x50;
	TR2=1;
}

/********************************************************************
* Function:		CheckCRC           								*
*																	*
* input:                -- 		   												*
* output:		CrcOK or CrcError                           *
********************************************************************/
uchar CheckCRC(void)
{
	uchar i,ch=0;
        W_DOG();

	for(i=0;i<=ComBuffer[1]+1;i++)
	{
	   ch=ch^ComBuffer[i];
	}
	if(ch==ComBuffer[i]) return CrcOK;

	return CrcError;
}

/********************************************************************
* Function:		CalculateCRC
*																	*
* input:                data_len 		   												*
* output:		ch                          *
********************************************************************/
/*uchar CalculateCRC(uchar data_len)
{
	uchar i,ch=0;
        ch=ch^0x12;
        ch=ch^PCB;
        ch=ch^data_len;
        W_DOG();
	for(i=3;i<3+data_len;i++)
	{
	   ch=ch^ComBuffer[i];
	}


	return ch;
}
/********************************************************************
* Function:		SendMsError        								*
*																	*
* input:                -- 		     												*
* output:		--		                            *
********************************************************************/
void SendMsError(void)
{
        ComBuffer[4+2]=0x60;
	ComBuffer[5+2]=0x01;
	ComBuffer[6+2]=0xe0;
	SendMessage();
}

/********************************************************************
* Function:		SendResponse        								*
*																	*
* input:                status,len,&data 		     												*
* output:		--		                            *
********************************************************************/
void  SendResponse(uchar status,uchar len,uchar *datapr)
{
	ComBuffer[4+2]=0x60;
	ComBuffer[6+2]=status;
	if (len>17)
	{                  /* state 1 */
          len-=17;
	  ComBuffer[5+2]=len;
	}
	else
	{                 /* state 2 */
	  ComBuffer[5+2]=len;
	  if(len>1)
	  {
	    memcpy(ComBuffer+(7+2),datapr,len-1);
	  }
	}
	SendMessage();
}

/********************************************************************
* Function:		SendMessage        								*
*																	*
* input:                len     												*
* output:		--		                            *
********************************************************************/
void SendMessage(void)
{
	uchar i,ch=0x00,len;

        len=ComBuffer[5+2];
      	TR2=1;
   	TI=0;

   	for(i=0;i<=len+1;i++)
   	{    /*send data*/

          W_DOG();

     	   ch=ch^ComBuffer[4+2+i];
           SBUF=ComBuffer[4+2+i];
           while(TI==0);
           TI=0;
        }
        SBUF=ch;
        while(TI==0);
        TI=0;
        SBUF=0x03;
        while(TI==0);
        TI=0;
}
/********************************************************************
* Function:		Beep							                	*
*																	*
* input:		num    												*
* output:		--													*
********************************************************************/
void Beep(uchar num,uint frequency)
{
	uchar i;

	BEP=1;
	for(i=0;i<num;i++)
	{
		BEP=0;
		W_DOG();
		SleepMs(frequency);
		BEP=1;
		SleepMs(frequency);
  	}
}

⌨️ 快捷键说明

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