vcd+tv 遥控器.asm

来自「pic单片机对红外设备控制得一个源程序」· 汇编 代码 · 共 371 行

ASM
371
字号
;注意PC示波器先收到的是数据低位!!!不是高位!!
;把延时子程序化,易于增加新键。
;所有延时均经过实验,
;先用分析仪看一下遥控器的波型和时间,改一下就可。
;
;==================================================
	include <p16f73.inc>	

;歌林电子制作实验室www.nbglin.com 
;TEL:0574-88464538  email:picworld@126.com			

COUNT		EQU	20H
COUNT1		EQU	21H
COUNT2		EQU	22H	
ADDRES		EQU	23H	
SENDBUF		EQU	24H		;存键值
TXBUF		EQU	25H
MM		EQU	26H		;10MS DELAY
NN		EQU	27H
AA		EQU	28H		; DELAY1
BB		EQU	29H
TVDATA		EQU	2AH	
;=============================
		ORG	10H
START   
	BSF	STATUS,RP0	
	MOVLW   B'11111111'    ;RA4频道下翻(所有键常是高电平)
        MOVWF	TRISA
        MOVLW   B'01100001'
        MOVWF	TRISB          ;RB0频道上翻 RB1 LED ;RB6 TV/AV
        MOVLW   B'11111110'    ;RB5 VCD暂停。
        MOVWF	TRISC		;RC0 红外输出口
	BCF	STATUS,RP0	
;
        BCF     PORTC,0	       ;红外输出口 
	BSF	PORTB,1	       ;复位时闪二下,表示工作正常。
	CALL	DELAY1
	BCF	PORTB,1
	CALL	DELAY1
	BSF	PORTB,1
	CALL	DELAY1
	BCF	PORTB,1
	CALL	DELAY1
;================键扫描=================
MAIN    
	BTFSS   PORTB,0		;RB0频道上翻
        GOTO    SCHUP		;PORTB常态是高电平,低电平有键按下。
	BTFSS   PORTA,4		;RA4频道下翻
        GOTO    SCHDOWN	
	BTFSS   PORTB,5		;RB5 VCD暂停/播放
        GOTO    VCDPLAY
	BTFSS   PORTB,6		;RB6 TV/AV
        GOTO    TVAV
        GOTO    MAIN	
;==========频道上翻=============
SCHUP  	CALL	DELAY		;键去抖
	BTFSC   PORTB,0		
        GOTO    MAIN	
	BTFSS   PORTB,0		;键释放?
	GOTO	$-1
;
	MOVLW	B'00110100' 	;TV ADRESS
	MOVWF	ADDRES
	MOVLW	B'00000001' 	;TV DATA
	MOVWF	TVDATA
	CALL	SEND		;发送一次红外信号
	MOVLW	B'00110100' 	;TV ADRESS
	MOVWF	ADDRES
	MOVLW	B'00000001' 	;TV DATA
	MOVWF	TVDATA
	CALL	SEND		;发送一次红外信号
	GOTO	MAIN
;==========频道下翻=============
SCHDOWN  CALL	DELAY		;键去抖
	BTFSC   PORTA,4		
        GOTO    MAIN	
	BTFSS   PORTA,4		;键释放?
	GOTO	$-1
;
	MOVLW	B'00110100' 	;TV ADRESS
	MOVWF	ADDRES
	MOVLW	B'00000010' 	;TV DATA
	MOVWF	TVDATA
	CALL	SEND		;发送一次红外信号
	MOVLW	B'00110100' 	;TV ADRESS
	MOVWF	ADDRES
	MOVLW	B'00000010' 	;TV DATA
	MOVWF	TVDATA
	CALL	SEND		;发送一次红外信号
	GOTO	MAIN
;==========TVAV=============
TVAV  	CALL	DELAY		;键去抖
	BTFSC   PORTB,6		
        GOTO    MAIN	
	BTFSS   PORTB,6		;键释放?
	GOTO	$-1
;
	MOVLW	B'00110100' 	;TV ADRESS
	MOVWF	ADDRES
	MOVLW	B'00001101' 	;TV DATA
	MOVWF	TVDATA
	CALL	SEND		;发送一次红外信号
	MOVLW	B'00110100' 	;TV ADRESS
	MOVWF	ADDRES
	MOVLW	B'00001101' 	;TV DATA
	MOVWF	TVDATA
	CALL	SEND		;发送一次红外信号
	GOTO	MAIN
;==========VCD PLAY=============
VCDPLAY  CALL	DELAY		;键去抖
	BTFSC   PORTB,5		
        GOTO    MAIN	
	BTFSS   PORTB,5		;键释放?
	GOTO	$-1
;
	CALL	VCDSENT
	MOVLW	B'00010001'
	CALL	TVADDRESS
	MOVLW	B'11101110'
	CALL	TVADDRESS
;9MS POUSE
	MOVLW   0XFF		
	CALL	POUSE        
        MOVLW   0X56          
	CALL	POUSE 
;cL2244
        MOVLW   0X6A 
	CALL	DELAY2
;560US POUSE
        MOVLW   0X14          
	CALL	POUSE 
;cL95877
	CALL	DELAY
	CALL	DELAY
	CALL	DELAY
;9MS POUSE
	MOVLW   0XFF		
	CALL	POUSE        
        MOVLW   0X56         
	CALL	POUSE 
;cL2244
        MOVLW   0X62 
	CALL	DELAY2
;560US POUSE
        MOVLW   0X14          
	CALL	POUSE 
        GOTO    MAIN	
;=======VCDSENT=========
VCDSENT
;9MS 
	MOVLW   0XFF		;发送头码和地址位。
	CALL	POUSE        
        MOVLW   0X56         
	CALL	POUSE  
;4.5MS      
        MOVLW   0XE3       
	CALL	DELAY2  
;
	MOVLW	B'00000000'
	CALL	TVADDRESS
	MOVLW	B'11111111'
	CALL	TVADDRESS
	RETURN
;=======发送8.07mS+4.0MS组成的头码===========  
SEND    MOVLW   0XFF
	CALL	POUSE        
        MOVLW   0X34          
	CALL	POUSE  
;4.0MS      
        MOVLW   0XC8          
	CALL	DELAY2  
;=========发送地址===========
        MOVF	ADDRES,0       
	CALL	TVADDRESS
;========中间插一断560uS+4MS低===============
        MOVLW   0X14          
	CALL	POUSE          
        MOVLW   0XC8          
	CALL	DELAY2 
;=========发送数据===========
        MOVF    TVDATA,0       
	CALL	TVADDRESS
;===结尾560US POUSE+22.7MS低电平======
        MOVLW   0X13         
	CALL	POUSE 
        BCF     PORTC,0	
	CALL	DELAY		;3MS
	CALL	DELAY		;3MS
	CALL	DELAY		;3MS
	CALL	DELAY		;3MS
	CALL	DELAY		;3MS
	CALL	DELAY		;3MS
	CALL	DELAY		;3MS
	RETURN
     
;===========560uS 高38K频===============
POUSE   MOVWF   COUNT        ;560uS=0X14
K38     BSF     PORTC,0	     ;(0XFF+ 0X34)*26.9=8.07mS 
        NOP		     ;(0XFF+ 0X4E)*26.9=9mS 
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        BCF     PORTC,0         
        NOP              
        NOP                     
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP                     
        DECFSZ  COUNT,1
        GOTO    K38
	RETURN
;===============发送TV地址和数据码==================            
TVADDRESS  MOVWF   TXBUF	;注意示波器先收到的是低位!!!
        MOVLW   0X08
        MOVWF   COUNT1
TLP     BTFSC   TXBUF,0         ;地址码为0就发0,为1就发1。
        GOTO    IDONE
;----TV 发送0-------
        MOVLW   0X14
        MOVWF   COUNT       ; 560uS
TVZERO   BSF     PORTC,0  
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP  
        BCF      PORTC,0                               
        NOP                     
        NOP
        NOP 
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP                 
        DECFSZ  COUNT,1
        GOTO    TVZERO   
;      
        BCF      PORTC,0  
        MOVLW   0X7D
        MOVWF   COUNT2          ;480uS 
L0TLP   NOP
        DECFSZ  COUNT2,1
        GOTO    L0TLP
;---------------
        GOTO    GUR
IDONE     
;-----TV 发送1----
;560uS+1.43mS
        MOVLW   0X14
        MOVWF   COUNT        ;560uS
TVONE   BSF     PORTC,0	     ;红外输出口 
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        BCF     PORTC,0         
        NOP              
        NOP                     
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP                     
        DECFSZ  COUNT,1
        GOTO    TVONE         
;-------    
        BCF      PORTC,0   
        MOVLW   0X7D
        MOVWF   COUNT2         ;1.48mS 
L1TLP   NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        DECFSZ  COUNT2,1
        GOTO    L1TLP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
;-----------------
GUR     RRF     TXBUF,1        
        DECFSZ  COUNT1,1          ;共8次。
        GOTO    TLP  
	RETURN
;
;=========== 3ms键去抖 =============
DELAY	MOVLW	0X04
	MOVWF	MM
DY1	MOVLW	0XFF
	MOVWF	NN
DY2	DECFSZ	NN
	GOTO	DY2
	DECFSZ	MM
	GOTO	DY1
        RETURN 
;=========== LED闪 =============
DELAY1	MOVLW	0XFF
	MOVWF	AA
DYA1	MOVLW	0XFF
	MOVWF	BB
DYA2	DECFSZ	BB
	GOTO	DYA2
	DECFSZ	AA
	GOTO	DYA1
        RETURN 

;============ 20us*X ================
DELAY2  MOVWF   COUNT2    ;0XC8=20us*200=4.0ms   
TOPL    NOP 		  ;0XE1=20us*225=4.5ms 
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        NOP
        DECFSZ  COUNT2,1
        GOTO    TOPL
	RETURN

;=============================
	END

⌨️ 快捷键说明

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