📄 key_deal.inc
字号:
Key_Deal:
banksel PORTA
comf PORTA,W
movwf Temp1
rlf Temp1,F
movlw b'00000100'
andwf Temp1,F
movf PORTC,W
andlw b'00000011'
iorwf Temp1,W
subwf Key_Old,F
skpz
clrf Key_Push_Timer_Counter
movwf Key_Old
btfss MAIN_CHECK
goto Key_FSM_LED_Deal_Over
bcf MAIN_CHECK
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;PART1: Key_LCD deal
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Key_Deal_Go:
incfsz Key_Push_Timer_Counter,W
incf Key_Push_Timer_Counter,F
movlw d'4'
subwf Key_Push_Timer_Counter,W
skpz
goto Key_Push_Deal_Over
movf Key_Old,W
movwf Key_Flag
Key_Push_Deal_Over:
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
movlw b'00000001'
subwf Key_Flag,W
skpnz
goto KEY_OPEN_Begin_Test
movlw b'00000010'
subwf Key_Flag,W
skpnz
goto KEY_CLOSE_Begin_Test
movlw b'00000000'
subwf Key_Flag,W
skpz
goto KEY_Port_Open_Close_Over
movlw b'00000010'
subwf Key_Flag_Old,W
skpnz
goto Key_Open_Real_Begin
movlw b'00000001'
subwf Key_Flag_Old,W
skpnz
goto Key_Close_Real_Begin
goto KEY_Port_Open_Close_Over
;==============================
KEY_OPEN_Begin_Test:
movlw b'00000010'
subwf Key_Flag_Old,W
skpz
goto KEY_Port_Open_Close_Over
Key_Open_Real_Begin:
goto Hand_Open_Begin
;==============================
KEY_CLOSE_Begin_Test:
movlw b'00000001'
subwf Key_Flag_Old,W
skpz
goto KEY_Port_Open_Close_Over
Key_Close_Real_Begin:
goto Hand_Close_Begin
KEY_Port_Open_Close_Over:
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
incfsz RKE_Learn_Time_Counter,W
incf RKE_Learn_Time_Counter,F
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;PART: Over
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
NORMAL_RKE_Deal_Begin:
movlw RKE_LEARN_READY
subwf RKE_Learn_Status,W
skpnc
goto NORMAL_RKE_Deal_Over_No_RF
btfss RF_FRAME_GET
goto NORMAL_RKE_Deal_Over_No_RF
movf Hop_Recieve4,W
subwf Last_Hop4,W
skpnz
goto Syn_Cnt_Same_Deal
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Serial_Number_Check_Begin:
call Serial_Number_Check
skpc
goto NORMAL_RKE_Deal_Over
Normal_Key_Address_Get_Begin:
movlw KEY1_ADDRESS
movwf Key_Temp_Address
Normal_Key_Address_Get_Loop:
call Serial_Number_Compare
skpc
goto Normal_RKE_Decrypt_Begin
movlw 0x10
addwf Key_Temp_Address,F
movlw KEY4_ADDRESS+1
subwf Key_Temp_Address,W
skpc
goto Normal_Key_Address_Get_Loop
goto NORMAL_RKE_Deal_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Normal_RKE_Decrypt_Begin:
bcf KEY_MAY_ERROR_CHECK
call Hop_Tran
call Decrypt_Key_Tran
call DECRYPT
;temp
;goto Function_Lock_Open
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Syn_Count_Read:
movf Key_Temp_Address,W
movwf Eeprom_Address
movlw d'4'
movwf Eeprom_Number
movlw RKE_Syn_Temp1
movwf FSR
call Read_Eeprom
movf RKE_Syn_Temp2,W
movwf Temp1
movf RKE_Syn_Temp1,W
movwf Temp2
movf HOP2,W
movwf Temp4
movf HOP1,W
movwf Temp3
call Sub_Bit16
btfss Temp4,7
goto Not_More_Than_Half ;
movf RKE_Syn_Temp3,W
movwf Temp1
movwf RKE_Syn_Temp2 ; ?
movf RKE_Syn_Temp4,W
movwf Temp2
movwf RKE_Syn_Temp1 ; ?
movf HOP2,W
movwf Temp4
movf HOP1,W
movwf Temp3
call Sub_Bit16
btfss Temp4,7
goto Not_More_Than_Half
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;temp remove
btfsc KEY_MAY_ERROR_CHECK
goto NORMAL_RKE_Deal_Over
bsf KEY_MAY_ERROR_CHECK
call Learn_Decrypt_Key_Get
call Hop_Tran
call DECRYPT
goto Syn_Count_Read
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Not_More_Than_Half:
movlw d'33'
movwf Temp1
clrf Temp2
call Sub_Bit16
btfsc Temp4,7
goto Syn_Cnt_Small_16
goto Not_Small_Then_16
Syn_Cnt_Small_16:
movf RKE_Syn_Temp2,W
subwf HOP1,W
skpz
goto Syn_Cnt_OK
Syn_Cnt_Same_Deal:
goto NORMAL_RKE_Deal_Over
Not_Small_Then_16:
movf Last_Syn_Count_H,W
movwf Temp2
movf Last_Syn_Count_L,W
movwf Temp1
movf HOP2,W
movwf Temp4
movwf Last_Syn_Count_H
movf HOP1,W
movwf Temp3
movwf Last_Syn_Count_L
call Sub_Bit16
movf Temp4,F
skpz
goto NORMAL_RKE_Deal_Over
decf Temp3,W
skpz
goto NORMAL_RKE_Deal_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Syn_Cnt_OK:
clrf RF_Long_Push_Count
movf Hop_Recieve4,W ;
movwf Last_Hop4
call Syn_Counter_Save
Function_Begin:
movf HOP4,W
andlw b'11110000'
movwf Temp1
movf Serial3,W
andlw b'11110000'
subwf Temp1,W
skpz
goto NORMAL_RKE_Deal_Over
;------------------------------
movlw b'11110000'
andwf HOP4,W
sublw KEY_DOOR_OPEN
skpnz
goto Function_Lock_Open
movlw b'11110000'
andwf HOP4,W
sublw KEY_DOOR_CLOSE
skpnz
goto Function_Lock_Close
goto Function_Over
;------------------------------
Function_Lock_Open:
movlw d'100'+1
movwf Anti_LED_Time_Counter
Hand_Open_Begin:
movlw d'20'+1
movwf S0_Time_Count
goto Function_Over
;------------------------------
Function_Lock_Close:
movlw d'60'+1
movwf Anti_LED_Time_Counter
Hand_Close_Begin:
movlw d'20'+1
movwf S1_Time_Count
goto Function_Over
;------------------------------
Function_Over:
NORMAL_RKE_Deal_Over:
; bcf RF_FRAME_GET
NORMAL_RKE_Deal_Over_No_RF:
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;PART: Over
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
; movf Open_Door_Time_Count,W ;If Function out, then LED out
; iorwf Close_Door_Time_Count,W
; skpnz
; goto LED_Out_Jump
; movlw d'1'
; movwf Anti_LED_Time_Counter
;LED_Out_Jump:
btfss PORT_LEARN_STATUS
goto Function_Out_Jump
clrf S0_Time_Count
clrf S1_Time_Count
clrf Anti_LED_Time_Counter
Function_Out_Jump:
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;PART: Learn
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RKE_Learn_All_Begin:
movlw RKE_LEARN_REAL2+1
subwf RKE_Learn_Status,W
skpnc
clrf RKE_Learn_Status
;******************************
;******************************
RKE_Learn_Begin_Begin:
movlw RKE_LEARN_BEGIN
subwf RKE_Learn_Status,W
skpz
goto RKE_Learn_Begin_Over_Jump
btfss PORT_LEARN_STATUS
goto RKE_Learn_Begin_Low
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Begin_High:
movlw d'1'
movwf Anti_LED_Time_Counter
movlw d'88'
subwf RKE_Learn_High_Time,W
skpz
goto RKE_Learn_Begin_Over
clrf RKE_Learn_High_Time
movlw RKE_LEARN_READY
movwf RKE_Learn_Status
goto RKE_Learn_Begin_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Begin_Low:
clrf RKE_Learn_High_Time
goto RKE_Learn_Begin_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Begin_Over:
goto RKE_Learn_All_Deal_Over
RKE_Learn_Begin_Over_Jump:
;******************************
;******************************
RKE_Learn_Ready_Begin:
movlw RKE_LEARN_READY
subwf RKE_Learn_Status,W
skpz
goto RKE_Learn_Ready_Over_Jump
btfss PORT_LEARN_STATUS
goto RKE_Learn_Ready_Low
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Ready_High:
movlw d'248'
subwf RKE_Learn_High_Time,W
skpz
goto RKE_Learn_Ready_Over
movlw RKE_LEARN_BEGIN
movwf RKE_Learn_Status
clrf RKE_Learn_High_Time
RKE_Learn_Real_Clr_Eeprom_Begin:
bsf WRITE_EEPROM_ENABLE
movlw 0xFF
movwf RKE_Syn_Temp1
movwf RKE_Syn_Temp2
movwf RKE_Syn_Temp3
movwf RKE_Syn_Temp4
clrf Eeprom_Address
RKE_Learn_Real_Clr_Loop:
movlw RKE_Syn_Temp1
movwf FSR
movlw d'4'
movwf Eeprom_Number
call Write_Eeprom
movlw 0x40
subwf Eeprom_Address,W
skpc
goto RKE_Learn_Real_Clr_Loop
bcf WRITE_EEPROM_ENABLE
RKE_Learn_Real_Clr_Eeprom_Over:
bsf WRITE_EEPROM_ENABLE
movlw RKE_Syn_Temp1
movwf FSR
movlw 0x00
movwf RKE_Syn_Temp1
movlw d'1'
movwf Eeprom_Number
movlw LEARN_ADDRESS
movwf Eeprom_Address
call Write_Eeprom
goto RKE_Learn_Ready_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Ready_Low:
clrf RKE_Learn_High_Time
movlw RKE_LEARN_REAL1
movwf RKE_Learn_Status
clrf RKE_Learn_Time_Counter
movlw LEARN_ADDRESS
movwf Eeprom_Address
movlw RKE_Syn_Temp1
movwf FSR
movlw d'1'
movwf Eeprom_Number
call Read_Eeprom
movlw b'11110000'
andwf RKE_Syn_Temp1,F
movlw KEY4_ADDRESS+1
subwf RKE_Syn_Temp1,W
skpnc
clrf RKE_Syn_Temp1
movf RKE_Syn_Temp1,W
movwf Key_Temp_Address
goto RKE_Learn_Ready_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Ready_Over:
goto RKE_Learn_All_Deal_Over
RKE_Learn_Ready_Over_Jump:
; ******************************
; ******************************
RKE_Learn_Real1_Begin:
movlw RKE_LEARN_REAL1
subwf RKE_Learn_Status,W
skpz
goto RKE_Learn_Real1_Over_Jump
comf RKE_Learn_Time_Counter,W
skpnz
clrf RKE_Learn_Status
btfsc PORT_LEARN_STATUS
goto RKE_Learn2_Back
btfss RF_FRAME_GET
goto RKE_Learn_Real1_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
movf Hop_Recieve4,W
movwf Last_Hop4
call Serial_Number_Check
skpc
goto RKE_Learn_Real1_2_Real2
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
movf Serial0,W
movwf Learn_Serial_0
movf Serial1,W
movwf Learn_Serial_1
movf Serial2,W
movwf Learn_Serial_2
movf Serial3,W
andlw b'00001111'
movwf Learn_Serial_3
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Real1_2_Real2:
movlw RKE_LEARN_REAL2
movwf RKE_Learn_Status
clrf RKE_Learn_Time_Counter
movlw d'4'
movwf Anti_LED_Time_Counter
goto RKE_Learn_Real1_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Real1_Over:
goto RKE_Learn_All_Deal_Over
RKE_Learn_Real1_Over_Jump:
;******************************
;******************************
RKE_Learn_Real2_Begin:
movlw RKE_LEARN_REAL2
subwf RKE_Learn_Status,W
skpz
goto RKE_Learn_Real2_Over
comf RKE_Learn_Time_Counter,W
skpnz
clrf RKE_Learn_Status
btfsc PORT_LEARN_STATUS
goto RKE_Learn2_Back
btfss RF_FRAME_GET
goto RKE_Learn_Real2_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
movf Hop_Recieve4,W
subwf Last_Hop4,W
skpnz
goto RKE_Learn_Real2_Over
call Serial_Number_Check
skpc
goto RKE_Learn_Real2_Over
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
call Learn_Decrypt_Key_Get
call Hop_Tran
call DECRYPT
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
movf Serial0,W
subwf Learn_Serial_0,W
skpz
goto RKE_Learn_Real_Jump
movf Serial1,W
subwf Learn_Serial_1,W
skpz
goto RKE_Learn_Real_Jump
movf Serial2,W
subwf Learn_Serial_2,W
skpz
goto RKE_Learn_Real_Jump
movf Serial3,W
andlw b'00001111'
subwf Learn_Serial_3,W
skpz
goto RKE_Learn_Real_Jump
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Real_Save:
call Syn_Counter_Save
bsf WRITE_EEPROM_ENABLE
movf Key_Temp_Address,W
addlw d'8'
movwf Eeprom_Address
movlw KEY0
movwf FSR
movlw d'8'
movwf Eeprom_Number
call Write_Eeprom
movlw b'00001111'
andwf Serial3,F
movf Key_Temp_Address,W
addlw d'4'
movwf Eeprom_Address
movlw Serial0
movwf FSR
movlw d'4'
movwf Eeprom_Number
call Write_Eeprom
movlw 0x10
addwf Key_Temp_Address,F
movlw b'11110000'
andwf Key_Temp_Address,F
movlw KEY4_ADDRESS+1
subwf Key_Temp_Address,W
skpnc
clrf Key_Temp_Address
movf Key_Temp_Address,W
movwf RKE_Syn_Temp1
movlw LEARN_ADDRESS
movwf Eeprom_Address
movlw RKE_Syn_Temp1
movwf FSR
movlw d'1'
movwf Eeprom_Number
call Write_Eeprom
bcf WRITE_EEPROM_ENABLE
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Real_Jump:
movlw d'20' ;500ms
movwf Anti_LED_Time_Counter
RKE_Learn2_Back:
movlw RKE_LEARN_BEGIN
movwf RKE_Learn_Status
clrf RKE_Learn_High_Time
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
RKE_Learn_Real2_Over:
;******************************
;******************************
RKE_Learn_All_Deal_Over:
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
RKE_Mac_Status_To_Learn_Begin:
btfss PORT_LEARN_STATUS
goto RKE_Learn_High_Low_Over
incfsz RKE_Learn_High_Time,W
incf RKE_Learn_High_Time,F
RKE_Learn_High_Low_Over:
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;PART: Function Out
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
movlw d'30' ; S(i)_Time_Count > 30
subwf S0_Time_Count,W
skpnc
clrf S0_Time_Count
movlw d'30'
subwf S1_Time_Count,W
skpnc
clrf S1_Time_Count
Function_Out_Begin:
movf S0_Time_Count,W
skpnz
goto S0_Jp1
decf S0_Time_Count,F
bsf S0_PORT
goto S0_Jp2
S0_Jp1:
bcf S0_PORT
S0_Jp2:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
movf S1_Time_Count,W
skpnz
goto S1_Jp1
decf S1_Time_Count,F
bsf S1_PORT
goto S1_Jp2
S1_Jp1:
bcf S1_PORT
S1_Jp2:
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fun_Out_Anti_LED_Begin:
movf Anti_LED_Time_Counter,F
skpnz
goto Fun_Out_Anti_LED_Begin_Jp1
decf Anti_LED_Time_Counter,F
movf Anti_LED_Time_Counter,W
movwf Temp1
clrf Temp2
Fun_Out_Anti_LED_Loop:
movlw d'20'
subwf Temp1,F
skpc
goto Fun_Out_Anti_LED_Loop_Ov
incf Temp2,F
goto Fun_Out_Anti_LED_Loop
Fun_Out_Anti_LED_Loop_Ov:
btfss Temp2,0
bsf OUT_PORT_ANTI_LED
btfsc Temp2,0
Fun_Out_Anti_LED_Begin_Jp1:
bcf OUT_PORT_ANTI_LED
Fun_Out_Anti_LED_Over:
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
bcf RF_FRAME_GET
movlw b'00000011'
andwf Key_Flag,W
sublw b'00000011'
skpnz
goto Key_FSM_LED_Deal_Over
movf Key_Flag,W
movwf Key_Flag_Old
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Key_FSM_LED_Deal_Over:
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -