📄 crc_8.asm
字号:
;****************************************************************************
;FUNCTION: THIS ROUTINE IS TO CALCULATE THE CRC FOR THE BUTTON DATA INCLUDING
; BUTTON LENGTH AND BUTTON DATA BUT NOT INCLUDING THE CRC DATA BYTE.
; HENCE, THE DATA FROM ADDRESSED 070H - 07EH AND 06AH - 0FFH ARE
; FETCHED STARTING FROM 070H TO CALCULATE THE CRC AND STORE THE
; CODE TO TEMPORARY BUFFER, CRC_BYTE.
;FILENAME: CRC_8.ASM
;ROUTINE NAME: GEN_CRC_8
;INPUT: DATA IS FETCHED FROM 070H TO 07EH AND FROM 06AH TO 0FFH
;OUTPUT: CRC VALUE IS STORED TO BUFFER - CRC_BYTE.
;SUBROUTINE CALL: P_TIMER, CRC8
;****************************************************************************
;
;#define byte_count mov_buffer ;RAM LOCATION 6CH
;
gen_crc_8:
movlw 0x00 ;RESET THE CRC BUFFER
movwf crc_byte
movlw 0x02 ;SET LOOP COUNT TO 2, 1 FOR CONTROL & 1 FOR DATA
movwf loop_count
movlw CNTL_DATA_TOTAL ;DO THE 15 BYTES CONTROL DATA FIRST -CRC byte
movwf byte_count
movlw CNTL_POINTER ;USE INDIRECT ACCESS OF CONTROL DATA
movwf FSR
gen_loop1:
movf INDF,W
call crc8
incf FSR,F
decfsz byte_count,F
goto gen_loop1
decf loop_count,F
btfsc STATUS,Z
goto gen_end
movlw PB_DATA_TOTAL ;REPEAT CRC CALCULATION TO BUTTON DATA
movwf byte_count
movlw BU_DATA_PTR
movwf FSR
goto gen_loop1
gen_end:
return
;
;
;
;********************************************************************
;FUNCTION: THIS ROUTINE GENERATES A 8 BIT CRC. PROGRAMMING ALGORITHM
; IS:-
; |----|---------------|------|
; |--8 + 7 6 5 4 3 + 2 1 + (INPUT BIT)
;
;
;FILENAME: \PROJECTS\SV363\CRC_8.ASM
;NAME: CRC8
;INPUT: W REGISTER CONTAINING THE 8 BIT DATA
;OUTPUT: GENERATED CRC STORED TO LOCATION 0X6FH
;******************************************************************
;
#define crc_bit_shf temp_buf1 ;RAM LOCATION 61H
;
crc8:
movwf input_byte ;STORE W TO FILE BUFFER FOR ROTATING
movlw 0x08 ;SET TO SHIFT 8 BIT ONLY
movwf crc_bit_shf
crc_loop1:
movlw CRC_BIT_8_0 ;PRESET W=00H FIRST
rlf crc_byte,F ;ROTATE THE CRC TO LEFT TO GET THE BIT 8 DATA
btfsc STATUS,C ;skpnc.;REVISE W IF CRC'S BIT 8 IS SET
movlw CRC_BIT_8_1
bcf crc_byte,0 ;CLEAR BIT 0 OF CRC FIRST
rrf input_byte,F ;ROTATE INPUT TO GET THE FIRST BIT INTO CARRY
btfsc STATUS,C ;skpnc
bsf crc_byte,0 ;SET BIT 0 OF CRC IF INPUT BIT IS SET
xorwf crc_byte,F ;TOGGLE BITS 8, 3 & 1 IF BIT 8 OF CRC IS SET
decfsz crc_bit_shf,F ;DO 8 BITS ONLY
goto crc_loop1
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -