📄 germany-1000-v1.asm
字号:
DISPLAY:
BCF STATUS,RP0
BCF PORTC,CS
NOP
NOP
NOP
BCF PORTC,WR
BSF PORTC,PDATA
NOP
NOP
BSF PORTC,WR
MOVLW DIS_BUFFER-0X01
MOVWF DIS_SEND_POINT
MOVLW 0X0A
MOVWF SEND_DAT_CNT
SEND_NEXT_BYTE:
;MOVF SEND_DAT_CNT,W
;SUBLW 0X01
; BTFSC STATUS,Z
; GOTO DISPLAY_LAB1
MOVF SEND_DAT_CNT,W
SUBLW 0X09
BTFSC STATUS,Z
GOTO DISPLAY_LAB1
GOTO DISPLAY_LAB2
DISPLAY_LAB1:
DECF DIS_SEND_POINT
MOVLW 0X00
GOTO DISPLAY_LAB3
DISPLAY_LAB2:
MOVF DIS_SEND_POINT,W
DISPLAY_LAB3:
CALL SEND_A_BYTE
INCF DIS_SEND_POINT
MOVF DIS_SEND_POINT,W
DECFSZ SEND_DAT_CNT
GOTO SEND_NEXT_BYTE
BSF PORTC,CS
RETURN
;--------------------------------------------------
;SUB_SUB_PROGRAM
;NAME: SEND_A_BYTE
;FUNCTION: SEND A BYTE IN DISPLAY BUFFER TO 1621
;PARAMETER IN: W
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:SEND_BIT_CNT,S_A_TEMP0
;--------------------------------------------------
SEND_A_BYTE:
MOVWF FSR
MOVF INDF,W
SEND_A_BYTE1:
MOVWF S_A_TEMP0
MOVLW 0X08 ;
MOVWF SEND_BIT_CNT ;
S_A_LAB0:
BCF PORTC,WR
BTFSS S_A_TEMP0,0X07
GOTO S_A_LAB1
BSF PORTC,PDATA
GOTO S_A_LAB2
S_A_LAB1:
BCF PORTC,PDATA
S_A_LAB2:
NOP
BSF PORTC,WR
RLF S_A_TEMP0
DECFSZ SEND_BIT_CNT ;
GOTO S_A_LAB0
RETURN
;--------------------------------------------------
;--------------------------------------------------
;**************************************************
;TMR1 INTERRUPT SERVER PROGRAM
;NAME: TMR1_INT
;FUNCTION: TMR1 SERVER
;PARAMETER IN: NONE
;PARAMETER OUT: PLS_VALID,KEY_5S_IN,KEY_05S_IN;
;PRIVATE PARAMETER:KEY_DONE,KEY_DONE_CHECK,CNT_5MS,
;**************************************************
;--------------------------------------------------
TMR1_INT:
BCF STATUS,RP0
BCF PIR1,TMR1IF
MOVLW TMR1H_DATA ;//////
MOVWF TMR1H ;//////
MOVLW TMR1L_DATA ;//////
MOVWF TMR1L ;//////
TMR1_LAB10:
BTFSS SYS_STATUS,TIMER_PLS_ON
GOTO TMR1_LAB20
BTFSC SYS_STATUS,PLS_VALID
GOTO TMR1_LAB20
INCF TIMER_PLS
MOVF TIMER_PLS,W
SUBLW TIMER_PLS_CHECK
BTFSC STATUS,C
GOTO TMR1_LAB20
BSF SYS_STATUS,PLS_VALID
TMR1_LAB20:
INCF CNT_5MS
MOVF CNT_5MS,W
SUBLW 0X28
BTFSC STATUS,C
GOTO TMR1_OUT
CLRF CNT_5MS
BSF WORK_STATUS,DISP_SYS_FLAG
BSF WORK_STATUS,CHECKSUM_3GROUP_FLAG
BSF WORK_STATUS,FORMAT_SFR_FLAG
BSF WORK_STATUS,DISP_FORMAT_FLAG
TMR1_OUT:
RETURN
;--------------------------------------------------
;**************************************************
;XINT INTERRUPT SERVER PROGRAM
;NAME: XINT_INT
;FUNCTION: XINT SERVER
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:INT_W_TEMP
;**************************************************
;--------------------------------------------------
XINT_INT:
BCF STATUS,RP0
BCF INTCON,INTF
; BTFSC PORTC,REFVP ;REFVP =1 OUT only measure positive energy
BTFSS PORTC,REFVP ;REFVP =1 OUT only measure positive energy
GOTO XINT_OUT
BTFSS PORTA,PLS
GOTO XINT_LAB1
BSF PORTA,A_PLS ; 发脉冲 ,高电平
BSF SYS_STATUS,TIMER_PLS_ON
BSF STATUS,RP0
BCF OPTION_REG,INTEDG
CLRF TIMER_PLS
GOTO XINT_OUT
XINT_LAB1:
BCF PORTA,A_PLS ;发脉冲,低电平
BSF STATUS,RP0
BSF OPTION_REG,INTEDG
XINT_OUT:
CLRF TIMER_PLS
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: EE_READ
;FUNCTION: READ A DATA FROM EE
;PARAMETER IN: W
;PARAMETER OUT: W
;PRIVATE PARAMETER:NONE
;**************************************************
;--------------------------------------------------
EE_READ:
BSF STATUS,RP0
MOVWF EEADR
BSF EECON1,RD
MOVF EEDATA,W
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: EE_WRITE
;FUNCTION: WRITE A DATA TO EE AND VERIFY THE DATA
;PARAMETER IN: EEADR,EEDATA
;PARAMETER OUT: W
;PRIVATE PARAMETER:NONE
;**************************************************
;--------------------------------------------------
EE_WRITE:
BSF EECON1,WREN
BCF INTCON,GIE
MOVLW 0X55
MOVWF EECON2
MOVLW 0XAA
MOVWF EECON2
BSF EECON1,WR
BSF INTCON,GIE
;___________________________________
WRITE_OK:
BTFSC EECON1,WR
GOTO WRITE_OK
VERIFY:
MOVF EEDATA,W
INCF EEDATA
BSF EECON1,RD
XORWF EEDATA,W
BTFSS STATUS,Z
RETLW 0X01
E_W_END:
RETLW 0X00
;--------------------------------------------------
;**************************************************
;CMP INTERRUPT SERVER PROGRAM
;NAME: CM_INT
;FUNCTION: COMPARATOR SERVER
;PARAMETER IN:
;PARAMETER OUT:
;PRIVATE PARAMETER:
;**************************************************
;--------------------------------------------------
CM_INT:
BSF STATUS,RP0
MOVF EEADR,W
MOVWF EEADR_STACK
MOVF EEDATA,W
MOVWF EEDATA_STACK
BCF STATUS,RP0
MOVF CMCON,W
BCF PIR1,CMIF
BTFSS CMCON,COUT
GOTO CM_OUT
BTFSS SYS_STATUS,PLS_INC ;IMPORTANT
GOTO WAIT_P_ON ;
BCF SYS_STATUS,PLS_INC ;
BSF STATUS,RP0
CM_LAB1:
MOVF DATA0,W
MOVWF EEDATA
MOVLW DATA0
MOVWF EEADR
CALL EE_WRITE1
XORLW 0X00
BTFSS STATUS,Z
GOTO CM_LAB1
CM_LAB2:
MOVF PLS_NUM,W
MOVWF EEDATA
MOVLW PLS_NUM
MOVWF EEADR
CALL EE_WRITE1
XORLW 0X00
BTFSS STATUS,Z
GOTO CM_LAB2
WAIT_P_ON:
BCF STATUS,RP0
CLRWDT
BTFSC CMCON,COUT
GOTO WAIT_P_ON
CM_OUT:
BSF STATUS,RP0
MOVF EEADR_STACK,W
MOVWF EEADR
MOVF EEDATA_STACK,W
MOVWF EEDATA
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: CLEAN_JUDGE
;FUNCTION: JUDGE THE CLEAN BUTTON DONE OR NOT
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:NONE
;**************************************************
;--------------------------------------------------
CLEAN_JUDGE:
MOVLW 0X15
MOVWF RUN_CODE
BCF STATUS,RP0
BTFSC PORTC,CLEAN
GOTO CLEAN_OUT
MOVLW 0X0D
CALL DELAY
BTFSC PORTC,CLEAN
GOTO CLEAN_OUT
MOVLW 0X0A
CALL DELAY
BTFSC PORTC,CLEAN
GOTO CLEAN_OUT
BSF STATUS,RP0
CLRF EEDATA
MOVLW DATA0
MOVWF EEADR
CALL EE_WRITE
CLRF EEDATA
MOVLW PLS_NUM
MOVWF EEADR
CALL EE_WRITE
CLRWDT
MOVLW 0X03
MOVWF CLEAN3_CNT
CLRF DATA_POINT
CLEAN_LAB1:
CLRF EEDATA
MOVF DATA_POINT,W
ADDLW DATA1
MOVWF EEADR
CALL EE_WRITE
MOVF DATA_POINT,W
ADDLW DATA2
MOVWF EEADR
CALL EE_WRITE
MOVF DATA_POINT,W
ADDLW DATA3
MOVWF EEADR
CALL EE_WRITE
MOVF RUN_CODE,W
XORLW 0X15
BTFSS STATUS,Z
GOTO DIEDIEDIE
CLRF DATA0
CLRF PLS_NUM
MOVF DATA_POINT,W
ADDLW SUM
MOVWF EEADR
CALL EE_WRITE
MOVF DATA_POINT,W
ADDLW 0X0A
MOVWF DATA_POINT
DECFSZ CLEAN3_CNT
GOTO CLEAN_LAB1
CLRF DP_BACKUP
CLRF EEDATA
MOVLW DATA_POINT
MOVWF EEADR
CALL EE_WRITE
CLEAN_OUT:
RETURN
;--------------------------------------------------
;**************************************************
;SUB_SUB_PROGRAM
;NAME: DELAY
;FUNCTION: DELAY 1028*W US
;PARAMETER IN: W
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:DELAY_TIMER0,DELAY_TIMER1
;**************************************************
;--------------------------------------------------
DELAY:
MOVWF DELAY_TIMER1
DELAY_LAB1:
CLRF DELAY_TIMER0
DELAY_LAB2:
NOP
DECFSZ DELAY_TIMER0,F
GOTO DELAY_LAB2
DECFSZ DELAY_TIMER1,F
GOTO DELAY_LAB1
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: PLS_CNT
;FUNCTION: COUNT THE PLS NUM
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:NONE
;**************************************************
;--------------------------------------------------
PLS_CNT:
BTFSS SYS_STATUS,PLS_VALID
GOTO PLS_CNT_OUT
MOVLW 0XB7
MOVWF RUN_CODE
BCF SYS_STATUS,PLS_VALID
BSF SYS_STATUS,PLS_INC
BCF SYS_STATUS,TIMER_PLS_ON
INCF PLS_NUM
MOVF PLS_NUM,W
SUBLW 0X63 ;100 0x63
BTFSC STATUS,C
GOTO PLS_CNT_OUT
CLRF PLS_NUM
MOVF DATA0,W
CALL INC_JUDGE
MOVWF INT_W_TEMP ;
MOVF INC_TEMP0,W ;
MOVWF DATA0 ;
MOVF INT_W_TEMP,W ;
XORLW 0X01 ;
BTFSS STATUS,Z ;
GOTO PLS_CNT_OUT
MOVF RUN_CODE,W
XORLW 0XB7
BTFSS STATUS,Z
GOTO DIEDIEDIE
MOVLW 0X3A
MOVWF RUN_CODE
CALL READ_DP
ADDLW DATA1
CALL CHECKSUM
XORLW 0X00
BTFSS STATUS,Z
GOTO PLS_CNT_OUT
CALL READ_DP
ADDLW DATA1
CALL READIN
CALL THREE_BYTES_INC
MOVF RESTORE1,W
ANDLW 0X0F
XORLW 0X05
BTFSS STATUS,Z
GOTO PLS_CNT_OUT1
MOVLW DATA1
ADDLW 0X24
CALL WRITEOUT
PLS_CNT_OUT1:
CALL DP_CHANGE
MOVF RUN_CODE,W
XORLW 0X3A
BTFSS STATUS,Z
GOTO DIEDIEDIE
CALL READ_DP
ADDLW DATA1
CALL WRITEOUT
PLS_CNT_OUT:
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: THREE_BYTES_INC
;FUNCTION:
;PARAMETER IN: RESTORE1..4
;PARAMETER OUT: RESTORE1..4
;PRIVATE PARAMETER:
;**************************************************
;--------------------------------------------------
THREE_BYTES_INC:
MOVF RESTORE1,W
CALL INC_JUDGE
MOVWF INT_W_TEMP ;
MOVF INC_TEMP0,W ;
MOVWF RESTORE1
MOVF SUM_TEMP,W
ADDLW 0XA0
ADDWF RESTORE4,F
MOVF INT_W_TEMP,W ;
XORLW 0X01 ;
BTFSS STATUS,Z ;
GOTO THREE_BYTES_INC_OUT
PLS_CNT_LAB3:
MOVF RESTORE2,W
CALL INC_JUDGE
MOVWF INT_W_TEMP ;
MOVF INC_TEMP0,W ;
MOVWF RESTORE2
MOVF SUM_TEMP,W
ADDWF RESTORE4,F
MOVF INT_W_TEMP,W ;
XORLW 0X01 ;
BTFSS STATUS,Z ;
GOTO THREE_BYTES_INC_OUT
PLS_CNT_LAB4:
MOVF RESTORE3,W
CALL INC_JUDGE
MOVWF INT_W_TEMP ;
MOVF INC_TEMP0,W ;
MOVWF RESTORE3
MOVF SUM_TEMP,W
ADDWF RESTORE4,F
MOVF INT_W_TEMP,W ;
XORLW 0X01 ;
BTFSS STATUS,Z ;
GOTO THREE_BYTES_INC_OUT
MOVLW 0X60
ADDWF RESTORE4,F
THREE_BYTES_INC_OUT:
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: DISP_SYS
;FUNCTION: INTERGRATE THE CODING/DISPLAY SUB_PROGRAM TO FINISH DISPLAY WORKS
; BE CALLED EVERY 200MS
;PARAMETER IN: NONE
;PARAMETER OUT: NONE
;PRIVATE PARAMETER:NONE
;**************************************************
;--------------------------------------------------
DISP_SYS:
; MOVLW 0x12
; MOVWF DATA0
; MOVLW 0x34
; MOVWF DATA1
; MOVLW 0x56
; MOVWF DATA2
; MOVLW 0x7
; MOVWF DATA3
MOVLW DATA3
MOVWF CODE_S_POINT ;MUST BEFORE DIS_CODING
MOVLW DIS_BUFFER ;MUST BEFORE DIS_CODING
MOVWF CODE_O_POINT ;MUST BEFORE DIS_CODING
CALL READ_DP
ADDLW DATA1
CALL EE_READ
MOVWF DATA1
CALL READ_DP
ADDLW DATA2
CALL EE_READ
MOVWF DATA2
CALL READ_DP
ADDLW DATA3
CALL EE_READ
MOVWF DATA3
CALL DISP_CODING
MOVLW 0X40 ;MUST BEFORE DISPLAY
MOVWF DIS_BUFFER-0X01 ;MUST BEFORE DISPLAY
BCF STATUS,RP0
MOVF DIS_BUFFER+0X06,W ;+0X01
IORLW 0X10
MOVWF DIS_BUFFER+0X06 ;+0X01
BCF INTCON,GIE
CALL DISPLAY
BSF INTCON,GIE
DISP_SYS_END:
RETURN
;--------------------------------------------------
;**************************************************
;SUB_PROGRAM
;NAME: FORMAT_SFR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -