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

📄 du_追加.dt

📁 用em78p153实现的单火线86型遥控开关的实现方案
💻 DT
📖 第 1 页 / 共 3 页
字号:
		ret
		
exit_jie_ma:
		bc flag,erro
		bc flag,F_HAVE_KEY            ;pass
		nop
		nop		
		ret						
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++
 				;+++++解码主程序  end++++ 				 				
					 				 				
;+++++++++++++++++++++++解码子程序+++++++++++++++++++++++++++++++
					;++++++++++++++
du_ma_cheng_xu:		
		
		clr    REC_BUF		
wait_hight:			  
		jbc	p6,IRIN			
	    jmp    hight_go_on  ;+++++++++是否大于14a,大于退出
	    call   delay_1a	 ;++++++++高电平pass	    			      
		bc     psw,c
		mov    a,@15			;14a 13
		sub    a,REC_BUF				
		jbs    psw,c		;大于		       		
		jmp	wait_hight		;每到重检口
		/*错码*/
		bs   flag,erro
		ret
	
hight_go_on:							;高电平时				
		clr   REC_BUF					
hight_time:
        call  delay_1a	 	;+++++++++是否大于14a,大于退出	
		jbs   p6,IRIN  		;++++++++低电平pass
		jmp   one_zero					
		bc	psw,c
		mov   a,@15			;14a 13
		sub   a,REC_BUF				
		jbs   psw,c			;   时间到了?,-H
		jmp   hight_time   	;没到,重复检查口				
        /*错码*/	
		bs    flag,erro
		ret
				
;++++++++++++++++++++++++++++++++++++++++++++++++++++
					;++++++解码子程序 end+++++++++++				
							
							
							
							
							
;+++++++++++++++++++++++识码程序+++++++++++++++++++++++++++++++++
							;+++++++++++++
one_zero:				;低电平
		bc    psw,c
		rlc   tmep_code
		
		MOV    A,@0X01          ;+++++++辨别码为1或为0
		MOV 	ADD_TIME,A	  ;++++++++++++大于10a为1	
								  ;+++++++++++小于10a为0		;
		mov   a,@7			;10a  
		bc    psw,c		
		sub   a,REC_BUF		;; 
	
		mov   a,tmep_code	  ;保持数据  	   				
	    jbc   psw,c	   	;时间到?				   
		or    a,ADD_TIME			
		mov   tmep_code,a	
		ret

		
				
;+++++++++++++++++++++++++++++++++++++++++++++++++
			;+++++++识码程序 end+++++++++++
					

					
;++++++++++++++++++++++++++连码解决方案+++++++++++
					;+++++++++++++++++++++					
						
check_double:		
		jbs   flag,F_CONTINUE_KEY	;辨别第一码
		jmp   check_lian             ;接到码辨别是否一样,不一样F_HAVE_KEY生效
		nop
		jbs  flag,F_HAVE_KEY
		jmp  exit_cause_ma
		
		bc   flag,F_HAVE_KEY
		
		clr   add_nop                ;否则F_HAVE_KEY没效		
		mov  a,tmep_data2				
		mov  REC_BUF,a	
		mov  a,REC_DATA2
		bc   psw,z		
		xor  a,REC_BUF
		jbs  psw,z				;所接的码是否与上一次相同
	    ret							;不同跳转							
		
	
;@@@@@@@@@@@@@@@接受累计重复的码的次数@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@		
		jbs   flag2,open_set_key
		ret
		inc  have_many_key		;
		mov  a,@2	
		mov  REC_BUF,a	
		mov  a,have_many_key
		bc   psw,z		
		xor  a,REC_BUF
		jbs  psw,z
		jmp  end_cause
		clr   have_many_key		
		bs    flag,set_key_flag         		    	    					
		ret									
;@@@@@@@@@@@@@@@@@@@@@是否是连码@@@@@@@@@@@@@@@@@@@@@@@
				
check_lian:
		jbs  flag,F_HAVE_KEY       ;接了一码,连码标志为生效
		ret
		bs   flag,F_CONTINUE_KEY
		mov  a,REC_DATA2
		mov  tmep_data2,a 
	    ret	    			    	  	    		
;@@@@@@@@@@@@@@@@@@@@@是否连续测到没键@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@	    	 					
exit_cause_ma:
	    inc  add_nop       ;连续没有接到码,清除连码标志
		mov a,@5		
		bc   psw,c		
		sub a,add_nop
		jbs psw,c
		jmp end_cause 
		
		clr  add_nop
		clr  have_many_key
		
		bc   flag,F_CONTINUE_KEY
		bc   flag,F_HAVE_KEY
	    nop		
		ret
									
;@@@@@@@@@@@@@@@@@@@结束键测试@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
end_cause:
    	bc   flag,F_HAVE_KEY   	
		ret
									
;++++++++++++++++++++++++++++++++++++++++++++++++++++++
			;++++++++连码解决方案+end++++++++		
					
		
;++++++++++++++++++++24c02 处理程序++++++++++++++++++		
				;++++++++++++++++++++++++						
;按照错误状态表识别SCL状态和SDA数据子程序
	ERR:
	        JBS     FLAG,ERROR      ; Remain as first error encountered
	        MOV     ADD_TIME,A          ; Save error code
	        BS      FLAG,ERROR      ; Set error flag
	        RET  
			   
	;-----------------------------------------------------------------------------
	;       启动总线通信程序
	;       input   : none
	;       output  : initialize bus communication
	;-----------------------------------------------------------------------------
	;Generate START bit (SCL is high while SDA goes from high to low transition)
	;and check status of the serial clock.
	BSTART:
	       MOV     A,@0B10111111; MOV     A,@0B00111111     ; Put SCL, SDA line in output state
	        IOW     P6
	        MOV    A,@0x00
	        IOW     P5
	        
	        
	        bs      P5,SDA          ;make sure sda is high
	        BS      P6,SCL          ; Set clock high
	        MOV     A,@1               ; Ready error status code 1
	        JBS     P6,SCL          ; Locked?
			CALL    ERR             ; SCL locked low by device
	        BC      P5,SDA          ; SDA goes low during SCL high
			NOP                     ; Timing adjustment
			NOP
			NOP
	        BC      P6,SCL          ; Start clock train
	        RET     
	    	nop
			nop
			jmp  BSTART
			
	;-----------------------------------------------------------------------------
	;       启动总线通信程序
	;       Input   :       None
	;       Output  :       Bus communication, STOP condition
	;-----------------------------------------------------------------------------
	;Generate STOP bit (SDA goes from low to high during SCL high state)
	;and check bus conditions.
	BSTOP:
	        MOV     A,@0B10111111;A,@0B00111111     ; Put SCL, SDA line in output state
	        IOW     P6
	        MOV    A,@0x00
	        IOW     P5
	        	     	        
	        BC      P5,SDA          ; Return SDA to low
	        BS      P6,SCL          ; Set SCL high
			nop
			nop
	        MOV     A,@1               ; Ready error code 1
	        JBS     P6,SCL          ; High?
			CALL    ERR             ; No, SCL locked low by device
			
	        BS      P5,SDA          ; SDA goes from low to high during SCL high
	        MOV     A,@4               ; Ready error code 4
	        
	        MOV     A,@0B00000001
	        IOW     P5
	        JBS     P5,SDA          ; High?
			CALL    ERR             ; No, SDA bus not release for STOP
	        RET    
	    	nop
			nop
			jmp  BSTOP
			
;	END SUB:
	;-----------------------------------------------------------------------------
	;       从EM78 发送数据到串行EEPROM, 一位一位子程序
	;       Input   :       None
	;       Output  :       To (DI) of serial EEPROM device
	;-----------------------------------------------------------------------------
	BITIN:
	        MOV     A,@0B10111111;MOV     A,@0B10111111     ; Force SDA line as input
	        IOW     P6
	        mov     a,@0b00000000
	        IOW     P5
	        
	        
	        BS      P5,SDA          ; Set SDA for input
	        BC      REC_BUF,DI
	        BS      P6,SCL          ; Clock high
	        MOV     A,@1
	        nop
	        nop
	        
	       /* mov     a,@0B11111111
	        IOW     p6
	        JBS     P6,SCL          ; Skip if SCL  is high
	        JMP     BIT1
	        
	        JBS     FLAG,ERROR      ; Remain as first error encountered
	        MOV     ADD_TIME,A          ; Save error code
	        BS      FLAG,ERROR      ; Set error flag*/
	BIT1:
		    mov     a,@0b00000001
	        IOW     P5
	        nop
			nop
	        
	        JBC     P5,SDA          ; Read SDA pin
	        BS      REC_BUF,DI       ; DI = 1
		NOP                     ; Delay
	        BC      P6,SCL          ; Return SCL to low     
	        RET    
	    	nop
			nop
			jmp  RDBYTE
			
	;-----------------------------------------------------------------------------
	;       从串行EEPROM 接收数据, 一位一位子程序
	;       Input   :       EEPROM file
	;       Output  :       From (DO) of serial EEPROM device to PIC
	;-----------------------------------------------------------------------------
	BITOUT:
	        MOV     A,@0B10111111;MOV     A,@0B00111111     ; Set SDA, SCL as outputs
	        IOW     P6
	        MOV    A,@0x00
	        IOW     P5
	        	        
	        JBS     REC_BUF,DO
	        JMP     BIT0
	        BS      P5,SDA          ; Output bit 0
	        MOV     A,@2
	        JBC     P5,SDA          ; Check for error code 2
	        JMP     CLK1
	        JBS     FLAG,ERROR      ; Remain as first error encountered
	        MOV     ADD_TIME,A          ; Save error code
	        BS      FLAG,ERROR      ; Set error flag
	        JMP     CLK1            ; SDA locked low by device
	BIT0:
	        BC      P5,SDA          ; Output bit 0
			NOP                     ; Delay
			NOP
			NOP
	CLK1:   BS      P6,SCL
	        MOV     A,@1               ; Error code 1
	        JBC     P6,SCL          ; SCL locked low?
	        JMP     BIT2            ; No.
	        JBS     FLAG,ERROR      ; Yes.
	        MOV     ADD_TIME,A          ; Save error code
	        BS      FLAG,ERROR      ; Set error flag
	BIT2:	NOP
			NOP
	        BC      P6,SCL          ; Return SCL to low
	        RET  
	    	nop
			nop
			jmp  RDBYTE
			  
	;-----------------------------------------------------------------------------
	;       接收数据子程序
	;       Input   :       None
	;       Output  :       RXBUF = Receive 8-bit data
	;-----------------------------------------------------------------------------
	RX:
	        MOV     A,@8              ; 8 bits of data
	        MOV     have_many_key,A
	        CLR     tmep_data2
	RXLP:
	        RLC     tmep_data2           ; Shift data to buffer
	        JBS     PSW,C            ;SKPC
	        BC      tmep_data2,0         ; carry ---> f(0)
	        JBC     PSW,C            ;SKPNC
	        BS      tmep_data2,0
			CALL    BITIN
	        JBC     REC_BUF,DI
	        BS      tmep_data2,0         ; Input bit =1
	        DJZ     have_many_key          ; 8 bits?
	        JMP     RXLP
	        BS      REC_BUF,DO       ; Set acknowledge bit = 1
			CALL    BITOUT          ; to STOP further input
	        RET
	        	nop
			nop
			jmp  RDBYTE
			    
	;-----------------------------------------------------------------------------
	;       发送数据子程序
	;       Input   :       TXBUF
	;       Output  :       Data X'mitted to EEPROM device
	;-----------------------------------------------------------------------------
	TX:      MOV     A,@8
	        MOV     have_many_key,A
	TXLP:    BC     REC_BUF,DO       ; Shift data bit out.
	        JBC     tmep_code,7         ; If shifted bit = 0, data bit = 0
	        BS      REC_BUF,DO       ; Otherwise data bit = 1
	     	CALL    BITOUT          ; Serial data out
	        RLC     tmep_code          ; Rotate TXBUF left
	        JBS     PSW,C            ; f(6) ---> f(7)
	        BC      tmep_code,0         ; f(7) ---> carry
	        JBC     PSW,C            ; carry ---> f(0)
	        BS      tmep_code,0
	        DJZ     have_many_key           ; 8 bits done?
	        JMP     TXLP 
	       				          ; No.
			CALL    BITIN           ; Read acknowledge bit
	        MOV     A,@3
	        JBC     REC_BUF,DI       ; Check for acknowledgement
			CALL    ERR             ; No acknowledge from device
	        RET    
	    	nop
			nop
			jmp  RDBYTE
			
	;-----------------------------------------------------------------------------
	;       字节写,写一个字节到EEPROM器件
	;       Input   :       DATAO= data to be written
	;                       ADDR    = destination address
	;                       SLAVE   = device address (1010xxx0)
	;       Output  :       Data written to EEPROM device
	;-----------------------------------------------------------------------------
	WRBYTE:
			BC     FLAG,ERROR		
	        MOV     A,@0xa0          ; 芯片地址 
	        MOV     tmep_code,A         ; to TX buffer
			CALL    BSTART          ; Generate START bit
			CALL    TX              ; Output SLAVE address
	        MOV     A,add_nop          ; Get WORD address
	        MOV     tmep_code,A           ; into buffer
			CALL    TX              ; Output WORD address
	        MOV     A,TIMER0         ; Move DATA 
	        MOV     tmep_code,A           ; into buffer
			CALL    TX              ; Output DATA and detect acknowledgement
			CALL    BSTOP           ; Generate STOP bit
			
			JBC     FLAG,ERROR
			jmp     WRBYTE
			
	    	mov  a,REC_DATA2	    	
	    	mov  tmep_data2,a 	    	
	        ret
	    	nop
			nop
			jmp    WRBYTE
			
	;-----------------------------------------------------------------------------
	;       字节读,从EEPROM器件读一个字节
	;       Input   :       ADDR    = source address
	;                       SLAVE   = device address (1010xxx0)
	;       Output  :       DATAI   = data read from serial EEPROM
	;-----------------------------------------------------------------------------
	RDBYTE:
			BC     FLAG,ERROR
	        MOV     A,@0xa0          ; 芯片地址 
	        MOV     tmep_code,A           ; into buffer (R/W = 0)
			CALL    BSTART          ; Generate START bit
			CALL    TX              ; Output SLAVE address. Check ACK.
	        MOV     A,add_nop         ; Get WORD address
	        MOV     tmep_code,A
			CALL    TX              ; Output WORD address. Check ACK.
			CALL    BSTART          ; START READ (if only one device is
	        MOV    A,@0xa1         ; connected to the I2C bus)
	        MOV     tmep_code,A
			BS      tmep_code,0         ; Specify READ mode (R/W = 1)
			CALL    TX              ; Output SLAVE address
			CALL    RX              ; READ in data and acknowledge
			CALL    BSTOP           ; Generate STOP bit
			
			JBC     FLAG,ERROR
			jmp     RDBYTE
			
	        MOV     A,tmep_data2         ; Save data from buffer
	        MOV     TMEP_CI,A           ; to DATAI file.       		
	        ret	
	
					
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
					;+++end+24c02 处理程序++++++++++++
					
					
					
					
					
					
;++++++++++++++++++++++++++设键程序+++++++++++++++++++++++++++					
				;+++++++++++++++++++++++++++++
					
	SET_KEY:	
		bc  flag,set_key_flag
		bc  flag2,open_set_key
		bs    flag,F_CONTINUE_KEY		
		nop
		NOP
	;******第一个按键设定*********	
	SET_KEY1:
		jbs    flag2,set_key_one  ;辨别set_ma标志
		jmp	SET_KEY2
	
	    mov     a,tmep_data2
	    mov     REC_DATA2,a
	    
		nop
		nop	    
		BC	  FLAG,F_HAVE_KEY	; 清掉标志位
		MOV	 A,REC_DATA0
		MOV	 TIMER0,A
		MOV	 A,@0x10
		MOV	 add_nop,A		
		CALL	WRBYTE
		
		call    delay_1ms
		
		nop
		nop
		MOV	 A,REC_DATA1
		MOV	 TIMER0,A
		MOV	 A,@0x11
		MOV	 add_nop,A						
		CALL	WRBYTE
		
		call    delay_1ms
		
		nop
		nop		
		MOV	 A,REC_DATA2
		MOV	 TIMER0,A
		MOV	 A,@0x12
		MOV	 add_nop,A			
		CALL	WRBYTE
		
		call    delay_1ms
		
		nop
		nop
	  ;  call	read24c02
	
	;*****第二个按键设定***********	
	SET_KEY2:
		nop
		nop
		jbs    flag2,set_key_two    ;辨别set_ma标志
        jmp	SET_KEY3		
        mov     a,tmep_data2
	    mov     REC_DATA2,a
		BC	  FLAG,F_HAVE_KEY
		
		nop
		nop  
		MOV	 A,REC_DATA0
		MOV	 TIMER0,A
		MOV	 A,@0x13
		MOV	 add_nop,A		
		CALL	WRBYTE
		
		call    delay_1ms
		
		nop
		nop
		MOV	 A,REC_DATA1
		MOV	 TIMER0,A
		MOV	 A,@0x14
		MOV	 add_nop,A		
		CALL	WRBYTE
		
		call    delay_1ms
		
		nop
		nop		
		MOV	 A,REC_DATA2
		MOV	 TIMER0,A
		MOV	 A,@0x15
		MOV	 add_nop,A
		
		CALL	WRBYTE
		
		call    delay_1ms
		
		nop
		nop
	   ; call	read24c02
		
	;*****第3个按

⌨️ 快捷键说明

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