No se si esto es lo que buscas:
" ------------CRC_CCITT-------------------------------------
TEMP VAR BYTE " TEMP BYTE
J VAR BYTE " FOR NEXT LOOP
CRC VAR WORD " CRC WORD
DAT1 VAR BYTE " BYTES TO CHECK CRC ON
DAT2 VAR BYTE
DAT3 VAR BYTE
DAT4 VAR BYTE
DAT5 VAR BYTE " CRC HIGH BYTE FOR PACKET
DAT6 VAR BYTE " CRC LOW BYTE FOR PACKET
CRCPOLY CON $1021 " CRC-CCITT POLYNOMINAL
"-------------------------------------------------------------
START:
SERIN2 PORTB.0,16468,[DAT1,DAT2,DAT3,DAT4,DAT5,DAT6] "RCV DATA PACKET
GOSUB CHECK_CRC " CHECK CRC ON RCV PACKET
IF CRC <> 0 Then START " IF CRC BAD THEN START
"YOUR PROGRAM HERE
" SUBROUTINE FOR CHECKING CRC IN RCV BYTES
CHECK_CRC:
CRC = 0
TEMP = DAT1
GOSUB CALC_CRC
TEMP = DAT2
GOSUB CALC_CRC
TEMP = DAT3
GOSUB CALC_CRC
TEMP = DAT4
GOSUB CALC_CRC
TEMP = DAT5
GOSUB CALC_CRC
TEMP = DAT6
GOSUB CALC_CRC
RETURN
" SUBROUTINE FOR CALCULATION CRC IN VAR TEMP
CALC_CRC:
CRC = TEMP * 256 ^ CRC
FOR J = 0 to 7
IF CRC.15 = 0 THEN SHIFT
CRC = CRC * 2 ^ CRCPOLY
GOTO NXT
SHIFT: CRC = CRC * 2
NXT: NEXT
RETURN
END
Saludos,
Ricky