|
Вот, выдернул из старого проекта. Я думаю, что для 10-ти бит crc8 в самый раз.
;-
CRC_Low EQU 0X1A ; Low byte CRC
;CRC_High EQU 0X1B ; High byte CRC use of CRC16
BUFF_CRC EQU 0X1C ; Buffer CRC
CRC_Byte EQU 0X1D ; Count byte of CRC subr.CRC_Polynom EQU 0X8C
;------------------------------------------< Calc CRC 8 >-------
_CRC_Calc MOVLW .8
MOVWF COUT_B
_Calc_Loop BCF STATUS,C
RRF BUFF_CRC,F
RRF CRC_Low,F
BTFSS STATUS,C ; if Carry set - XOR poly.
GOTO _Next_Bit_CRC
MOVLW CRC_Polynom
XORWF CRC_Low,F
_Next_Bit_CRC DECFSZ COUT_B,F
GOTO _Calc_Loop
RETURN; - Используем ------------------------------------------------
;------------------------------------------< CRC 8 Check >-----
_CRC_Check CLRWDT
MOVLW .9
MOVWF CRC_Byte
CLRF CRC_Low
;- - Load CRC registers -
MOVF INDF,W
MOVWF BUFF_CRC
DECF CRC_Byte,F
INCF FSR,F
; - Calculate CRC -
_Check_Loop CALL _CRC_Calc
DECFSZ CRC_Byte,F
GOTO _Next_Byte_CRC
MOVF INDF,W
; - Check restore CRC -
XORWF CRC_Low,F
BTFSS STATUS,Z
GOTO _CRC_ERROR
GOTO _CRC_Ok
_Next_Byte_CRC MOVF INDF,W
MOVWF BUFF_CRC
INCF FSR,F
GOTO _Check_Loop
;
_CRC_ERROR GOTO _Ret_TM_Read
;-
_CRC_Ok MOVLW 0X02
MOVWF PCLATH
GOTO _Monitor
E-mail: info@telesys.ru