原创 一个CRC16程序

2009-6-4 14:48 2245 8 8 分类: MCU/ 嵌入式

 


来源于TinyOS的Serial Message手册


/*======================================================


 函数: CalculateCRC16
 说明: 计算一段存储区的CRC16
 入口: *Pointer -- 源指针
   index  -- 偏移量
   count       --  计算长度
 出口: 返回uint16型的CRC计算结果
 
========================================================*/

uint16 calcByte(uint16 crc, uint16 b)
{
    uint16 i;


    crc = crc ^ (uint16)b << 8;
    for ( i = 0; i < 8; i++)
    {
        if ((crc & 0x8000) == 0x8000)
        {
            crc = crc << 1 ^ 0x1021;
        }
        else
     {
      crc = crc << 1;
     }
    }
    return crc & 0xffff;
}
uint16 CalculateCRC16(void *Pointer, uint16 index, uint16 count)
{
    uint16 crc = 0;
    uint8 *dp;


    dp = (uint8 *)Pointer;
    while (count > 0)
    {
     crc = calcByte(crc, dp[index++]);
     count--;
    }
    return crc;
}

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /3 下一条