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.