crc8.c
来自「KEIL C编译 到位监控程序」· C语言 代码 · 共 57 行
C
57 行
#include <REG52.H>
#define uchar unsigned char
#define CMC 0x8c //crc8_multinomial_code
#define LENGTH 24 //LENGTH = 24
extern uchar CMDIN[LENGTH]; //Command in length=24 数据(命令) 接收 缓冲区
//extern uchar crc8(uchar *ptr, uchar len); //crc8校验
//uchar crc_test_data[7]={0x28,0x6d,0x00,0x85,0x00,0x00,0x00}; //if:test_data OK! result=0xCF;
/**********************************************************************
** 函数名称: crc8()
** 功能描述: 数组的CRC校验
** 输 入: *ptr:数组首地址
len :数组的长度
** 输 出: crc校验结果
** 全局变量: CMC:crc多项因子
** 调用模块: 无
***********************************************************************/
uchar crc8(uchar *ptr, uchar len) // crc8_multinomial=x(8)+x(5)+x(4)+1; 00110001->10001100=0x8c
{
uchar i;
uchar crc=0;
while(len--!=0)
{
for(i=0x01;i!=0;i <<= 1)
{
if((crc&0x01) != 0) {crc >>= 1; crc ^= CMC;}
else crc >>= 1;
if((*ptr&i) != 0) crc ^= CMC;
}
ptr++;
}
return(crc);
}
/**********************************************************************
** 函数名称: crc8_test()
** 功能描述: 数组的CRC校验是否通过测试
** 输 入: *ptr:数组首地址
len :数组的长度
** 输 出: crc校验通过结果 (0=通过)
** 全局变量: 无
** 调用模块: crc8
***********************************************************************/
bit crc8_test(uchar *ptr, uchar len)
{
uchar Result_crc8;
Result_crc8=crc8(ptr,(len-1)); //Result_crc8==0,crc8 pass
if(Result_crc8==0) return 0; //0,crc8 pass
else return 1;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?