Controllo CRC32 con PIC

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
Scarica subito una copia gratis

Una risposta

  1. Maurizio Di Paolo Emilio Maurizio 11 Aprile 2016

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend