Il controllo di ridondanza ciclica (altrettanto noto come CRC) è ampiamente utilizzato per la verifica dell’integrità dei dati nei sistemi di comunicazione: ecco come implementarlo su un PIC18F452.
Controllo CRC32 con PIC
Il listato 1 riporta l’implementazione dell’algoritmo CRC32 basato sul polinomio 04C11DB7 per microcontrollore PIC18F452. Questo tipo di controllo CRC è lo stesso utilizzato nei pacchetti Ethernet e dall’algoritmo di compressione ZIP. Il dato ed il valore corrente del CRC dovranno trovarsi rispettivamente in W e crc[0..3]. La routine restituisce il nuovo valore del CRC utilizzando 94 istruzioni eseguite in 35/85 cicli.
list p=p18f452
#include p18f452.inc
cblock 0
crc32:4
temp
endc
crc_hi EQU crc32+0
crc_mh EQU crc32+1
crc_ml EQU crc32+2
crc_lo EQU crc32+3
org 0
crc32_1:
xorwf crc_lo,w
movwf temp
btfsc temp,0
bra v1_bit0
movf crc_ml,w
movwf crc_lo
movf crc_mh,w
movwf crc_ml
movf crc_hi,w
movwf crc_mh
clrf crc_hi
bra v1_bit1
v1_bit0:
movf crc_ml,w
xorlw 0x96
movwf crc_lo
movf crc_mh,w
xorlw 0x30
movwf crc_ml
movf crc_hi,w
xorlw 0x07
movwf crc_mh
movlw 0x77
movwf crc_hi
v1_bit1:
btfss temp,1
bra v1_bit2
movlw 0x2c
xorwf crc_lo,f
movlw 0x61
xorwf crc_ml,f
movlw 0x0e
xorwf crc_mh,f
movlw 0xee
xorwf crc_hi,f
v1_bit2:
btfss temp,2
bra v1_bit3
movlw 0x19
xorwf crc_lo,f
movlw 0xc4
xorwf crc_ml,f
movlw 0x6d
xorwf crc_mh,f
movlw 0x07
xorwf crc_hi,f
v1_bit3:
btfss temp,3
bra v1_bit4
movlw 0x32
xorwf crc_lo,f
movlw 0x88
xorwf crc_ml,f
movlw 0xdb
xorwf crc_mh,f
movlw 0x0e
xorwf crc_hi,f
v1_bit4:
btfss temp,4
bra v1_bit5
movlw 0x64
xorwf crc_lo,f
movlw 0x10
xorwf crc_ml,f
movlw 0xb7
xorwf crc_mh,f
movlw 0x1d
xorwf crc_hi,f
v1_bit5:
btfss temp,5
bra v1_bit6
movlw 0xc8
xorwf crc_lo,f
movlw 0x20
xorwf crc_ml,f
movlw 0x6e
xorwf crc_mh,f
movlw 0x3b
xorwf crc_hi,f
v1_bit6:
btfss temp,6
bra v1_bit7
movlw 0x90
xorwf crc_lo,f
movlw 0x41
xorwf crc_ml,f
movlw 0xdc
xorwf crc_mh,f
movlw 0x76
xorwf crc_hi,f
v1_bit7:
btfss temp,7
return
movlw 0x20
xorwf crc_lo,f
movlw 0x83
xorwf crc_ml,f
movlw 0xb8
xorwf crc_mh,f
movlw 0xed
xorwf crc_hi,f
return
| Listato 1 |




Molto utile per verificare la corruzione di un registro. Utilizza tecniche matematiche non banali e rileva nello stesso tempo interferenze non derivanti da manomissione.