首页 VB下的CRC校验程序(1)

VB下的CRC校验程序(1)

举报
开通vip

VB下的CRC校验程序(1)VB下的CRC校验程序(2008-06-0422:14:58)标签:杂谈 分类:串口VB下的CRC校验程序计算机技术不断发展,现代工业中,利用微机进行数据通讯工业控制应用也越来越广泛。传输距离、现场状况等诸多可能出现因素影响,计算机与受控设备之间通讯数据常会发生无法预测错误。防止错误所带来影响,一般通讯时采取数据校验办法,而循环冗余码校验是最常用校验方法之一。实际使用各种现场总线协议中,数据帧校验一般都采用这种检验方式。一、循环冗余码校验原理循环冗余码校验英文名称为CyclicalRedundancyChec...

VB下的CRC校验程序(1)
VB下的CRC校验程序(2008-06-0422:14:58)标签:杂谈 分类:串口VB下的CRC校验程序计算机技术不断发展,现代工业中,利用微机进行数据通讯工业控制应用也越来越广泛。传输距离、现场状况等诸多可能出现因素影响,计算机与受控设备之间通讯数据常会发生无法预测错误。防止错误所带来影响,一般通讯时采取数据校验 办法 鲁班奖评选办法下载鲁班奖评选办法下载鲁班奖评选办法下载企业年金办法下载企业年金办法下载 ,而循环冗余码校验是最常用校验方法之一。实际使用各种现场总线协议中,数据帧校验一般都采用这种检验方式。一、循环冗余码校验原理循环冗余码校验英文名称为CyclicalRedundancyCheck,简称CRC。它是利用除法及余数原理来作错误侦测(ErrorDetecting)。他将要发送数据比特序列当作一个多项式f(x)系数,发送时用双方预先约定生成多项式G(x)去除,求一个余数多项式,将余数多项式加到数据多项式之后发送到接收端,接收端同样用G(x)去除接收到数据,进行计算,然后把计算结果和实际接收到余数多项式数据进行比较,相同话 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 示传输正确。CRC校验检错能力强,容易实现,是目前应用最广检错码编码方式之一。国际标准中,生成多项式G(x)不同,CRC又可分为以下几种标准:①CRC-12码:  G(x)=X12X11X3X2X1②CRC-16码:  G(x)=X16X15X21③CRC-CCITT码:G(x)=X16X12X51④CRC-32码:  G(x)=X32X26X23X22X16X12X11X10X8X7X5X4X2X1X1CRC-12码通常用来传送6-bit字符串。CRC-16及CRC-CCITT码则用是来传送8-bit字符,其中CRC-16为美国采用,而CRC-CCITT为欧洲国家所采用。CRC-32码大都被采用一种称为Point-to-Point同步传输中。下面以最常用CRC-16为例来说明其生成过程。CRC-16码由两个字节构成,开始时CRC寄存器每一位都预置为1,然后把CRC寄存器与8-bit数据进行异或,之后对CRC寄存器从高到低进行移位,最高位(MSB)位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)为1,则把寄存器与预定义多项式码进行异或,否则LSB为零,则无需进行异或。重复上述由高至低移位8次,第一个8-bit数据处理完毕,用此时CRC寄存器值与下一个8-bit数据异或并进行如前一个数据似8次移位。所有字符处理完成后CRC寄存器内值即为最终CRC值。下面为CRC计算过程:1.设置CRC寄存器,并给其赋值FFFF(hex)。2.将数据第一个8-bit字符与16位CRC寄存器低8位进行异或,并把结果存入CRC寄存器。3.CRC寄存器向右移一位,MSB补零,移出并检查LSB。4.LSB为0,重复第三步;若LSB为1,CRC寄存器与多项式码相异或。5.重复第3与第4步直到8次移位全部完成。此时一个8-bit数据处理完毕。6.重复第2至第5步直到所有数据全部处理完成。7.最终CRC寄存器内容即为CRC值。二、循环冗余码校验程序编写明白了CRC校验码产生过程,编写起程序来就非常容易了。VisualBasic广泛普及以及其数据通讯中重要位,下面就以VB语言来编写CRC生成程序,其它语言只需稍做修改即可。编写CRC校验程序有两种办法:一种为计算法,一种为查表法。通常使用查表法,尤其VB程序中,可以大大降低CPU运算时间。下面对两种方法分别讨论。1.计算法计算法就是依据CRC校验码产生原理来MATCH_ word word文档格式规范word作业纸小票打印word模板word简历模板免费word简历 _1713997108356_0程序。其优点是模块代码少,修改灵活,可移植性好。其缺点为计算量大。便于理解,这里假定了三位数据,而多项式码为A001(hex)。窗体上放置一命令按钮Command1,并添加如下代码:PrivateSubCommand1_Click()DimCRC()AsByteDimd()AsByte'待传输数据ReDimd(2)AsByted(0)=123d(1)=112d(2)=135CRC=CRC16(d)'调用CRC16计算函数'CRC(0)为高位'CRC(1)为低位EndSub注意:数据传输时CRC低位可能前,而高位后。FunctionCRC16(data()AsByte)AsStringDimCRC16LoAsByte,CRC16HiAsByte  'CRC寄存器DimCLAsByte,CHAsByte    '多项式码&HA001DimSaveHiAsByte,SaveLoAsByteDimiAsIntegerDimFlagAsIntegerCRC16Lo=&HFFCRC16Hi=&HFFCL=&H1CH=&HA0Fori=0ToUBound(data)CRC16Lo=CRC16LoXordata(i)'每一个数据与CRC寄存器进行异或ForFlag=0To7SaveHi=CRC16HiSaveLo=CRC16LoCRC16Hi=CRC16Hi\2   '高位右移一位CRC16Lo=CRC16Lo\2   '低位右移一位If((SaveHiAnd&H1)=&H1)Then'高位字节最后一位为1CRC16Lo=CRC16Loor&H80  '则低位字节右移后前面补1EndIf       '否则自动补0If((SaveLoAnd&H1)=&H1)Then'LSB为1,则与多项式码进行异或CRC16Hi=CRC16HiXorCHCRC16Lo=CRC16LoXorCLEndIfNextFlagNextiDimReturnData(1)AsByteReturnData(0)=CRC16Hi    'CRC高位ReturnData(1)=CRC16Lo    'CRC低位CRC16=ReturnDataEndFunction2.查表法查表法优缺点与计算法正好相反。便于比较,这里所有假定与计算法完全相同,都而窗体上放置一个Command1按钮,其代码部分与上面也完全一致。下面只介绍CRC函数编写源代码。PrivateFunctionCRC16(data()AsByte)AsStringDimCRC16HiAsByteDimCRC16LoAsByteCRC16Hi=&HFFCRC16Lo=&HFFDimiAsIntegerDimiIndexAsLongFori=0ToUBound(data)iIndex=CRC16LoXordata(i)CRC16Lo=CRC16HiXorGetCRCLo(iIndex)  '低位处理CRC16Hi=GetCRCHi(iIndex)     '高位处理NextiDimReturnData(1)AsByteReturnData(0)=CRC16Hi  'CRC高位ReturnData(1)=CRC16Lo  'CRC低位CRC16=ReturnDataEndFunction'CRC低位字节值表FunctionGetCRCLo(IndAsLong)AsByteGetCRCLo=Choose(Ind1,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,_&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40,&H1,&HC0,&H80,&H41,&H1,&HC0,&H80,&H41,&H0,&HC1,&H81,&H40)EndFunction'CRC高位字节值表FunctionGetCRCHi(IndAsLong)AsByteGetCRCHi=Choose(Ind1,&H0,&HC0,&HC1,&H1,&HC3,&H3,&H2,&HC2,&HC6,&H6,&H7,&HC7,&H5,&HC5,&HC4,&H4,&HCC,&HC,&HD,&HCD,&HF,&HCF,&HCE,&HE,&HA,&HCA,&HCB,&HB,&HC9,&H9,&H8,&HC8,&HD8,&H18,&H19,&HD9,&H1B,&HDB,&HDA,&H1A,&H1E,&HDE,&HDF,&H1F,&HDD,&H1D,&H1C,&HDC,&H14,&HD4,&HD5,&H15,&HD7,&H17,&H16,&HD6,&HD2,&H12,&H13,&HD3,&H11,&HD1,&HD0,&H10,&HF0,&H30,&H31,&HF1,&H33,&HF3,&HF2,&H32,&H36,&HF6,&HF7,&H37,&HF5,&H35,&H34,&HF4,&H3C,&HFC,&HFD,&H3D,&HFF,&H3F,&H3E,&HFE,&HFA,&H3A,&H3B,&HFB,&H39,&HF9,&HF8,&H38,&H28,&HE8,&HE9,&H29,&HEB,&H2B,&H2A,&HEA,&HEE,&H2E,&H2F,&HEF,&H2D,&HED,&HEC,&H2C,&HE4,&H24,&H25,&HE5,&H27,&HE7,&HE6,&H26,&H22,&HE2,&HE3,&H23,&HE1,&H21,&H20,&HE0,&HA0,&H60,_&H61,&HA1,&H63,&HA3,&HA2,&H62,&H66,&HA6,&HA7,&H67,&HA5,&H65,&H64,&HA4,&H6C,&HAC,&HAD,&H6D,&HAF,&H6F,&H6E,&HAE,&HAA,&H6A,&H6B,&HAB,&H69,&HA9,&HA8,&H68,&H78,&HB8,&HB9,&H79,&HBB,&H7B,&H7A,&HBA,&HBE,&H7E,&H7F,&HBF,&H7D,&HBD,&HBC,&H7C,&HB4,&H74,&H75,&HB5,&H77,&HB7,&HB6,&H76,&H72,&HB2,&HB3,&H73,&HB1,&H71,&H70,&HB0,&H50,&H90,&H91,&H51,&H93,&H53,&H52,&H92,&H96,&H56,&H57,&H97,&H55,&H95,&H94,&H54,&H9C,&H5C,&H5D,&H9D,&H5F,&H9F,&H9E,&H5E,&H5A,&H9A,&H9B,&H5B,&H99,&H59,&H58,&H98,&H88,&H48,&H49,&H89,&H4B,&H8B,&H8A,&H4A,&H4E,&H8E,&H8F,&H4F,&H8D,&H4D,&H4C,&H8C,&H44,&H84,&H85,&H45,&H87,&H47,&H46,&H86,&H82,&H42,&H43,&H83,&H41,&H81,&H80,&H40)EndFunction
本文档为【VB下的CRC校验程序(1)】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_654168
暂无简介~
格式:doc
大小:64KB
软件:Word
页数:8
分类:
上传时间:2022-08-18
浏览量:1