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

📄 crc.c

📁 单片机程序设计基础 随书光盘
💻 C
字号:
//CRC校验算法

unsigned char S[130];	//原始数据为128字节,CRC校验2字节

unsigned int CRC ( ) //CRC校验算法(共130字节)
{
	unsigned int i,j,m,n,p,q,c=0x1021;
	m=S[0]*256+S[1];	//首先取两个字节,拼成16位整数,作为基数
	for (i=1;i<=64;i++) {	//其余128字节分64批处理,每批2字节
		n=S[2*i]*256+S[2*i+1];	//取两个字节,拼成16位整数
		for (j=0;j<16;j++) {	//每批计算16次,每次处理1比特
			p = m & 0x8000;	//保留基数的最高位
			q = n & 0x8000;	//保留当前整数的最高位
			m <<= 1 ; n <<= 1 ;//两者均左移一位
			if (q) m++ ;	//当前整数的最高位拼入基数的最低位
			if (p) m ^= c ;	//如果基数移出的最高位为1,则“减去”0x1021
			}
		}
	return m;	//返回校验结果	
}

 main ( )
{
	int i;
	unsigned int c;
	for (i=0;i<128;i++) S[i]=i;//设置128字节原始数据
	S[128]=S[129]=0;	//将最后两个字节设置为零
	c = CRC ( ) ;		//进行CRC校验
	S[128]=c/256;S[129]=c%256;//将校验结果装入最后两个字节
	c = CRC ( ) ;		//再进行CRC校验,结果应该为零
	S[4] ^= 0x20;	//引入一个差错
	c = CRC ( ) ;	//再进行CRC校验,结果不为零,发现差错
	S[6] ^= 0xff;	//再引入8个差错
	c = CRC ( ) ;	//再进行CRC校验,结果不为零,发现差错
	while (1) ; //在这一行设置断点,中止程序运行,以便观察程序运行的结果 
}

⌨️ 快捷键说明

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