📄 chk_key.asm
字号:
;///////////////////////////////////////////////////////
;DEFAULT 41 MODE
;///////////////////////////////////////////////////////
CHECK_KEY COMF RX0,W ;INVERT RX0 DATA
MOVWF DIS_BUT0
COMF RX1,W ;INVERT RX1 DATA
MOVWF DIS_BUT1
MODE23 BTFSS MODE_2 ;CHECK DEVICE TYPE=2 ?
GOTO MODE31 ;NO
; MOVLW 0xF8
; ANDWF DIS_BUT0,F
; MOVLW 0x3F
; ANDWF DIS_BUT1,F
GOTO CHK_PSCTP_CHG
MODE31 BTFSS MODE_3 ;CHECK DEVICE TYPE=3 ?
GOTO MODE53 ;NO
; MOVLW 0x08
; ANDWF DIS_BUT0,F
; MOVLW 0xC0
; ANDWF DIS_BUT1,F
GOTO CHK_PSCTP_CHG
MODE53 BTFSS MODE_5 ;CHECK DEVICE TYPE=5 ?
GOTO CHK_PSCTP_CHG ;NO
MOVLW B'01100001'
ANDWF DIS_BUT1,W
MOVWF TEMP_BUFFER
BTFSC DIS_BUT1,7 ;PRESSED R2?
BSF TEMP_BUFFER,1
BTFSC DIS_BUT1,1 ;PRESSED L1?
BSF TEMP_BUFFER,2
BTFSC DIS_BUT1,4 ;RRESSED R1?
BSF TEMP_BUFFER,3
BTFSC DIS_BUT1,3 ;RRESSED TRIANGLE BUTTON ?
BSF TEMP_BUFFER,4
BTFSC DIS_BUT1,2 ;PRESSED SQUARE BUTTON ?
BSF TEMP_BUFFER,7
MOVF TEMP_BUFFER,W
MOVWF DIS_BUT1
;--------------------------------------------------------------------
CHK_PSCTP_CHG:
MOVF DIS_BUT0,W
XORWF DIS_BUT0_SAV,W
BTFSS STATUS,Z
GOTO CHK_PSCTP_CHG1
MOVF DIS_BUT1,W
XORWF DIS_BUT1_SAV,W
BTFSC STATUS,Z
GOTO EXIT_CHECK_KEY
;--------------------------------------------------------------------
CHK_PSCTP_CHG1:
MOVF DIS_BUT0,W
MOVWF DIS_BUT0_SAV
MOVF DIS_BUT1,W
MOVWF DIS_BUT1_SAV
;--------------------------------------------------------------------
MOVF DIS_BUT0,W
XORLW B'00000001'
BTFSS STATUS,Z ;SELECT Button is pressed ?
GOTO CHK_KEY1 ;No
MOVF DIS_BUT1,W
XORLW B'00000101'
BTFSS STATUS,Z ;L2 / L1 Buttons is preesed ?
GOTO CHK_KEY1 ;No
MOVF PSCTP_REQ,W
SUBLW 0x02
MOVLW 0x02
BTFSC STATUS,C ;Check protocol ver 2 or 3 ?
MOVLW 0x03
MOVWF PSCTP_REQ ;Psctp ver 2->3 or 3->2
BSF CHG_PSCTP_FB ;Change Protocol Version 2->3 or 3->2
MOVLW D'35'
MOVWF TEMP_BUFFER
MOVWF TEMP_BUFFER1
MOVWF TEMP_BUFFER2
DIS_CONNECT
CLRWDT
DECFSZ TEMP_BUFFER,F
GOTO DIS_CONNECT
DECFSZ TEMP_BUFFER1,F
GOTO DIS_CONNECT
DECFSZ TEMP_BUFFER2,F
GOTO DIS_CONNECT
GOTO EXIT_CHECK_KEY
;--------------------------------------------------------------------
CHK_KEY1:
MOVF DIS_BUT0,W
XORLW B'10001001'
BTFSS STATUS,Z ;START / SELECT / LEFT Button is pressed ?
GOTO CHK_KEY2 ;No
MOVF DIS_BUT1,W
XORLW B'00100011'
BTFSS STATUS,Z ;L2 / R2 / CIRCLE Buttons is preesed ?
GOTO CHK_KEY2 ;No
BSF PCLATH,3
CALL EE_WPROT
CLRF PCLATH
CALL ERASE_EEP
CALL WR_DEFAULT_DATA
BSF RESET_PROG
GOTO EXIT_CHECK_KEY
;--------------------------------------------------------------------
CHK_KEY2:
MOVF DIS_BUT0,W
XORLW B'10000001'
BTFSS STATUS,Z ;SELECT / LEFT Button is pressed ?
GOTO EXIT_CHECK_KEY ;No
MOVF DIS_BUT1,W
XORLW B'00100011'
BTFSS STATUS,Z ;L2 / R2 / CIRCLE Buttons is preesed ?
GOTO EXIT_CHECK_KEY ;No
BTFSS EE_EXIST_FB ;EEPROM existed ?
GOTO EXIT_CHECK_KEY ;No -> exit
MOVLW 0x01
MOVWF EE_ADDR
CLRF EE_BUF0
CLRF EE_BUF1
BSF PCLATH,3
CALL EE_READ
CLRF PCLATH
RRF EE_BUF1,W
BTFSS STATUS,C
BSF EE_BUF1,0
BTFSC STATUS,C
BCF EE_BUF1,0
BSF PCLATH,3
CALL EE_WRITE
CLRF PCLATH
BSF RESET_PROG
EXIT_CHECK_KEY RETURN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -