3. Cambie el registro CRC un bit a la derecha (hacia el LSB), rellenando con ceros el MSB.
Extraiga y examine el LSB.
4. (si el LSB era 0): Repita el paso 3 (otro cambio). (si el LSB era 1): Exclusivo O el registro
CRC con el valor polinómico 0xA001 (1010 0000 0000 0001).
5. Repita los pasos 3 y 4 hasta que se hayan realizado 8 cambios. Una vez realizada esta
operación, se habrá procesado un byte completo de 8 bits.
6. Repita los pasos 2 a 5 para el siguiente byte de 8 bits del mensaje. Continúe haciendo esto
hasta que se hayan procesado todos los bytes.
7. El contenido final del registro CRC es el valor CRC.
8. Una vez que el CRC está colocado en el mensaje, los bytes inferior y superior deben
barrerse tal como se describe a continuación.
Colocación del CRC en el mensaje
Cuando el CRC de 16 bits (dos bytes de 8 bits) se transmite al mensaje, el byte de bajo orden
se transmite primero, seguido del byte de orden alto.
Por ejemplo, si el valor CRC es 1241 hex (0001 0010 0100 0001):
Dirección
Func
Ejemplo de programación CRC
/* Tabla de valores CRC para byte de alto orden */
static __flash unsigned char auchCRCHi[] = {
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80,
0x41, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00,
0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81,
0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0,
0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00, 0xC1, 0x81, 0x40, 0x01,
0xC0, 0x80, 0x41, 0x01,
0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41,
0x00, 0xC1, 0x81, 0x40,
0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80,
0x41, 0x00, 0xC1, 0x81,
0x40, 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1,
0x81, 0x40, 0x01, 0xC0,
0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x00,
0xC1, 0x81, 0x40, 0x01,
MAG 8000 Modbus RTU
Instrucciones de servicio, 04/2016, A5E03828422-AA
Recuento
Datos n
de datos
Datos n+1
Datos n+2
B.2 Cálculo CRC
Datos n+x
CRC LO
0x41
Anexo
CRC HI
0x12
85