求助!!!!(版主说明: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,附在后面一起发送。