首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

51通讯协议—CRC16校验(2)

51通讯协议—CRC16校验(2)

BOOL  bLedOn=FALSE;    //定义是否点亮LED布尔变量
BOOL  bBellOn=FALSE;   //定义是否蜂鸣器响布尔变量
BOOL  bReqData=FALSE;  //定义是否请求数据布尔变量
/****************************************************
** 函数名称: CRC16Check
** 输    入: buf 要校验的数据;
             len 要校验的数据的长度
** 输    出: 校验值
** 功能描述: CRC16循环冗余校验
*****************************************************/
UINT16 CRC16Check(UINT8 *buf, UINT8 len)
{
    UINT8  i, j;
    UINT16 uncrcReg = 0xffff;
    UINT16 uncur;
    for (i = 0; i < len; i++)
    {
        uncur = buf[i] << 8;
        for (j = 0; j < 8; j++)
        {
            if ((INT16)(uncrcReg ^ uncur) < 0)
            {
                 uncrcReg = (uncrcReg << 1) ^ 0x1021;
            }
            else
            {
                  uncrcReg <<= 1;
            }               
            uncur <<= 1;           
        }
    }
    return uncrcReg;
}
/*************************************************************
* 函数名称:BufCpy
* 输    入:dest目标缓冲区;
           Src  源缓冲区
           size 复制数据的大小
* 输    出:无
* 说    明:复制缓冲区
**************************************************************/
BOOL BufCpy(UINT8 * dest,UINT8 * src,UINT32 size)
{
    if(NULL ==dest || NULL==src ||NULL==size)
    {
     return FALSE;
    }   
do
{
  *dest++ = *src++;  
}while(--size!=0);
return TRUE;
}
/****************************************************
** 函数名称: UartInit
** 输    入: 无
** 输    出: 无
** 功能描述: 串口初始化
*****************************************************/                                                                              
void UartInit(void)
{
SCON=0x40;
T2CON=0x34;
RCAP2L=0xD9;
RCAP2H=0xFF;
REN=1;
    ES=1;
}
/****************************************************
** 函数名称: UARTSendByte
** 输    入: b 单个字节
** 输    出: 无
** 功能描述: 串口 发送单个字节
*****************************************************/
void UARTSendByte(UINT8 b)
{
   SBUF=b;
  while(TI==0);
  TI=0;
}
/****************************************************
** 函数名称: UartSendNBytes
** 输    入: buf 数据缓冲区;
             len 发送数据长度
** 输    出: 无
** 功能描述: 串口 发送多个字节
*****************************************************/
void UartSendNBytes(UINT8 *buf,UINT8 len)
{
     while(len--)
     {
         UARTSendByte(*buf++);
     }
}
继承事业,薪火相传
返回列表