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

📄 du_追加.dt

📁 用em78p153实现的单火线86型遥控开关的实现方案
💻 DT
📖 第 1 页 / 共 3 页
字号:
	    jbc  p6,key2
	    call  key2_low
	    
	    jbc  p6,key3
	    call  key3_low
	    ret
		nop
		nop
		jmp	MAIN_LOOP
	    
key1_low:
 	  	
	    jbc flag,one_end_low 
	    ret    
	    call  delay_1ms

    	jbs   p6,key1
    	ret  
    		    
		bc    p5,led1   
		bc    LIGHT,F_LIGHT1 
			 	  
   	 bc    flag,one_end_hight 
    	bs	flag,one_end_low
		bs    flag2,key1_flag
		;bc    flag2,open_set_key
		bs    flag3,have_an_key
		ret	
				
key2_low:		
	  
	    jbc   flag2,two_end_low 
	    ret 
	    call  delay_1ms
	    
			    
    	jbs   p6,key2
    	ret  
    
	    bc    p5,led2
	    bc    LIGHT,F_LIGHT2	
	        
	    bc    flag2,two_end_hight 
		bs	flag2,two_end_low			  		     
		bs    flag2,key2_flag
		;bc    flag2,open_set_key
		bs    flag3,have_an_key
		
		clr     key2_add_t
    	clr     add_delay_time
        call    delay_200ms
		ret
		nop
		nop
		jmp	MAIN_LOOP
			
key3_low:
	 		  
	    jbc   flag3,three_end_low 
	    ret  
		call  delay_1ms
						
    	jbs   p6,key3
    	ret 

		bc    p5,led3			  		     
	    bc    LIGHT,F_LIGHT3
	    	    	    
	    bc    flag3,three_end_hight 
		bs	flag3,three_end_low
		bs    flag3,key3_flag
	;	bc    flag2,open_set_key
		bs    flag3,have_an_key
		
		clr     key3_add_t
    	clr     add_delay_time
        call    delay_200ms
		ret	
	
				
;+++++++++++++++++++++++++++++hight+++++++++++++++
		
WORKING_hight:
				
		MOV	 A,@0B10111111   ; P60:IRIN,P63:SETTING     
		IOW	 P6   			
	    jbs  P6,key1			;+++++++++高电平灯光,设键
	    call  key1_hight
	    	   	    
	    jbs  P6,key2		
	    call key2_hight
	   	   
	    jbs  P6,key3		
	    call key3_hight
	    ret
		nop
		nop
		jmp	MAIN_LOOP	    			
	    			
key1_hight:
	    			
	    jbc flag,one_end_hight 
	    ret
	    	    
	    call  delay_1ms
    	jbc   p6,key1
    	ret 
    	 		    
		bs  p5,led1
		bs  LIGHT,F_LIGHT1 	 	  
   	 bc  flag,one_end_low	 
	    bs  flag,one_end_hight 
		bs  flag2,key1_flag
		;bc  flag2,open_set_key
		bs  flag3,have_an_key
		ret
		nop
		nop
		jmp	MAIN_LOOP			
					
key2_hight:			   		       	 	 	    	    
	    jbc  flag2,two_end_hight 
	     ret
	     
	    call  delay_1ms		    
    	jbc   p6,key2
    	ret   
		bc    LIGHT, yao_key2_flag    
				     
	    bc   flag2,two_end_low	    
	    bs   flag2,two_end_hight	    		
	;	bc   flag2,open_set_key
		bs   flag3,have_an_key
						
		jbs  flag3,open_close_key2  ;/*/*/*/*/*/
   	 ret
    	bs   LIGHT,F_LIGHT2	 
		bs   p5,led2 
		bs    flag2,key2_flag
		ret
		
	        	  	    	    	
			
key3_hight:		
   	    
	    jbc  flag3,three_end_hight 
	    ret
	    		    
   	 call  delay_1ms
    	jbc   p6,key3
    	ret  	
    	bc    LIGHT, yao_key3_flag   
    	 	 	     	   						     
	    bc   flag3,three_end_low	    
	    bs   flag3,three_end_hight	    			
	;	bc   flag2,open_set_key
		bs   flag3,have_an_key

		
		jbs  flag3,open_close_key3  ;/*/*/*/*/*/
   	 ret
   	 bs   LIGHT,F_LIGHT3
   	 bs   p5,led3
		bs   flag3,key3_flag   	 	  	 
		ret	  				
		nop
		nop
		jmp	MAIN_LOOP   	
   	
;+++++++++++++++++++++++++++++++++++++++++++++++++++++
					;+++end++按键++++++	
					
					
;+++++++++++++++++++++start read24c02++++++++++++++++++
read24c02:
		jbs   flag2,set_key_one
		jmp    read_ma2
		nop
		nop
   	 MOV	A,@0x10		
        MOV	add_nop,A
		CALL   RDBYTE
		MOV	A,TMEP_CI	
		mov    ma1_one,a
		call    delay_1ms
		nop
		nop
		MOV	A,@0x11		
        MOV	add_nop,A
		CALL   RDBYTE
		MOV	A,TMEP_CI
		mov    ma1_two,a
	    call    delay_1ms
		nop
		nop		
		MOV	A,@0x12		
        MOV	add_nop,A
		CALL   RDBYTE
		MOV	A,TMEP_CI
		mov    ma1_three,a
		clr     add_nop
	    call    delay_1ms		
read_ma2:
    	jbs   flag2,set_key_two
		jmp    read_ma3		
		nop
		nop		                      ;ma2
	    MOV	A,@0x13		
        MOV	add_nop,A
		CALL   RDBYTE
		MOV	A,TMEP_CI
		mov    ma2_one,a
	    call    delay_1ms
		nop
		nop		
		MOV	A,@0x14		
        MOV	add_nop,A
		CALL   RDBYTE
		MOV	A,TMEP_CI
		mov    ma2_two,a
	    call    delay_1ms
		nop
		nop		
		MOV	A,@0x15		
        MOV	add_nop,A
		CALL   RDBYTE
		MOV	A,TMEP_CI
		mov    ma2_three,a
	    call    delay_1ms
		clr     add_nop
read_ma3:
		jbs   flag3,set_key_three
		ret										;ma3
		nop
		nop							
   	 MOV	A,@0x16		
        MOV	add_nop,A
		CALL   RDBYTE
		MOV	A,TMEP_CI	
		mov    ma3_one,a
	    call    delay_1ms		
		nop
		nop		
		MOV	A,@0x17		
        MOV	add_nop,A
		CALL   RDBYTE
		MOV	A,TMEP_CI	
		mov    ma3_two,a
	    call    delay_1ms	
		nop
		nop		
		MOV	A,@0x18		
        MOV	add_nop,A
		CALL   RDBYTE
		MOV	A,TMEP_CI
		mov    ma3_three,a
		clr     add_nop
	    call    delay_1ms
		ret	
						
		
						
			
;+++++++++++++++++****按键相应处理程序+++++++++++++++++++++++++
				;++++++++++++++++++								
IR_KEY_DEAL:		
		jbc flag2,open_set_key
		ret
					
		JBS	 FLAG,F_HAVE_KEY
		RET						; 没遥控建按下则推出
		BC	  FLAG,F_HAVE_KEY	; 清除按键标志									 ; 在开关子程序中清0
			
   	 mov	a,ma1_one				 ; 判断是否为第一个按键		
		XOR	A,REC_DATA0
		JBS    PSW,Z	
		jmp    check_key2_yao
									 ; 判断是否为第一个按键		
		mov	a,ma1_two							 
		XOR	A,REC_DATA1
		JBS	PSW,Z	
		jmp    check_key2_yao                                                 
		
	
		mov    a,ma1_three
		XOR	A,REC_DATA2
		JBS	PSW,Z	
		jmp    check_key2_yao			
	
		call	 LIGHT1_STATE
		nop
		nop		
check_key2_yao:

   	 jbs  flag3,open_close_key2  ;/*/*/*/*/*/
   	 jmp    check_key3_yao
   	 	    
						 ; 判断是否为第一个按键		
		mov    a,ma2_one
		XOR	A,REC_DATA0
		JBS    PSW,Z	
		jmp    check_key3_yao
		
						
		mov    a,ma2_two					 ; 判断是否为第一个按键		
		XOR	A,REC_DATA1
		JBS	PSW,Z	
		jmp    check_key3_yao
	
			
		mov    a,ma2_three				 ; 判断是否为第一个按键		
		XOR	A,REC_DATA2
		JBS	PSW,Z	
		jmp    check_key3_yao									; 判断是否为第二个按键			
		call	 LIGHT2_STATE	
		nop
		nop	
							
check_key3_yao:

		jbs  flag3,open_close_key3  ;/*/*/*/*/*/
   	 ret	    

    	mov    a,ma3_one					 ; 判断是否为第一个按键		
		XOR	A,REC_DATA0
		JBS    PSW,Z	
		ret

		nop
		nop		
		mov    a,ma3_two				 ; 判断是否为第一个按键		
		XOR	A,REC_DATA1
		JBS	PSW,Z	
		ret
													 ; 判断是否为第一个按键				
		mov    a,ma3_three
		XOR	A,REC_DATA2
		JBS	PSW,Z	
		ret									; 判断是否为第二个按键			
		call	 LIGHT3_STATE				
		ret	   										   		
	
			
	;*****LIGHT1********
	LIGHT1_STATE:
		JBS	LIGHT,F_LIGHT1
		JMP	LIGHT1_ON
		BC	 LIGHT,F_LIGHT1	; 关灯
		BC	 P5,led1
		ret
	LIGHT1_ON:
		BS	 LIGHT,F_LIGHT1
		BS	 P5,led1				
		ret	
		
	;*****LIGHT2********		
	LIGHT2_STATE:
		JBS 	LIGHT,F_LIGHT2
		JMP 	LIGHT2_ON
		BC	  LIGHT,F_LIGHT2	; 关灯
		BC	  P5,led2
		bc      LIGHT, yao_key2_flag		
		clr     add_delay_time
        clr	 key2_add_t
        call    delay_200ms
		ret
	LIGHT2_ON:
		BS	  LIGHT,F_LIGHT2
		BS	  P5,led2	
	    bs  	LIGHT,yao_key2_flag	
	    ret	
		
		
	;*****LIGHT3********		
    LIGHT3_STATE:
		JBS 	LIGHT,F_LIGHT3
		JMP 	LIGHT3_ON
		BC	  LIGHT,F_LIGHT3	; 关灯
		BC	  P5,led3
		bc      LIGHT, yao_key3_flag		
		clr     add_delay_time
        clr	 key3_add_t
        call    delay_200ms		
		RET
	LIGHT3_ON:
		BS 	 LIGHT,F_LIGHT3
		BS 	 P5,led3	
		bs      LIGHT, yao_key3_flag
		RET
					  
;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++			
           ;+++++++++++end++键相应处理程序结束+++++++++++++
							
					
					
																						
;+++++++++++++++++解码主流程++++++++++++++++++++++++
   			;+++++++++++++++	
RECEIVE_IR_KEY:
		call    tong_bu_ma    ;预读码		
		call    jie_ma		;程序码
		call    check_double		
		ret		
;++++++++++++++++++++++++++++++++++++++++++
			;+++++end++解码主流程+++++++++++++++++
					
;+++++++++++++++++++++++++++++++++++同步码++++++++++++++++++++++++++		
tong_bu_ma:    
		MOV	 A,@0B10111111   ; P60:IRIN,P63:SETTING     
		IOW	 P6   
	    	 							
		clr  REC_BUF				
		clr  ADD_TIME
	
check:	    			
		jbc p6,IRIN			;辨别 L,H    +++++是否大于110a,大于pass
		jmp hight		                   
		call  delay_1a		
		mov a,@84			   ;;;110a 67 
		bc  psw,c							
		sub a,REC_BUF	   	;大于110a
		jbs psw,c				    	        	
	    jmp check	       	;少于重检口	
	    jmp go_on_tong_bu		
	    	
hight:
		call    delay_1a
		mov 	a,REC_BUF       ;+++++++++是否大于250a,大于退出
		bc 	 psw,c		
		add 	ADD_TIME,a  	;累加时间
		
		jbc	 psw,c
		jmp	 exit_tong_bu
								
		mov 	a,@200 		 ;230

		bc 	 psw,c							
		sub	 a,ADD_TIME  	;;;;250 148
				
		jbc	 psw,c		  		    
	    jmp	 exit_tong_bu	;大于退出	 
	      	    
	    mov	 a,@0	    	;少于清0
	    mov 	REC_BUF,a	 	    	 
		jmp     check	   	;没有			
			
				
go_on_tong_bu:
	    			
		 clr	REC_BUF       ;是否大于130a,大于退出。电平变化pass
keep_low:
		jbc	 p6,IRIN       
		jmp     pass_tong_bu
		
		call    delay_1a		 
		
		bc	  psw,c
		mov	 a,@60	   	;130a  	95	
		sub	 a,REC_BUF				
		jbs	 psw,c						      		
		
		jmp 	keep_low
		jmp     exit_tong_bu
		
pass_tong_bu:
		bs      flag,F_HAVE_KEY
		ret								
exit_tong_bu:
		bc      flag,F_HAVE_KEY
		ret				
;++++++++++++++++++++++++++++++++++++++++++++++++
        	;++++++++++同步码++++++++++
								
											
				
;+++++++++++++++++++++++++++解码主程序++++++++++++++++++++++++++++

jie_ma:	
	    jbs    flag,F_HAVE_KEY   ;
		jmp    exit_jie_ma ;+++++++一字节重复八次du_ma_cheng_xu
	    mov    a,@0		;+++++++共3字节24码
		mov    tmep_code,a
		mov    a,@8				;重复8次
		mov    tmep_ci,a
		bc     flag,erro
ma_one:		
		call   du_ma_cheng_xu  	;叫解码程序
		mov    a,tmep_code
		mov    REC_DATA0,a
		
		jbc    flag,erro			;;;;;;;;;;;;;;;;
		jmp    exit_jie_ma		;;;;;;;;;;;;;;;;;
		
		djz	tmep_ci
		jmp    ma_one
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~	 
	    mov    a,@0
		mov    tmep_code,a	
		mov    a,@8				;重复8次
		mov    tmep_ci,a
ma_two:
		call   du_ma_cheng_xu  	;叫解码程序
		mov    a,tmep_code
		mov    REC_DATA1,a
		
		jbc    flag,erro			;;;;;;;;;;;;;
		jmp    exit_jie_ma		;;;;;;;;;;;;;;;;;
		
		djz	tmep_ci
		jmp    ma_two
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~		
	    mov	a,@0
		mov	tmep_code,a
		mov	a,@8				;重复8次
		mov    tmep_ci,a
ma_there:
		call   du_ma_cheng_xu	  ;叫解码程序
		mov    a,tmep_code
		mov    REC_DATA2,a
		
		jbc    flag,erro		    ;;;;;;;;;;;;;;;;;
		jmp    exit_jie_ma		;;;;;;;;;;;;;;;;;
		
		djz	tmep_ci
		jmp    ma_there	
         bs  flag,F_HAVE_KEY  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -