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

📄 du_追加.dt

📁 用em78p153实现的单火线86型遥控开关的实现方案
💻 DT
📖 第 1 页 / 共 3 页
字号:
	;**********************************************************
	;123456789
	;project name :			
	;writer :  
	;establish date :	
	;modify date :		
	;CHIP EM78P153s  F=    4MHZ 	T=1us
	;SETUP : CYCLE=2,CLOCK=4,ENABLE WDT
	;***********************************            ***********************
	
	;define ram
	;**********************************************************
	
	
	
	IND		==	 0
	TCC		==	 1
	PC	 	== 	2
	STATUS 	== 	3
	FSR		== 	4
	P5	 	==	 5
	P6	 	== 	6	
	R4	 	== 	0X04
	    			
	;define stutas bit
	;**********************************************************
	PSW  	==	0x03
	C		==	0
	Z		==	2
	
	;define p5 bit
	;**********************************************************
	led1    equ  1
	led2    equ  2
	led3    equ  3
	SDA     EQU     0     ;OUT, P6.7, data in/out	
	;define P6 bit
	;********************************************************
	IRIN	EQU	 7         	  ;IN, IR CECEIVE IN
         
	SCL     EQU     6               ;OUT, P6.6, serial clock

	key1	EQU	 5
    key2    EQU	 4
    key3    EQU     3
                    
  
   check_led2      ==     0
   check_led3      ==     1

	

	;define cont bit
	;**********************************************************
	PAB         ==       3
	TE          ==       4
	TS          ==       5
	INT_FLG     ==       6
	
	;DEFINE PULL_DOWN
	;**********************************************************
	IOCB        ==       0xb
	
	;DEFINE OPEN_DRAIN
	;**********************************************************
	IOCC        ==       0xc 
	
	;DEFINE PULL_HIGH
	;**********************************************************
	IOCD        ==       0xd
	
	;define wdt bit
	;**********************************************************
	IOCE        ==       0xe
	EIS         ==       6
	WDTE        ==       7
	
	;DEFINE INT MASK
	;**********************************************************
	IOCF        ==       0xf
	TCIE        ==       0
	ICIE        ==       1
	EXIE        ==       2
	
	;define RF
	;**********************************************************
	RF  	==     	0x0f
	TCIF	==     	0
	ICIF	==     	1
	EXIF	==     	2
	;DEFINE INTR
	
	
	;define ram
	;**********************************************************			
	REC_BUF	      == 	0x24    ;EEPROM
	REC_DATA0		== 	0x12;*   
	REC_DATA1		== 	0x13;*
	REC_DATA2		== 	0x14;*
	KEY_CODE		 ==	 0x14;*
	
	ADD_TIME	 	==  	0x20   ;ERCODE
	TIMER0	 	  ==	  0x16   ;DATAO	
	TMEP_CI  	    ==  	0x17   ;DATAI
	tmep_code  	  ==	  0x18	;TXBUF 
	add_nop     	 ==  	0x19;*  ADDR 
	tmep_data2  	 ==      0x1a   ;RXBUF 				
	key_1_buf          ==      0x1b;
	key_2_buf          ==      0x1c
	key_3_buf          ==  	0x1d
	delay_time         ==      0x1e; *
	have_many_key      ==      0x23   ;COUNT
		
	key2_add_t         ==  	0x1f ;/*/*/*
	
	flag2              ==      0x21
	set_key_one        ==      1 
	set_key_two        ==      2
	open_set_key       ==      3
	key2_flag          ==      4
	two_end_hight      ==      5
	two_end_low        ==      6
	key1_flag          ==      7
				

		
	flag3          	==    0x22	
	set_key_three  	==      1 
	key3_flag      	==	  2
	three_end_hight    ==	  3
	three_end_low  	==	  4	
	have_an_key        ==	  5
	open_close_key2    == 	 6
	open_close_key3    ==  	7
			

	
	key3_add_t         ==	 0x15

	
		
		
	FLAG	     EQU           0x11	
	LIGHT        EQU	       0x25
	
	ma1_one            ==      0x26
	ma1_two			==	  0x27
	ma1_three	  	==      0x28
	ma2_one			==	  0x29
	ma2_two			==	  0x2a
	ma2_three	  	== 	 0x2b
	ma3_one			==      0x2c
	ma3_two			==      0x2d
	ma3_three	  	==  	0x2e
	add_delay_time     ==      0x2f
	;*****************************************************************************
	;**  EM78单片机与24Cxx / 85Cxx 串行CMOS EEPROM接口I2C总线读/写的程序
	;**  (所有时隙均基于2MHZ晶体震荡器频率)
	;*****************************************************************************
	;       存储器定义
/*	EEPROM  EQU     0x20              ; Bit buffer
	ERCODE  EQU     0x21             ; Error code (to indicate bus status)
	ADDR    EQU     0x22              ; Address register
	DATAI   EQU     0x23              ; Stored data input register
	DATAO   EQU     0x24              ; Stored data output register
	TXBUF   EQU     0x25              ; TX buffer
	RXBUF   EQU     0x26              ; RX buffer
	COUNT   EQU     0x27              ; Bit counter*/
			  ; 灯状态标志

	
;	FLAG	EQU     0x28
	F_CONTINUE_KEY     EQU	 0		; 连续按键标志
	F_HAVE_KEY	     EQU	 1		  ; 接收到按键标志
	set_key_flag	   EQU     2               ; Error flag
	one_end_hight	  EQU	 3
    lian_ma_flag       EQU	 4
	ERROR              EQU	 5
	one_end_low	    EQU	 6		; 	红外
	ERRO               EQU     7
	
	;宏定义
	;**********************************************************
	CHIP_CODE0	EQU	0x04
	CHIP_CODE1	EQU	0xfb

	;灯状态标志
	F_LIGHT1	EQU		0
	F_LIGHT2	EQU		1
	F_LIGHT3	EQU		2
	F_LIGHT4	EQU		3
	F_LIGHT5	EQU		4
	F_LIGHT6	EQU		5
	yao_key3_flag	EQU		6
	yao_key2_flag	EQU		7
	
	;-----------------------------------------------------------------------------
	;                     位定义
	; EEPROM Bits
	DI      EQU     7               ; EEPROM input
	DO      EQU     6               ; EEPROM output
	; I2C Device Bits



	;##########################################################
	;**********************************************************
	ORG      0x0
	JMP      RESET
	NOP
	NOP
	NOP  
	jmp    MAIN_LOOP	
	NOP
	NOP
	org      0x8         
	NOP
	NOP  
	jmp    MAIN_LOOP
    nop
    nop
	jmp    MAIN_LOOP
	
	ORG      0x20
      ;*****************PROGAM RESET*****************************
RESET:   
		MOV      A,STATUS  
		AND      A,@0x18        ; GET TO PD
		JBC      STATUS,Z      
		JMP      INIT_ALL
		NOP
		NOP  
INIT_ALL:
		MOV      A,@0x00        ;  EX_INT,预分频给TCC,1:64        open  wdt
	    CONTW
		      
		MOV	 A,@0x00
		IOW	 P5
		MOV	 P5,A			; 上电时刻关灯 
			
		MOV	 A,@0B10111111   ; P60:IRIN,P63:SETTING     
		IOW	 P6        
		
		MOV      A,@0xff        ; DIABLE PULL_DOWN
		IOW      IOCB
		
		MOV      A,@0xff        ; DISABLE OPEN_DRAIN
		IOW      IOCC
		
		MOV      A,@0x87         ;  PULL_HIGH
		IOW      IOCD
		
		MOV      A,@0x00        ; ENABLE WDT, P60设置为外部中断
		IOW      IOCE 
		
		MOV      A,@0x00        ; ENABLE EX_INT,TCC INT
		IOW      IOCF
		
		CLR      RF
		DISI					;关中断
	
		clr     FLAG
	    clr     LIGHT
	    clr     flag2
	    clr     flag3
	    clr     delay_time
		clr     have_many_key
		clr     key_1_buf
	    clr     key_2_buf
		clr     key_3_buf
		clr     add_delay_time
		clr     key3_add_t  
		clr     key2_add_t 

	
;*********主程序开始*********************
MAIN:	
		call   delay_and_read
		nop
		nop
MAIN_LOOP:	
    	call   check_led2_led3	
		call   set_key_check
		call   set_key_time

    	call   WORKING_low
		call   WORKING_hight

		call   RECEIVE_IR_KEY		
		jbc	flag,set_key_flag
	    call    SET_KEY						; 按键健值设定
	    call   IR_KEY_DEAL
		nop
		nop
	    JMP	 MAIN_LOOP
	   		   								
;************end*********************************
                                   ;-=/**/**//*/*/*/*/
delay_and_read:		
		mov   a,@0
		mov   p5,a
		                               ;/*/*/*/**/6561231321
		mov    a,@30	   
		mov    REC_BUF,a
	
delay_1:
		call   delay_100ms
		DJZ    REC_BUF
		jmp    delay_1
								
		clr    REC_BUF
		bs     flag2,set_key_one
		bs     flag2,set_key_two
		bs     flag3,set_key_three
		nop
    	call	read24c02
    	nop
    	bc     flag2,set_key_one
		bc     flag2,set_key_two
		bc     flag3,set_key_three		
		nop                                   
        ret
        nop
        nop
	    JMP	 MAIN_LOOP                             
                                   
;/*/*/*/////////////////////////////////////////////////////                                   
                                   
check_led2_led3:
		MOV	   A,@0B10111111      ; P60:IRIN,P63:SETTING     
		IOW	   P6  
		
		jbs       flag2,two_end_low 
		jmp  	 check_three_key
		jbs  	 p6,check_led2
		jmp   	check_three_key
		inc  	 key2_add_t
		
check_three_key:		
		jbs  	 flag3,three_end_low 
		jmp 	  add_check_time
		jbs  	 p6,check_led3
		jmp  	 add_check_time
		inc  	 key3_add_t
			     
add_check_time:
		 jbc  	flag2,two_end_low
		 jmp  	ji_shuan
		 jbs  	flag3,three_end_low 
		 jmp  	 hight_clr			
ji_shuan:		 
	 	inc 	 add_delay_time		 
	 	mov	  a,@60
	 	mov	  REC_BUF,a 
	 	mov	  a,add_delay_time		
		 xor	  a,REC_BUF
		 jbs  	psw,z
	 	ret
	 	clr      add_delay_time
	 	
	     jbs      flag2,two_end_low
	 	jmp  	 check_three_zong
	 	
		 jbc      LIGHT,yao_key2_flag
	 	jmp      check_three_zong
	 				 
	 	mov      a,key2_add_t
		 bc 	  psw,c							
	 	sub	  a,@30					
		 jbc	  psw,c
		 jmp      led2_without		 		  		    
	     bs       flag3,open_close_key2 

	   	     
check_three_zong: 		  
         clr       key2_add_t   
         
         jbs 	  flag3,three_end_low 
		 jmp  	 hight_clr	 
		 
	 	jbc 	  LIGHT,yao_key3_flag
		 jmp  	 hight_clr		
		 	      
	     mov       a,key3_add_t
		 bc 	   psw,c							
	 	sub	   a,@30				
		 jbc	   psw,c
		 jmp       led3_without	 		 		  		    
	     bs        flag3,open_close_key3 
	     clr       key3_add_t
	     nop
         nop 
	 	ret

led2_without:
		bc   	 flag3,open_close_key2
		bc   	 p5,led2			  		     
	    bc    	LIGHT,F_LIGHT2
		jmp  	 check_three_zong
		
led3_without:
		bc    	p5,led3			  		     
	    bc   	 LIGHT,F_LIGHT3
		bc   	 flag3,open_close_key3
		clr  	 key3_add_t
		ret		
		
hight_clr:
		clr 	 add_delay_time
		clr      key3_add_t
		ret
;++++++++++++++++++++++++设键时限+++++++++++++++++++++
					;+++++++++++++++++++

set_key_time:
		jbc  	 flag2,open_set_key
		jmp  	 add_delay_time_too		  
		jbs  	 flag3,have_an_key
		ret
		
add_delay_time_too:				 
		inc		 delay_time
	    mov		 a,@20          ;//////////////////按键时间
		mov		 REC_BUF,a 
		mov		 a,delay_time		
		xor 		a,REC_BUF
		jbs		 psw,z
		ret
			
	    bc 		 flag3,have_an_key	    
		
		clr 		key_1_buf
		clr 	    key_2_buf
		clr  	   key_3_buf
		bc     	flag2,set_key_one
	    bc     	flag2,set_key_two
	    bc     	flag2,set_key_three
		bc    	 flag2,open_set_key
		clr   	 delay_time
		ret 					
																
;+++++++++++++++++++++++设键动作++++++++++++++++
					;++++++++++++++++++++++		
set_key_check: 			 
		jbs    flag2,key1_flag
		jmp    key2_check
		bc     flag2,key1_flag
		clr   delay_time					  	
        inc   key_1_buf
        	       	
    	mov a,@0x02
    	mov REC_BUF,a 		
    	mov a,key_1_buf
    	xor a,REC_BUF
    	jbs psw,z       
		jmp   close_set_key1	
		
		bs  flag2,set_key_one
		bs  flag2,open_set_key
		clr   delay_time 
		nop	
	
key2_check:
		jbs  flag2,key2_flag
		jmp  key3_check
		bc    flag2,key2_flag
			
		clr   delay_time
					
	    inc   key_2_buf
	       	
    	mov a,@0x02
    	mov REC_BUF,a 		
    	mov a,key_2_buf
    	xor a,REC_BUF
    	jbs psw,z       
		jmp   close_set_key2
		
    	bs  flag2,set_key_two
		bs  flag2,open_set_key
		clr     delay_time 	 
		nop
	
key3_check:				
		jbs  flag3,key3_flag
		ret
		bc    flag3,key3_flag
				
		clr   delay_time

	    inc   key_3_buf   
	    	       	
    	mov a,@0x02
    	mov REC_BUF,a 		
    	mov a,key_3_buf
    	xor a,REC_BUF
    	jbs psw,z       
		jmp   close_set_key3
    	bs  flag3,set_key_three
		bs  flag2,open_set_key
		clr   delay_time 			
		nop
		ret
		
close_set_key1:
		bc   flag2,open_set_key		
		jmp   key2_check	
close_set_key2:
		bc   flag2,open_set_key		
		jmp   key3_check
close_set_key3:
		bc   flag2,open_set_key		
		ret				  
			
;+++++++++++++++++++end+++设键动作+++++++
					;+++++++++++																														
							
;++++++++++++++++++++++++++++按键++++++++++++++++++++++++++
					;++++++++++++++++
WORKING_low:
			
		MOV	 A,@0B10111111   ; P60:IRIN,P63:SETTING     
		IOW	 P6   			
	    jbc  P6,key1			;++++低电平,灯	   	    
	    call  key1_low	      ;反,开-低电平    
	    	    	    			  		  ;反,关-高电平	    

⌨️ 快捷键说明

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