高级会员

- 积分
- 570
- 金钱
- 570
- 注册时间
- 2013-11-28
- 在线时间
- 51 小时
|
发表于 2015-6-27 17:36:28
|
显示全部楼层
分享一个modbus CRC16的程序算法
/*****************************************************************************/
// 函 数 名:uint ModbusCRC16(char *ptr, int len)
// 入口参数:ptr - 数据指针
// len - 数据长度
// 出口参数:CRC值
// 功 能:计算指定数据的 Modbus CRC16。
/*****************************************************************************/
uint ModbusCRC16(char *ptr, int len)
{
uint crc = 0xFFFF;
uint i;
int movBit = 0;
while (--len >= 0)
{
crc ^= *ptr++;
i = 8;
do
{
//检查移出位是1或是0
if ((crc & (1 << 0)) > 0)
movBit = 1;
else
movBit = 0;
crc >>= 1;//右移一位
//移出位是1时,异或0xA001
if (movBit > 0)
{
crc ^= 0xA001;
}
}while (--i > 0);
}
return crc;
}
|
|