Вот для Даллосовских таблеток crc8. Писано под PIC ...
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено O.L. 28 декабря 2004 г. 13:18
В ответ на: Ребята надо организовать сеть МК (AVR), по UART пакетами по 10 байт. Как на ASM проще CRC организовать? Помогите примером. Не изобретать же колесо. отправлено Ursul 28 декабря 2004 г. 12:54

Вот, выдернул из старого проекта. Я думаю, что для 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