⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 key_deal.inc

📁 汽车遥控制的源代码.用的单片机是PIC16F72. 大批量生产.
💻 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 + -