类VB语言 CRC-8 (X^7+X^6+X^5+X^2+1)校验

1、引言

      循环冗余码校验英文名称为Cyclical Redundancy Check,简称CRC。它是利用除法及余数的原理来作错误侦测(Error Detecting)的。实际应用时,发送装置计算出CRC值并随数据一同发送给接收装置,接收装置对收到的数据重新计算CRC并与收到的CRC相比较,若两个CRC值不同,则说明数据通讯出现错误。

         而VB语言虽然在开发PC软件中显得有些过时了,但是它简单易于掌握,所以在很多工控产品用任然有大量应用,工控产品应用过程中通常需要进行大量串口通讯,因而不可避免的需要计算CRC校验码,尤其是对于一些非标协议,需要根据协议编写计算CRC校验码的程序。

2、CRC-8计算步骤

(1). CRC寄存器初始值为 0x00。
(2).这里举例的 CRC-8 计算的模型为:X^7+X^6+X^5+X^2+1,得出多项式:0xE5(11100101 B)。
(3). 预置 8 位寄存器为十六进制 0x00(即全为 0) ,称此寄存器为 CRC 寄存器;
(4). 把第一个 8 位数据与 8 位 CRC 寄存器的相异或,把结果放于 CRC 寄存器;
(5). 检测相异或后的CRC寄存器的最高位(第7位),若最高位为1,CRC寄存器先左移1位,再与多项式0x07H进行异或;若为0,则CRC寄存器左移1位,无需与多项式进行异或。
(6). 重复步骤 3 ,直到右移 8 次,这样整个 8 位数据全部进行了处理;
(7). 重复步骤 2 到步骤 4,进行下一个 8 位数据的处理;
(8). 最后得到的 CRC 寄存器即为 CRC 校验码。

3、计算法

Dim CRCFull AS integer           //定义CRCFull为整数,用于存储计算过程中的值
Dim CRCLSB AS integer          //定义CRCLSB为整数,用于判断计算过程中最高位是否为1
Dim n AS integer           //定义n为整数,用于控制计算的循环次数
Dim Str AS string           //定义Str为字符串,用于存储需要参与计算的16进制格式的字符串数据,例如:BA430181000202F2
Dim CRC AS string         //定义CRC为字符串,用于存储最终计算出的CRC校验

Len=!Len(Str)           //取字符串长度,由于类VB语言一般由厂家自行定义函数格式,这里仅为举例,其它的类VB语言可以自行查询手册,对函数进行替换,以下各个函数也是这样。

n=1           //起始位置从1开始

CRCFull=0           //CRC-8初值为0

While(n<=Len)              //循环每个字节    

        i=0
    CRCFull=!BitXor(CRCFull,!Hex2I(!mid(Str,n,2)))                  //CRC值与字符串按位异或,其中!BitXor(x,y)函数为按位异或,x、y为8位整数。!mid(Str,n,2)函数为对字符串Str,从左到右第n位,取2位字符。!Hex2I(x)函数为 把16进制字符串转换为数值。

     While(i<8)              //循环每个位

            CRCLSB=!BitTest(CRCFull,7)                 //判断最高位是否为1
        CRCFull=!BitLShift(CRCFull,1)                 //左移一位

                IF CRCLSB=1 THEN 
            CRCFull=!BitXor(CRCFull,229)                     //如果最高位为1,则与多项式X^7+X^6+X^5+X^2+1,即11100101,E5,按位异或
        EndIF

                i=i+1

     Endwhile

        n=n+2

Endwhile

CRC=!Prifix(!I2Hex(CRCFull),"00",2)                    //不足两位补足两位

4、在线CRC校验网址

网址:CRC(循环冗余校验)在线计算_ip33.comCRC(循环冗余校验)在线计算icon-default.png?t=N7T8http://www.ip33.com/crc.html


  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值