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

📄 mem_eep.asm

📁 VCP201_CODE is a FPGA source code.
💻 ASM
字号:
;***********************************************************************
;FUNCTION: THIS ROUTINE IS TO COPY DATA FROM MCU'S BUTTON DATA TO 
;          EEPROM. ALL BUTTON DATA, ADDRESS FROM 0A6H TO 0FFH, AS WELL
;          AS DATA LENGTH DATA AND CRC, ADDRESS FROM 06F TO 07F, ARE
;          COPIED TO EEPROM ADDRESS FROM 00H TO 2CH AND FROM 2DH TO 34H
;          RESPECTIVELY.
;FILENAME: C:\PROJECTS\SV363\MEM_EEP.ASM
;ROUTINE NAME: MEM_EEP
;INPUT: DATA FETCHED FROM RAM ADDRESS 06FH - 07FH AND 0A6F - 0FFH
;OUTPUT: DATA COPIED IN SEQUENCE TO EEPROM FROM ADDRESS 0H - 034H
;RAM AFFECTED: FSR, 62, 6D
;SUBROUTINE CALL: EEDETECT, EEWPROT, P_TIMER, EEWRITE
;***********************************************************************
mem_eep:
me_int_lp:
        movlw   0x02             ;SET TO DO EE_LOOP1 TWICE
        movwf    do_meloop

      	movlw   CNTL_DATA_WORD  ;SET NUMBER OF WORD TRANSFERED COUNTER
        movwf    byte_count

        movlw   CNTL_POINTER    ;INITIALIZE DATA POINTER TO FSR REGISTER
        movwf    FSR   

;	movlw	0xff
;        movwf	temp_buf1
;      	movlw	0xfb
;        movwf	temp_buf2
   
	bsf	epctrl,ewen	;WRITE ENABLE
enable_ee:
	btfsc	epctrl,epbusy
;	goto	enable_ee_end
;        decfsz	temp_buf1,F
      	goto	enable_ee
;        decfsz	temp_buf2,F
;        goto	enable_ee

enable_ee_end:
	movlw	EEP_ADDR_1	; digital mode
	btfsc	D_A_mode
	movlw	EEP_ADDR_2	; analog mode
        movwf    ee_addr         ;STARTING FROM EEPROM ADDRESS 00
        
me_loop1:
        movf   INDF,W            ;FIRST STORE CONTROL DATA
        movwf   ee_buf0

        incf   FSR,F
        movf   INDF,W
        movwf  ee_buf1

	call	ee_erase

        call    ee_write        ;WRITE EE_BUF TO EEPROM TO ADDRSS EE_ADDR

        incf    FSR,F           ;NEXT RAM DATA
        incf    ee_addr,F       ;NEXT EEPROM ADDRESS
        decfsz  byte_count,F
        goto    me_loop1
        
        decf	do_meloop,F
        btfsc	STATUS,Z
	goto	me_end
        
        movlw   PB_DATA_WORD    ;REPEAT THE LOOP TO STORE BUTTON DATA
        movwf    byte_count
        movlw   BU_DATA_PTR
        movwf    FSR
        goto    me_loop1


me_end:
	bcf	STATUS,RP0
;	movlw	0xff
;        movwf	temp_buf1
;        movlw	0xfb
;        movwf	temp_buf2

	bsf	epctrl,ewds	;DISABLE
disable_ee:
	btfsc	epctrl,epbusy
;        return
;        decfsz	temp_buf1,F
       	goto	disable_ee
;        decfsz	temp_buf2,F
;        goto	disable_ee
        return
;
;***********************************************************************
;FUNCTION: THIS ROUTINE IS TO COPY DATA FROM EEPROM'S BUTTON DATA TO 
;          MCU. ALL BUTTON DATA, FROM EEPROM STARTING ADDRESS 00H 
;          ARE COPIED TO MCU'S RAM BUTTON DATA ADDRESS 0A8H TO 
;          0FFH, AS WELL AS DATA LENGTH AND CRC DATA, ADDRESS FROM 06F 
;          TO 07F RESPECTIVELY.
;ROUTINE NAME: EEP_MEM
;OUTPUT: DATA COPIED IN SEQUENCE TO MCU FROM ADDRESS 6FH - 7FH AND
;        0A6F - 0FFH
;SUBROUTINE CALL: EEDETECT, P_TIMER, EEREAD
;***********************************************************************
eep_mem:       			;STARTING EEPROM ADDRESS
	bcf	STATUS,RP0
	movlw	EEP_ADDR_1	; digital mode "0x00"
	btfsc	D_A_mode      	
	movlw	EEP_ADDR_2	; analog mode "0x20"	
	movwf   ee_addr         ;STARTING EEPROM ADDRESS

em_int_lp:        
	movlw   0x02             ;SET TO DO EM_LOOP1 TWICE
        movwf   do_emloop
        movlw   CNTL_DATA_WORD  ;SET NUMBER OF WORD TRANSFERED COUNTER
        movwf   byte_count       ;TO 8 BYTES
        movlw   CNTL_POINTER    ;INITIALIZE DATA POINTER TO FSR REGISTER
        movwf   FSR       

em_loop1:                       ;READ DATA FROM EEPROM TO MCU'S RAM

        call    ee_read

        movf    ee_buf0,W
        movwf    INDF   
         
        incf    FSR,F
        movf    ee_buf1,W
        movwf    INDF

        incf    FSR,F           ;NEXT RAM DATA
        incf    ee_addr,F       ;NEXT EEPROM ADDRESS
        decfsz  byte_count,F
        goto    em_loop1

        decf	do_emloop,F
	btfsc	STATUS,Z       
	goto	em_end
        
        movlw   PB_DATA_WORD    ;REPEAT THE LOOP TO TRANSFER BUTTON DATA
        movwf    byte_count

        movlw   BU_DATA_PTR
        movwf    FSR
        goto    em_loop1

em_end:
        return


;****************************************************************************
;FUNCTION: THIS ROUTINE IS TO SET THE MCU'S BUTTON DATA.  THE RESET FLAG,
;          F_RESET IS FIRST EXAMINED TO SEE IF SPECIAL RESET REQUIRED.  IF 
;          F_RESET IS SET, THE DEFAULT PAGE IN THE EEPROM IS IGNORED. 
;          OTHERWISE, IT WILL FIRST LOAD DATA FROM THE DEFAULT SECTION 
;          OF THE EEPROM AND CHECK THE CRC BYTE TO SEE IF DATA VALID.
;          IF NOT, THE MCU'S RAM DATA WILL BE GENERATED INSTEAD.
;          THE EEPROM'S DATA SECTION WILL ALSO BE UPDATED. DEFAULT BUTTON 
;          WILL BE GENERATED SUCH THAT EACH BUTTON LENGTH WILL
;          BE ONE AND THE BUTTON WILL BE ASSIGNED IN SEQUENCE FROM O TO 13.
;          BUTTON #14 IS A DUMMY BUTTON WHERE THE LENGTH IS 0 AND NO VALUE
;          ASSIGNED.
;FILENAME: C:\PROJECTS\SV363\MEM_EEP.ASM
;ROUTINE NAME: DEF_PB
;INPUT: F_MAPBAD, F_RESET
;OUTPUT: THE MCU'S BUTTON DATA RAM AND EEPROM'S DATA SECTION WILL BE FILLED 
;        WITH DEFAULT BUTTON DATA.
;        THE F_MAPBAD FLAG WILL BE CLEAR ON EXIT
;SUBROUTINE CALL: EEP_MEM, GEN_CRC_8, MEM_EEP
;****************************************************************************
def_pb:
def_gen:        
        movlw   CNTL_POINTER    ;SET DATA LENGTH TO 1.Equ 0x70 for 16 PGM data
        movwf    FSR 
        movlw   CNTL_DATA       ;(14) BYTES CONTROL DATA
        movwf    byte_count
        movlw   SIZE_LENGTH 	;default = 1
def_loop1:        
        movwf    INDF
        incf    FSR,F
        decfsz  byte_count,F
        goto    def_loop1

        movlw   0x00             ;LOAD DATA LENGTH =0 FOR THE LAST BYTE
        movwf    INDF

	bsf	STATUS,RP0
	clrf	bu_force1
	clrf	bu_force2
	clrf	bu_force3
	clrf	bu_force4
	bcf	STATUS,RP0
	
        movlw   DATA_POINTER    ;SET DEFAULT BUTTON DATA FROM BOTTOM UP
        movwf    FSR 

        movlw	PB_DATA-2
        addwf   FSR,F           ;INDIRECT POINTS AT END OF DATA+1
        decf    FSR,F           ;ADJUST INDIRECT POINTER

        movlw   PB_DATA-2       ;14 BYTES DEFAULT DATA
        movwf    byte_count
        
def_loop2:        
        decf    byte_count,W
        movwf  	INDF
        swapf   INDF,F
        iorwf   INDF,F
        decf    FSR,F
        decfsz  byte_count,F
        goto    def_loop2

;---- added for dummy keys of SV-2109
        bsf     STATUS,RP0
        movlw   0x55            ; button L1
        movwf   DATA_POINTER+12
        movlw   0x44            ; button R1
        movwf   DATA_POINTER+13
        bcf     STATUS,RP0

        call    gen_crc_8       ;CALCULATE THE 8 BIT CRC
        movf   crc_byte,W        ;STORE TO BUTTON DATA CRC ADDRSS
        movwf    pb_data_crc
def_end:
        call    mem_eep         ;LOAD DEFAULT DATA TO EEPROM NORMAL DATA AREA
        bcf     f_mapbad        ;RESET F_MAPBAD FLAG
        
        return
;
;****************************************************************************
;FUNCTION: THIS ROUTINE IS TO SET CHECK EEPROM'S DATA.  IF VALID, THE MCU'S
;          RAM BUTTON DATA AREA WILL BE FILLED WITH EEPROM'S DATA.  IF LOADED
;          DATA IS NOT VALID OR IF THE RESET BUTTONS ARE PRESSED AT POWER ON, 
;          THE F_MAPBAD WILL BE SET TO SIGNAL MAIN PROGRAM TO LOAD DEFAULT
;          DATA.
;FILENAME: C:\PROJECTS\SV363\MEM_EEP.ASM
;ROUTINE NAME: SET_PB
;INPUT: DATA READ FROM EEPROM AND RESET BUTTON COMBINATION CHECK
;OUTPUT: IF EEPROM DATA NOT VALID OR RESET BUTTON COMBINATION FOUND, F_MAPBAD
;        FLAG WILL BE SET.
;RAM AFFECTED: 6F,7F
;SUBROUTINE CALL: EEP_MEM, GEN_CRC_8, P_TIMER, P_BEEP
;****************************************************************************
;
;
set_pb:
	nop
      	call    eep_mem    
        nop
        call    gen_crc_8       ;SEE IF DATA VALID
        movf   pb_data_crc,W
        subwf   crc_byte,W      ;COMPARE THE TWO CRC's

	btfss	STATUS,Z
        bsf     f_mapbad

	tstf	crc_byte
        btfss	STATUS,Z
        return

	tstf	pbid_0
        btfsc	STATUS,Z
	bsf	f_mapbad        

	return


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -