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