Calculo del valor crc16 de una trama rs232 en un PIC16F877A

Amigos estoy tratando de calcular el valor crc16 de una trama rs232 en un pic 16F877A en el compilador CCS, el problema es como leer todos los datos que contienen la trama rs232 para poder hacer el calculo del valor crc16. ...
 
Generación del CRC
El Chequeo de Redundancia Cíclica (CRC) está compuesto por dos bytes, conteniendo un valor binario de 16 Bits.

El valor del CRC es calculado por el transmisor y adjuntado al mensaje a transmitir. El receptor calcula un CRC con el mensaje recibido y lo compara con el valor del CRC recibido. Si los valores no coinciden se produce un error.

El CRC comienza cargando un registro de 16 bits con todos 1's. Luego comienza un proceso de aplicación de los sucesivos bytes del mensaje al contenido del registro. Solo los 8 bits de datos son usados para generar el CRC. Los bits de inicio, parada y paridad no se utilizan para el CRC.

Durante la generación del CRC, se ejecuta una operación lógica XOR entre cada byte y el contenido del registro. Luego el resultado es desplazado en la dirección del bit menos significativo (LSB), ingresando un 0 en la posición del bit más significativo (MSB). El bit extraído es examinado. Si es un 1 se ejecuta una XOR entre el contenido del registro y un valor fijo. Si el bit extraído es 0 no se ejecuta la XOR.

Este proceso se repite hasta ejecutarse ocho desplazamientos.

Después del último desplazamiento se ejecuta una XOR entre el próximo byte y el valor del registro de 16 bits, realizando el procedimiento de desplazamientos des cripta anteriormente.
El contenido final del registro, después de aplicarse todos los bytes del mensaje, es el valor del CRC.

El procedimiento para generar el CRC es:

1. Cargar un registro de 16 bits con FFFFH (todos 1's). Este registro toma el nombre de registro CRC.

2. Ejecutar una XOR entre el primer byte del mensaje y el byte menos significativo del registro CRC, dejando el resultado en el registro CRC.

3. Desplazar el registro CRC un bit a la derecha (hacia el LSB), ingresando un 0 en el MSB. Extraer y examinar el LSB.

4. Si el LSB fue 0 repetir el paso 3 (otro desplazamiento). Si el MSB fue 1 realizar una XOR entre el registro CRC y el valor A001H (1010 0000 0000 0001 B).

5. Repetir los pasos 3 y 4 hasta completar ocho desplazamientos, dando como procesado un byte.

6. Repetir los pasos 2 a 5 para el próximo byte del mensaje. Continuar hasta que todos los bytes han sido procesados.

7. El contenido final del registro CRC es el valor CRC. Cuando el CRC (dos bytes) es transmitido en el mensaje, el byte menos significativo debe ser transmitido primero, seguido del byte más significativo.
 
Atrás
Arriba