快速计算CRC校验(异或)的方法

        在嵌入式的通信协议中,为了提高通信的鲁棒性,经常会对数据帧进行校验(其中一种常用方式是异或)。之前的做法是写 C程序进行校验,并输出结果。其实另一种方式是可以用BCC校验在线计算器进行校验值计算。

BCC校验在线计算方式:

http://www.ip33.com/bcc.html

C程序计算方式:

#include <stdio.h>
unsigned char check_sum;

int main(void)
{
//Matrix:	
	//        header+lenth+ cmd  + wgth + whtl + volth+ voltl+ year + mon  + day  + hour + min  + sec  + status+ SW_h + SW_l + hw_h + hw_l + TS_F;
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x01 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z12 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x01 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z12 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x02 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z13 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x02 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z13 Stop is %x\r\n",check_sum);
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x03 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z14 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x03 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z14 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x04 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z23 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x04 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z23 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x05 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z24 Start is %x\r\n",check_sum);  
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x05 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z24 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z34 Start is %x\r\n",check_sum); 
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x04 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+160hz+Z34 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x06 ^ 0x01 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z12 Start is %x\r\n",check_sum); 
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x06 ^ 0x01 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z12 Stop is %x\r\n",check_sum); 
	
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x06 ^ 0x03 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z14 Start is %x\r\n",check_sum); 
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x06 ^ 0x03 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z14 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x06 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z34 Start is %x\r\n",check_sum); 
	check_sum=0xC5 ^ 0x12 ^ 0X10 ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x41  ^ 0x06 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("50khz+320hz+Z34 Stop is %x\r\n",check_sum); 
	
	check_sum=0xC5 ^ 0x12 ^ 0XCC ^ 0x2E ^ 0XE0 ^ 0x01 ^ 0x90 ^ 0x18 ^ 0x11 ^ 0x14 ^ 0x10 ^ 0x20 ^ 0x59 ^ 03 ^ 0x43  ^ 0x04 ^ 0x06 ^ 0x00 ^ 0x01 ^ 0x01;
	printf("Calibrition Start is %x\r\n",check_sum);
	
} 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值