Problemas con la comunicación de verificación CRC en VB
Subcomando privado 1_Click()
Mostrar CRC(2) como bytes
Devuelve d() como el byte de datos a ser transferido.
Cambiar el tamaño de datos(7) a bytes
Datos(0) = 1
Datos(1) = 3
Datos (2 ) = 0
Datos (3) = 0
Datos (4) = 0
Datos (5) = 1
Llamar CRC16 (datos, ubound (datos) -2, datos (6), datos (7))'Llame a la función de cálculo CRC16.
CRC(0) es de nivel alto.
CRC(1) es de nivel bajo.
Conector final
La función CRC16 (datos() son bytes, I es un número entero, ByRef ReturnDatalo es bytes, ByRef ReturnDatahi es bytes) es una cadena
' Dimcrc16lo asbyte, crc16hi asbyte' registro CRC
Dim CL es byte, CH es byte' código polinómico HA001
Dim SaveHi es byte, SaveLo es byte
Bandera tenue en forma de número entero
CRC 16Lo = amp HFF
CRC 16Hi = amp HFF
CL = ampH1
p>CH = amp ha 0
Para i = 0 a UBound(data)-2
Crc16lo = crc16lo xor data(I)' cada dato con registro Crc Realice la operación xor.
Para banderas = 0 a 7
SaveHi = CRC16Hi
SaveLo = CRC16Lo
' CRC16Hi = CRC16Hi \ 2 'Desplazar bit alto correcto Una persona.
"CRC16Lo = CRC16Lo \ 2" mueve el bit bajo un bit hacia la derecha.
If ((SaveHi and amph 1) = amp; H 1) Si el último bit del byte alto es 1.
CRC 16Lo = CRC 16Lo O amp; H80 ', el byte de orden inferior se desplaza hacia la derecha, seguido de 1.
' End If 'De lo contrario, se completará automáticamente con 0.
Si ((SaveLo and amph 1) = amp;H1) entonces, si LSB es 1, realice XOR con el código polinómico.
CRC16Hi = CRC16Hi XOR canal
CRC 16Lo = CRC 16Lo Xor CL
Terminará si...
Siguiente bandera
Siguiente yo
ReturnDatahi = CRC16Hola 'bit alto CRC.
ReturnDatalo = CRC16Lo 'Bit CRC bajo.
Finalizar función
Este programa ha pasado la prueba, puedes probarlo.