Cómo utilizar VB para crear un programa CRC de 8 bits
Programa de verificación CRC de VB, consulte la URL a continuación.
Cómo escribir un programa de verificación CRC con VB
Extraído de Internet
Cómo escribir un programa de verificación CRC con VB
Con el continuo desarrollo de la tecnología informática, el uso de microcomputadoras para la comunicación de datos se está utilizando cada vez más en la industria moderna y en el control industrial. El programa de suma de comprobación CRC fue escrito en VB. Debido a muchos factores posibles, como la distancia de transmisión y las condiciones del sitio, a menudo ocurren errores impredecibles en los datos de comunicación entre la computadora y el equipo controlado. Para evitar el impacto de los errores, la verificación de datos se utiliza generalmente en las comunicaciones y la verificación del código de redundancia cíclica es uno de los métodos de verificación más utilizados.
1. El principio de la verificación de redundancia cíclica
El nombre completo de la verificación de redundancia cíclica es verificación de redundancia cíclica (Cyclical Redundancy Check), o CRC para abreviar. Utiliza principios de división y resto para la detección de errores (detección de errores). En aplicaciones prácticas, el dispositivo emisor calcula el valor CRC y lo envía al dispositivo receptor junto con los datos. El dispositivo receptor vuelve a calcular el CRC de los datos recibidos y lo compara con el CRC recibido si los dos valores CRC son diferentes. , significa que los datos Hay un error en la comunicación.
Según los diferentes entornos y hábitos de aplicación, CRC se puede dividir en los siguientes estándares:
① Código CRC-12
② Código CRC-16;
③ Código CRC-CCITT;
④ Código CRC-32.
El código CRC-12 se suele utilizar para transmitir cadenas de 6 bits, mientras que los códigos CRC-16 y CRC-CCITT se utilizan para transmitir caracteres de 8 bits, donde en Estados Unidos se utiliza CRC-16. Estados Unidos y CRC-CCITT se utiliza en países europeos. El código CRC-32 se utiliza principalmente para un tipo de transmisión síncrona llamada punto a punto. .
A continuación se toma el CRC-16 más utilizado como ejemplo para ilustrar su proceso de generación.
El código CRC-16 consta de dos bytes. Cada bit del registro CRC está preestablecido en 1 al principio. Luego, el registro CRC es ortogonal a los datos de 8 bits. comienza desde el bit alto. Cambia al bit inferior, el bit más significativo (MSB) se complementa con 0 y el bit menos significativo (LSB, que se ha desplazado fuera del registro CRC después del cambio) se mueve a 0 si es 1. Si el bit LSB en el registro CRC es 0, muévalo a 0; si el bit LSB en el registro CRC es 0, muévalo a 1 si el bit LSB en el registro CRC es 0, muévalo a 1. Repita el cambio anterior de bit alto a bit bajo 8 veces. Después de procesar los primeros datos de 8 bits, use el valor del registro CRC en este momento para distinguirlos de los siguientes datos de 8 bits y realice los mismos 8 cambios. como los datos anteriores. Una vez procesados todos los caracteres, el valor en el registro CRC es el valor CRC final.
El siguiente es el proceso de cálculo de CRC:
1. Configure el registro CRC y asigne el valor FFFF (hexadecimal).
2. Utilice los 8 bits inferiores del registro CRC de 16 bits para aislar el primer carácter de 8 bits de los datos y almacenar el resultado en el registro CRC.
3 Desplace el registro CRC un bit hacia la derecha, rellene el MSB con ceros, desplace el LSB y verifique.
4 Si LSB es 0, repita el paso 3; si LSB es 1, diferencie el registro CRC con código polinómico.
5. Repita los pasos 3 y 4 hasta haber completado los 8 turnos. En este punto, se han procesado datos de 8 bits.
6. Repita los pasos 2 a 5 hasta que se hayan procesado todos los datos.
7. El contenido del último registro CRC es el valor CRC.
2. Programa de verificación de redundancia cíclica
Una vez que comprenda el proceso de generación de códigos de verificación CRC, es muy fácil escribir un programa. Debido a la gran popularidad de Visual Basic y su importante posición en la comunicación de datos, el programa de generación de CRC está escrito en lenguaje VB a continuación, y otros lenguajes solo necesitan modificarse ligeramente.
Hay dos métodos para escribir programas de verificación CRC: uno es el método de cálculo y el otro es el método de tabla de búsqueda. Ambos métodos se analizan a continuación.
1. Método de cálculo
El método de cálculo se basa en el principio del código de verificación CRC para diseñar el programa. Las ventajas son menos código de módulo, modificación flexible y buena portabilidad. La desventaja es que requiere muchos cálculos. Para facilitar la comprensión, se supone que los datos son de tres dígitos y el código polinómico es A001 (hexadecimal).
Coloque un botón de comando Command1 en el formulario y agregue el siguiente código:
Private Sub Command1_Click()
Dim CRC() As Byte
Dim d() Como Byte 'Datos a transmitir
ReDim d(2) Como Byte
d(0) = 123
d ( 1) = 112
d(2) = 135
CRC = CRC16(d) 'Llamar a la función de cálculo CRC16
'CRC (0) es alto
'CRC(1) es bajo
Fin sub
Nota: Durante la transmisión de datos, el bit bajo de CRC puede estar al frente y el bit alto puede estar atrás.
Función CRC16(data() Como Byte) Como Cadena
Dim CRC16Lo Como Byte, CRC16Hi Como Byte 'Registro CRC
Dim CL Como Byte, CH Como Byte 'Código polinómico y HA001
Atenuar SaveHi como byte, SaveLo como byte
Atenuar I como entero
Atenuar bandera como entero
CRC16Lo = &HFF
CRC16Hi = &HFF
CL = &H1
CH = &HA0
Para I = 0 a Ubound( data)
CRC16Lo = CRC16Lo Xor data(I) 'Cada dato Xor data(I) 'Cada dato al registro CRC
For Flag = 0 To 7
SaveHi = CRC16Hi
SaveLo = CRC16Lo
CRC16Hi = CRC16Hi \ 2 'Desplaza el byte alto un bit hacia la derecha
CRC16Lo = CRC16Lo \ 2 'Bajo Cambia el byte a la derecha un bit
If ((SaveHi And & H1) = & H1) Then 'Si el último bit del byte alto es 1
CRC16Lo = CRC16Lo Or & ; H80 'Luego desplaza el byte bajo hacia la derecha y agrega 1 delante
End If 'De lo contrario, se agregarán ceros automáticamente
If ((SaveLo And &H1) = & ; H1) Entonces 'si LSB es 1, ejecuta el código polinómico Dissimilar Or
CRC16Hi = CRC16Hi Xor CH
CRC16Lo = CRC16Lo Xor CL
End If<; / p>
Siguiente bandera
Siguiente I
Dim ReturnData(1)As Byte
ReturnData(0) = CRC16Hi 'CRC High p >
ReturnData(1) = CRC16Lo 'CRC bajo
CRC16 = ReturnData
Función final