📄 germany-1000-v1.asm
字号:
;FUNCTION: FORMAT THE SPECIAL FUNCTION REGIESTER
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:NONE
;**************************************************
;--------------------------------------------------
FORMAT_SFR:
BTFSS WORK_STATUS,FORMAT_SFR_FLAG
GOTO FORMAT_SFR_END
BCF WORK_STATUS,FORMAT_SFR_FLAG
BCF STATUS,RP0
MOVLW CMCON_DATA1
ANDWF CMCON,F
MOVLW CMCON_DATA2
IORWF CMCON,F
MOVLW T1CON_DATA
MOVWF T1CON
MOVLW INTCON_DATA1
ANDWF INTCON,F
MOVLW INTCON_DATA2
IORWF INTCON,F
;____________________________________
BSF STATUS,RP0
MOVLW TRISA_DATA
MOVWF TRISA
MOVLW TRISC_DATA
MOVWF TRISC
MOVLW WPUA_DATA
MOVWF WPUA
MOVLW IOCA_DATA
MOVWF IOCA
MOVLW VRCON_DATA
MOVWF VRCON
MOVLW PIE1_DATA
MOVWF PIE1
MOVLW OPTION_REG_DATA1
ANDWF OPTION_REG,F
MOVLW OPTION_REG_DATA2
IORWF OPTION_REG,F
FORMAT_SFR_END:
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: READ_DP
;FUNCTION: READ THE DATA GROUP POINT IN EE
;PARAMETER IN: NONE
;PARAMETER OUT: W
;PRIVATE PARAMETER:READ_DP_TEMP0
;**************************************************
;--------------------------------------------------
READ_DP:
MOVLW DATA_POINT
CALL EE_READ
MOVWF READ_DP_TEMP0
XORLW 0X00
BTFSC STATUS,Z
GOTO READ_DP_END
MOVF READ_DP_TEMP0,W
XORLW 0X0A ;0X0A
BTFSC STATUS,Z
GOTO READ_DP_END
MOVF READ_DP_TEMP0,W
XORLW 0x14 ;0X14
BTFSC STATUS,Z
GOTO READ_DP_END
CALL DP_ERROR
READ_DP_END:
MOVF READ_DP_TEMP0,W
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: DP_CHANGE
;FUNCTION: CHANGE THE DATA GROUP POINT IN EE
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:DP_CHANGE_TEMP0
;**************************************************
;--------------------------------------------------
DP_CHANGE:
CALL READ_DP
ADDLW 0X0A
MOVWF DP_CHANGE_TEMP0
XORLW 0X1E
BTFSC STATUS,Z
CLRF DP_CHANGE_TEMP0
BSF STATUS,RP0
MOVF DP_CHANGE_TEMP0,W
MOVWF DP_BACKUP
DP_CHANGE_LAB1:
MOVWF EEDATA
MOVLW DATA_POINT
MOVWF EEADR
MOVF RUN_CODE,W
XORLW 0X3A
BTFSS STATUS,Z
GOTO DIEDIEDIE
CALL EE_WRITE
XORLW 0X00
BTFSS STATUS,Z
GOTO DP_CHANGE_LAB1
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: DP_ERROR
;FUNCTION: DEAL WITH THE DATA GROUP POINT ERROR
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:DP_ERR_TEMP
;**************************************************
;--------------------------------------------------
DP_ERROR:
MOVF DP_BACKUP,W
XORLW 0X00
BTFSC STATUS,Z
GOTO DP_ERR_LAB1
MOVF DP_BACKUP,W
XORLW 0X0A ;0X0A
BTFSC STATUS,Z
GOTO DP_ERR_LAB1
MOVF DP_BACKUP,W
XORLW 0x14 ; 0X14
BTFSC STATUS,Z
GOTO DP_ERR_LAB1
CLRF DP_BACKUP
DP_ERR_LAB1:
MOVF DP_BACKUP,W
MOVWF EEDATA
MOVLW DATA_POINT
MOVWF EEADR
CALL EE_WRITE
XORLW 0X00
BTFSS STATUS,Z
GOTO DP_ERR_LAB1
;CALL EE_WRITE_ERR
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: CHECKSUM
;FUNCTION: CHECK THE DATA GROUP SUM IS RIGHT OR NOT
;PARAMETER IN: W(THE FIRST ADR OF DATA GROUP)
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:
;**************************************************
;--------------------------------------------------
CHECKSUM:
BSF STATUS,RP0
MOVWF EEADR
CALL EE_READ
MOVWF SUM
INCF EEADR
MOVF EEADR,W
CALL EE_READ
ADDWF SUM,F
INCF EEADR
MOVF EEADR,W
CALL EE_READ
ADDWF SUM,F
INCF EEADR
MOVF EEADR,W
CALL EE_READ
XORWF SUM,W
BTFSC STATUS,Z
RETLW 0X00
RETLW 0X01
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: READIN
;FUNCTION: READ THE DATA GROUP POINT BY W
;PARAMETER IN: W(THE FIRST ADR OF DATA GROUP)
;PARAMETER OUT: RESTORE1,RESTORE2,RESTORE3,RESTORE4
;PRIVATE PARAMETER:NONE
;**************************************************
;--------------------------------------------------
READIN:
BSF STATUS,RP0
MOVWF EEADR
CALL EE_READ
MOVWF RESTORE1
INCF EEADR
MOVF EEADR,W
CALL EE_READ
MOVWF RESTORE2
INCF EEADR
MOVF EEADR,W
CALL EE_READ
MOVWF RESTORE3
INCF EEADR
MOVF EEADR,W
CALL EE_READ
MOVWF RESTORE4
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: READIN
;FUNCTION: READ THE DATA GROUP POINT BY W
;PARAMETER IN: W(THE FIRST ADR OF DATA GROUP)
;PARAMETER OUT: RESTORE1,RESTORE2,RESTORE3,RESTORE4
;PRIVATE PARAMETER:NONE
;**************************************************
;--------------------------------------------------
WRITEOUT:
BSF STATUS,RP0
WRITEOUT_LAB1:
MOVWF EEADR
MOVF RESTORE1,W
MOVWF EEDATA
CALL EE_WRITE
XORLW 0X00
BTFSS STATUS,Z
GOTO WRITEOUT_LAB1
INCF EEADR
MOVF EEADR,W
WRITEOUT_LAB2:
MOVF RESTORE2,W
MOVWF EEDATA
CALL EE_WRITE
XORLW 0X00
BTFSS STATUS,Z
GOTO WRITEOUT_LAB2
INCF EEADR
MOVF EEADR,W
WRITEOUT_LAB3:
MOVF RESTORE3,W
MOVWF EEDATA
CALL EE_WRITE
XORLW 0X00
BTFSS STATUS,Z
GOTO WRITEOUT_LAB3
INCF EEADR
MOVF EEADR,W
WRITEOUT_LAB4:
MOVF RESTORE4,W
MOVWF EEDATA
CALL EE_WRITE
XORLW 0X00
BTFSS STATUS,Z
GOTO WRITEOUT_LAB4
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: CHECKSUM_3GROUP
;FUNCTION: CHECK 3 DATA GROUPS SUM IS RIGHT OR NOT
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER: RESTORE1,RESTORE2,RESTORE3,
;**************************************************
;--------------------------------------------------
CHECKSUM_3GROUP:
MOVLW 0X43
MOVWF RUN_CODE
BTFSS WORK_STATUS,CHECKSUM_3GROUP_FLAG
GOTO CHECKSUM_3GROUP_END
BCF WORK_STATUS,CHECKSUM_3GROUP_FLAG
CALL READ_DP
ADDLW DATA1
CALL CHECKSUM
XORLW 0X00
BTFSS STATUS,Z
GOTO CHECKSUM1_ERROR
CALL READ_DP
ADDLW 0x00 ; 0X14
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL CHECKSUM
XORLW 0X00
BTFSS STATUS,Z
GOTO CHECKSUM2_ERROR
CALL READ_DP
ADDLW 0X00 ;0X0A
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL CHECKSUM
XORLW 0X00
BTFSS STATUS,Z
GOTO CHECKSUM3_ERROR
GOTO CHECKSUM_3GROUP_END
CHECKSUM1_ERROR:
CALL READ_DP
ADDLW 0x00 ; 0X14
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL CHECKSUM
XORLW 0X00
BTFSS STATUS,Z
GOTO CHECKSUM12_ERROR
CALL READ_DP
ADDLW 0x00 ; 0X14
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL READIN
CALL THREE_BYTES_INC
MOVF RUN_CODE,W
XORLW 0X43
BTFSS STATUS,Z
GOTO DIEDIEDIE
CALL READ_DP
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL WRITEOUT
GOTO CHECKSUM_3GROUP_END
CHECKSUM12_ERROR:
CALL READ_DP
ADDLW 0X00 ;0X0A
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL CHECKSUM
XORLW 0X00
BTFSS STATUS,Z
GOTO CHECKSUM123_ERROR
CALL READ_DP
ADDLW 0X00 ;0X0A
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL READIN
CALL THREE_BYTES_INC
CALL READ_DP
ADDLW 0x00 ;0X14
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL WRITEOUT
GOTO CHECKSUM_3GROUP_END
CHECKSUM123_ERROR:
MOVLW DATA1
ADDLW 0X24
CALL CHECKSUM
XORLW 0X00
BTFSC STATUS,Z
GOTO CKSUM123_ERROR_LAB1
CLRF RESTORE1
CLRF RESTORE2
CLRF RESTORE3
CLRF RESTORE4
MOVLW DATA1
ADDLW 0X24
CALL WRITEOUT
CKSUM123_ERROR_LAB1:
MOVLW DATA1
ADDLW 0X24
CALL READIN
CALL READ_DP
ADDLW 0X00 ;0X0A
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL WRITEOUT
MOVF RUN_CODE,W
XORLW 0X43
BTFSS STATUS,Z
GOTO DIEDIEDIE
CLRF DATA0
CLRF PLS_NUM
CLRF EEDATA
MOVLW DATA0
MOVWF EEADR
CALL EE_WRITE
MOVLW PLS_NUM
MOVWF EEADR
CALL EE_WRITE
GOTO CHECKSUM_3GROUP_END
CHECKSUM2_ERROR:
CALL READ_DP
ADDLW DATA1
CALL READIN
CALL READ_DP
ADDLW 0x00 ; 0X14
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL WRITEOUT
GOTO CHECKSUM_3GROUP_END
CHECKSUM3_ERROR:
CALL READ_DP
ADDLW 0x00 ;0X14
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL READIN
CALL READ_DP
ADDLW 0X00 ;0X0A
CALL RECOVER_VERIFY_DP
ADDLW DATA1
CALL WRITEOUT
CHECKSUM_3GROUP_END:
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: ERCOVER
;FUNCTION: RECOVER A DATA GROUPS A TIME (AND +1 TO RESTORE1-RESTORE4)
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER: RESTORE1,RESTORE2,RESTORE3,
;**************************************************
;--------------------------------------------------
RECOVER:
MOVF RESTORE1,W
CALL INC_JUDGE
MOVWF INT_W_TEMP ;
MOVF INC_TEMP0,W ;
MOVWF RESTORE1 ;
INCF RESTORE4 ;
MOVF INT_W_TEMP,W ;
XORLW 0X01 ;
BTFSS STATUS,Z ;
GOTO RECOVER_OUT
MOVF RESTORE2,W
CALL INC_JUDGE
MOVWF INT_W_TEMP ;
MOVF INC_TEMP0,W ;
MOVWF RESTORE2 ;
MOVLW 0X9D
ADDWF RESTORE4,F
MOVF INT_W_TEMP,W ;
XORLW 0X01 ;
BTFSS STATUS,Z ;
GOTO RECOVER_OUT
MOVF RESTORE3,W
CALL INC_JUDGE
MOVWF INT_W_TEMP ;
MOVF INC_TEMP0,W ;
MOVWF RESTORE3 ;
MOVLW 0X9D
ADDWF RESTORE4,F
MOVF INT_W_TEMP,W ;
XORLW 0X01 ;
BTFSS STATUS,Z ;
GOTO RECOVER_OUT
MOVLW 0X9C
ADDWF RESTORE4,F
RECOVER_OUT:
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: RECOVER_VERIFY_DP
;FUNCTION:
;PARAMETER IN: W
;PARAMETER OUT: W
;PRIVATE PARAMETER: NONE
;**************************************************
;--------------------------------------------------
RECOVER_VERIFY_DP:
MOVWF RECOVER_V_TEMP0
SUBLW 0X17
BTFSS STATUS,C
GOTO R_V_DP_LAB1
MOVF RECOVER_V_TEMP0,W
GOTO R_V_DP_OUT
R_V_DP_LAB1:
MOVF RECOVER_V_TEMP0,W
ADDLW 0XE2
R_V_DP_OUT:
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: DIEDIEDIE
;FUNCTION: WAIT WATCHDOG TIME OUT
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER: NONE
;**************************************************
;--------------------------------------------------
DIEDIEDIE:
MOVF DATA0,W
SUBLW 0X9A
BTFSS STATUS,C
GOTO DIEDIEDIE_LAB1
BSF STATUS,RP0
MOVF DATA0,W
MOVWF EEDATA
MOVLW DATA0
MOVWF EEADR
CALL EE_WRITE
MOVF PLS_NUM,W
MOVWF EEDATA
MOVLW PLS_NUM
MOVWF EEADR
CALL EE_WRITE
DIEDIEDIE_LAB1:
GOTO DIEDIEDIE_LAB1
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: EE_WRITE1
;FUNCTION: WRITE A DATA TO EE AND VERIFY THE DATA
;PARAMETER IN: EEADR,EEDATA
;PARAMETER OUT: W
;PRIVATE PARAMETER:NONE
;**************************************************
;--------------------------------------------------
EE_WRITE1:
BSF EECON1,WREN
;BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
;BSF INTCON,GIE
;___________________________________
WRITE_OK1:
BTFSC EECON1,WR
GOTO WRITE_OK1
VERIFY1:
MOVF EEDATA,W
INCF EEDATA
BSF EECON1,RD
XORWF EEDATA,W
BTFSS STATUS,Z
RETLW 0X01
E_W_END1:
RETLW 0X00
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -