⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crc_8.asm

📁 VCP201_CODE is a FPGA source code.
💻 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: C:\PROJECTS\SV363\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.
;RAM AFFECTED: FSR,6CH,6FH,6SH
;SUBROUTINE CALL: P_TIMER, CRC8
;****************************************************************************
;
;#define        byte_count      mov_buffer      ;RAM LOCATION 6CH
;
gen_crc_8:
	movlw   0x0             ;RESET THE CRC BUFFER
	movw    crc_byte
	movlw   0x2             ;SET LOOP COUNT TO 2, 1 FOR CONTROL & 1 FOR DATA
	movw    loop_count
	movlw   CNTL_DATA_TOTAL ;DO THE 15 BYTES CONTROL DATA FIRST
	movw    byte_count
	movlw   CNTL_POINTER    ;USE INDIRECT ACCESS OF CONTROL DATA
	movw    FSR
gen_loop1:
	call    p_timer
	movfw   INDF
	call    crc8
	incf    FSR,F
	decfsz  byte_count,F
	goto    gen_loop1
	decf    loop_count,F
	bz      gen_end
;
	movlw   PB_DATA_TOTAL   ;REPEAT CRC CALCULATION TO BUTTON DATA
	movw    byte_count
	movlw   DATA_POINTER
	movw    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:
       movw     input_byte      ;STORE W TO FILE BUFFER FOR ROTATING
       movlw    0x8             ;SET TO SHIFT 8 BIT ONLY
       movw     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      
       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
       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 + -