Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo utilizar VB para crear un programa CRC de 8 bits

Cómo utilizar VB para crear un programa CRC de 8 bits

¡Es un poco difícil lidiar con la alineación de VB!

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

ReturnData(1) = CRC16Lo 'CRC bajo

CRC16 = ReturnData

Función final