crc的校验原理及其软件实现

crc的校验原理及其软件实现

ID:14518292

大小:56.00 KB

页数:6页

时间:2018-07-29

crc的校验原理及其软件实现_第1页
crc的校验原理及其软件实现_第2页
crc的校验原理及其软件实现_第3页
crc的校验原理及其软件实现_第4页
crc的校验原理及其软件实现_第5页
资源描述:

《crc的校验原理及其软件实现》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、CRC的校验原理及其软件实现随着数据采集系统的功能日益强大,以及微型计算机的普及,在现代工业中,利用微机进行数据通讯的工业控制应用得也越来越广泛。特别是在大规模高精度数据采集系统中,对数据进行分析和计算将占用很大一部分单片机的资源,可以将采集到的数据通过串行通讯方式传送给PC机,由PC机来完成数据的处理工作。但是由于传输距离、现场状况等诸多可能出现的因素的影响,计算机与受控设备之间的通讯数据常会发生无法预测的错误。为了防止错误所带来的影响,在数据的接收端必须进行差错校验。虽然差错校验也可以完全由硬件来承担,但由于单片机和PC都具有很强的软件编程能力,这就为实施软件的

2、差错校验提供了前提条件,而软件的差错校验有经济实用并且不增加硬件开销的优点。  1 CRC法的原理  传统的差错检验法有:奇偶校验法,校验和法,行列冗余校验法等。这些方法都是在数据后面加一定数量的冗余位同时发送出去,例如在单片机的通讯方式2和3中,TB8就可以作为奇偶校验位同数据一起发送出去,在数据的接收端通过对数据信息进行比较、判别或简单的求和运算,然后将所得和接收到的冗余位进行比较,若相等就认为数据接收正确,否则就认为数据传送过程中出现错误。但是冗余位只能反映数据行或列的奇偶情况,所以这类检验方法对数据行或列的偶数个错误不敏感,漏判的概率很高。因此,此种方法的可

3、靠性就差。  循环冗余码校验英文名称为CyclicalRedundancyCheck,简称CRC。它是利用除法及余数的原理来作错误侦测(ErrorDetecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。由于这种方法取得校验码的方式具有很强的信息覆盖能力,所以它是一种效率极高的错误校验法。错误的概率几乎为零。在很多的仪器设备中都采用这种冗余校验的通讯规约。  根据应用环境与习惯的不同,CRC又可分为以下几种标准:  ①CRC-12码;②C

4、RC-16码;  ③CRC-CCITT码;④CRC-32码。  CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则是用来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码大都被采用在一种称为Point-to-Point的同步传输中。  2 CRC校验码的生成过程  我们以最常用的CRC-16码作为例子进行说明。  冗余循环码包括2个字节,即16位二进制数。先预置16位寄存器全部为1,再逐步把每8位的数据信息进行处理。在进行CRC计算时只用8位数据位,起始位和停止位,如有奇偶校验位的话

5、也包括奇偶校验位,都不参与CRC计算。  在计算CRC码时,8位数据与寄存器的数据相异或,得到的数据向低位移一位,用0填补最高位,再检查最低位。如果最低位为1,把寄存器的内容与预置数相异或;若最低位为0,则不进行异或计算。  这个过程一直重复8次,第8次移位后,下一个8位数据再与现在寄存器中的内容相异或,这个过程和以上一样重复8次。当所有的信息处理完后,最后寄存器中的内容即为CRC码。这个CRC码将由发送设备跟在数据的最后一起发送。  计算CRC的步骤为:  (1)预置16位寄存器位十六进制数FFFF(即全为1)。称此寄存器位CRC寄存器。  (2)把第一个8位数据

6、与16位寄存器的低位相异或,将结果放于CRC寄存器中;  (3)把寄存器的内容右移一位(朝低位),用0填补最高位,检查最低位;  (4)如果最低位为0,重复第三步(再次移位);  如果最低位为1,CRC寄存器与多项式码进行异或;  (5)重复步骤3和4,直到右移8次,这样整个8位数据全部进行了处理;  (6)重复步骤2到5,进行下一个8位数据的处理;  (7)最后得到的CRC寄存器即为CRC码。3CRC软件实现  /*************************************************  函数功能:求CRC16校验值程函数  修改日期:2

7、006.7.4  待修改: OK  参数:   *str指向txbuf,待发送数组;  num为报文字节数  最后计算结果为2字节数。  MODBUS传输时,CRC低位在前,crc%256求低位;  高位在后,crc/256求高位。*************************************************/  uintcrc16(uchar*str,uintnum)//CRC计算子程序,  {  uchari;  //uintcrc;  crc=0xffff;  for(i=0;i    {  arc=(str[i]^crc)&0x00

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。