首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

!(版主说明:CRC)

2012-12-30 
求助!!!!(版主说明:CRC)本帖最后由 bcrun 于 2012-12-12 17:35:59 编辑谁帮忙解释一下下面两段代码的意思

求助!!!!(版主说明:CRC)
本帖最后由 bcrun 于 2012-12-12 17:35:59 编辑 谁帮忙解释一下下面两段代码的意思啊,最好详细点!
Public Function CRC(Brr() As Byte) As Long          'CRC校验核,全部数据进行校验
   Dim i As Integer, j As Integer
   Dim TempVal As Long
   Dim YWval As Long
   Dim LSB As Integer
   
   TempVal = &HFFFF&
   
   For i = 0 To UBound(Brr())
       TempVal = TempVal Xor Brr(i)
       For j = 1 To 8
           YWval = Int(TempVal / 2)
           LSB = TempVal Mod 2
           If LSB = 1 Then
              YWval = YWval Xor &HA001&
           End If
           TempVal = YWval
       Next j
   Next i
   CRC = TempVal Mod 65536
      
End Function

这是一段,下面又是一段

Private Sub Command11_Click()
    rsend(0) = Text2.Text
    rsend(1) = &H4
    rsend(2) = 0
    rsend(3) = 0
    rsend(4) = 0
    rsend(5) = &HD
    ValCRC = CRC(rsend)
    Jyh0 = ValCRC Mod 256
    Jyh1 = Int(ValCRC / 256)
    send(0) = rsend(0)
    send(1) = rsend(1)
    send(2) = rsend(2)
    send(3) = rsend(3)
    send(4) = rsend(4)
    send(5) = rsend(5)
    send(6) = Jyh0
    send(7) = Jyh1
    MSComm1.Output = send
End Sub




[解决办法]
前面的CRC()是计算一个字节数组的CRC校验值的.
_Click()是建立一个数据帧的,数据来自text1.text,然后固定5个数据,4,0,0,0,D,下来数前面6个数据的CRC校验,校验值被分成了2个字节.
最后数据帧被转到send数组,被从串口mscomm1发送出去了
[解决办法]
上面的一段是一个 CRC-16 函数,按 CRC 的算法定义写的,逐位处理。现在流行的写法,已经不再这样做,而是采用查表法,效率更高。

下面一段是串口发送操作。1 字节用户输入的编码,接下来是 4, 0, 0, 0, 回车。求出这 6 字节的 CRC,附在后面一起发送。

热点排行