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 + -
显示快捷键?