📄 mem_eep.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 + -