⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 orc8.c

📁 一个很实用的CRC程序 是用AVR单片机 希望大家喜欢
💻 C
字号:
#include "main.h"

#define	cCRC_SpecCode		0x81		//加密
#define CRC8INIT			0x00
#define CRC8POLY			0x18              //0X18 = X^8+X^5+X^4+X^0

const unsigned char CRC8_Table[] PROGMEM =  { 
   0,94,188,226,97,63,221,131,194,156,126,32,163,253,31,65, 
   157,195,33,127,252,162,64,30, 95,1,227,189,62,96,130,220, 
   35,125,159,193,66,28,254,160,225,191,93,3,128,222,60,98, 
   190,224,2,92,223,129,99,61,124,34,192,158,29,67,161,255, 
   70,24,250,164,39,121,155,197,132,218,56,102,229,187,89,7,             
   219,133,103,57,186,228,6,88,25,71,165,251,120,38,196,154, 
   101,59,217,135,4,90,184,230,167,249,27,69,198,152,122,36,                         
   248,166,68,26,153,199,37,123,58,100,134,216,91,5,231,185,             
   140,210,48,110,237,179,81,15,78,16,242,172,47,113,147,205, 
   17,79,173,243,112,46,204,146,211,141,111,49,178,236,14,80, 
   175,241,19,77,206,144,114,44,109,51,209,143,12,82,176,238, 
   50,108,142,208,83,13,239,177,240,174,76,18,145,207,45,115, 
   202,148,118,40,171,245,23,73,8,86,180,234,105,55,213,139, 
   87,9,235,181,54,104,138,212,149,203, 41,119,244,170,72,22, 
   233,183,85,11,136,214,52,106,43,117,151,201,74,20,246,168, 
   116,42,200,150,21,75,169,247,182,232,10,84,215,137,107,53 
  }; 


unsigned char crc8 ( unsigned char *data_in, unsigned char number_of_bytes_to_read )
{

	unsigned char  crc;
	unsigned char  loop_count;
	unsigned char  data;
	crc = CRC8INIT;

	for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++)
	{
		data = data_in[loop_count];
		//crc = _crc_ibutton_update(crc, data);
		crc = pgm_read_byte ( &CRC8_Table[crc ^ data]);
	}
	
	crc ^= cCRC_SpecCode;
	return crc;

}


unsigned char	crc8c ( unsigned char *data_in, uint16_t number_of_bytes_to_read )
{

	unsigned char	 crc;

	uint16_t loop_count;


	unsigned char  data;

	crc = CRC8INIT;



	for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++)
	{
		data = data_in[loop_count];
		crc = pgm_read_byte ( &CRC8_Table[crc ^ data]);
	}
	
	crc ^= cCRC_SpecCode;
	return crc;

}



unsigned char	crc8b ( unsigned char *data_in, uint16_t number_of_bytes_to_read )

{

	unsigned char	 crc;

	uint16_t loop_count;

	unsigned char  bit_counter;

	unsigned char  data;

	unsigned char  feedback_bit;
	

	crc = CRC8INIT;

	for (loop_count = 0; loop_count != number_of_bytes_to_read; loop_count++)

	{
		data = data_in[loop_count];		

		bit_counter = 8;

		do {

			feedback_bit = (crc ^ data) & 0x01;

	

			if ( feedback_bit == 0x01 ) {

				crc = crc ^ CRC8POLY;

			}

			crc = (crc >> 1) & 0x7F;

			if ( feedback_bit == 0x01 ) {

				crc = crc | 0x80;

			}
			data = data >> 1;

			bit_counter--;

		

		} while (bit_counter > 0);

	}
	return crc;

}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -