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