By Dr. Imre Bartfai

; What you need is to define the polynomial. E. g. for the CCITT one: poly0 equ 0x21 poly1 equ 0x10 ; Do not forget to initialize <crcval> = <crch:crcl> before the 1st call ; e. g. with 0xFF or with zeroes, as the particular CRC algorithm ; requires. ;This subroutine calculates a 16-bit CRC ;-------- ; CrcUpd: update <crcval> using <W> ; ; CBLOCK crcblk crch crcl saved oldcch i ENDC CrcUpd movwf saved ; j = W movlw d'8' ; W = 8 movwf i ; i = W _loop movfw crch movwf oldcch ; temporary save clrc ; clear carry for rlf rlf crcl ; crc << 1 rlf crch movfw saved ; the char read xorwf oldcch,F ; test with old high btfss oldcch,7 ; if bit set, apply mask b _notset ; otherwise skip movlw poly0 xorwf crcl,F movlw poly1 xorwf crch,F _notset clrc ; for rlf rlf saved,F ; next bit of saved decfsz i,F b _loop return ; ; End CrcUpd

John Payson replies: Here's a version which should be faster: 38 instructions with no loops. When invoked, it will update crcH and crcL based upon the new input value. Note that crcL is entirely a function of crcH, while crcH is a function of crcH, xor'ed with the 'old' value of crcL. Basically, each bit in crcH will affect certain other bits in the output; each bit in crcL will affect only the corresponding bit in crcH [which, on the next iteration, will affect bits in both crcL and crcH].

; Simple CRC routine ; from John Payson 1998-10-23 xorwf crcH ; Compute the LSB first [based upon MSB] movlw 0 btfsc crcH,0 xorlw 33 btfsc crcH,1 xorlw 66 btfsc crcH,2 xorlw 132 btfsc crcH,3 xorlw 8 btfsc crcH,4 xorlw 49 btfsc crcH,5 xorlw 98 btfsc crcH,6 xorlw 196 btfsc crcH,7 xorlw 136 ; Swap crcL with W xorwf crcL,f xorwf crcL,w xorwf crcL,f ; Next compute the MSB [note W holds old LSB] btfsc crcH,0 xorlw 16 btfsc crcH,1 xorlw 32 btfsc crcH,2 xorlw 64 btfsc crcH,3 xorlw 129 btfsc crcH,4 xorlw 18 btfsc crcH,5 xorlw 36 btfsc crcH,6 xorlw 72 btfsc crcH,7 xorlw 145 movwf crcH

Interested:

file: /Techref/microchip/crc.htm, 3KB, , updated: 2008/10/18 15:58, local time: 2024/9/11 03:05, |

©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?<A HREF="http://www.piclist.com/techref/microchip/crc.htm"> PIC Microcontroller Bit Math Method - CRC</A> |

Did you find what you needed? |

PICList 2024 contributors:
o List host: MIT, Site host massmind.org, Top posters @none found - Page Editors: James Newton, David Cary, and YOU!
* Roman Black of Black Robotics donates from sales of Linistep stepper controller kits. * Ashley Roll of Digital Nemesis donates from sales of RCL-1 RS232 to TTL converters. * Monthly Subscribers: Gregg Rew. on-going support is MOST appreciated!
* Contributors: Richard Seriani, Sr. |

## Welcome to www.piclist.com! |

.