CRC计算方法.pdfVIP

  • 39
  • 0
  • 约 3页
  • 2017-07-29 发布于浙江
  • 举报
CRC计算方法

CRC-16 计算CCRRCC--1166循环冗余校验码的程序开发 ProgramDevelopment of CalculatingCRC-16 CyclicRedundancy CheckCode PPrrooggrraammDDeevveellooppmmeenntt ooff CCaallccuullaattiinnggCCRRCC--1166 CCyycclliiccRReedduunnddaannccyy CChheecckkCCooddee 【内容摘要】CRC-16 是检测数据在发送过程中发生错误的常用校验方法,本文通过从工程应用的角 度,讲述如何实现CRC-16的程序开发,并给出了VisualBasic和VisualC++程序代码,给从事工业控 制的人员在写通信程序的时候提供一些有价值的参考。 一、前言 CRC 的计算方式是将欲传输的数据块视为一堆连续位所构成的整个数值,将此数值除以一个特定 的除数,通常以二进制表示,此除数称为生成多项式(ANSI CRC-16 的生成多项式为:x16+x15+x2 + 1)。目前较常用的CRC 位数目有8和16以及32,在这里只讲述如何写CRC 位数目为16的程序。 CRC 位数目越大,数据的错误检测率则越高,但必须多花一些时间进行数据的计算。 CRC-16 二、CCRRCC--1166计算步骤 CRC-16 的计算方法有两种:查表法与计算法,在这里只讲述计算法。本人在2000年在江西亚东水泥 公司上班时,在某电力仪表上的说明书中摘录下来的计算CRC-16步骤如下: 1、Load a16-bitregisterwith FFFFhex.CallthistheCRCregister. 2、Exclusive ORthefirst8-bitbyte of themessagewith thelow-order byte of the16-bitCRC,putting theresultintheCRCregister. 3、ShifttheCRC registeronebittotheright(towardtheLSB), zero-fillingtheMSB. Extractand Examine. 4、IftheLSBwas 1:Exclusive ORtheCRC register withpolynomial valueA001hex.IftheLSB was 0:Repeat step 3(anothershift). 5、Repeat step 3and4until8shiftshavebeen performed.Whenthisisdone,acomplete8-bitbyte willhavebeen processed. 6、Repeat step 2through5for thenext8-bitbyte of themmessage. 7、Thefinalcontentof theCRCregister istheCRC value. 中文解释如下: 1、定义一个初始值为FFFF的16位的变量,该变量称为CRC 寄存器。(想想在程序中,应该怎 么表示16 位的变量呢?) 2、把欲发送或接收消息的高8 位和CRC 寄存器的底8位作异或运算,并把结果在赋到CRC 寄 存器。 3、CRC寄存器右移1位(朝最低位),同时最高位添零。取出并检查最低位是否为1。( Visual Basic 里如何做移位的运算呢?) 4、如果为1,则CRC 寄存器与多项式A001异或;如果为0,则重复第3步的动作。(VisualBasic 里如何判断一个字节里某个位的值呢?) 5、重复3 和4直到完成了8次移位。这样完整的8 位字节将完成处理了。 6、对于下一个8 位字节的处理就是重复第2 步到第5步了 7、把所有的欲发送或接收消息这样处理后, CRC 寄存器里的值就是我们最终需要得到的CRC 校验码。 如果你能正确回答我的问题,那么恭喜你,你自己可以用VisualBasic写数据采集卡的控制程序 了。 EndSub Visual C++ 三、VViissuuaall CC++++程序实现 程序界面

文档评论(0)

1亿VIP精品文档

相关文档