Here's a CRC-16 implementation from my web page (http://home.netcom.com/~fastfwd/answers.html#PIC00076):
This isn't the fastest possible implementation, but it should be quick enough for most purposes. It uses the standard X.25 (and XMODEM) polynomial: x^16+x^12+x^5+1.
CRCHI EQU some register CRCLO EQU another register CLRF CRCHI CLRF CRCLO ;Append 16 "0" bits to your message here. LOOP: ;If there are no more bits in your message, go to ;"DONE". Otherwise, left-shift the next bit of your ;message into the carry here. RLF CRCLO RLF CRCHI SKPC ;X^16 GOTO LOOP MOVLW 00010000B ;X^12 XORWF CRCHI ; MOVLW 00100001B ;X^5 + 1 XORWF CRCLO ; GOTO LOOP DONE: ;The CRC is in "CRCHI" and "CRCLO".