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

📄 yaokongqi.asm

📁 一个PIC简易遥控器程序
💻 ASM
字号:
  include <p16f505.inc>    

COUNT          EQU  09H
COUNT1         EQU  0AH
COUNT2         EQU  0BH 
ADDRES         EQU  0CH 
SENDBUF        EQU  0DH                      ;存键值
TXBUF          EQU  0EH
MM             EQU  0FH                      ;10MS DELAY
NN             EQU  10H
AA             EQU  11H                      ;DELAY1
BB             EQU  12H
TVDATA         EQU  13H 
;=============================
      ORG      00H
START:   
     BSF       STATUS,RP0 
     MOVLW     B’11111111’
     MOVWF     TRISB                         ;RB0频道上翻 RB1 LED 
     MOVLW     B’11111110’
     MOVWF     TRISC                         ;RC0 红外输出
     BCF       STATUS,RP0 
;
     BCF       PORTC,0                       ;红外输出口 
     BSF       PORTB,1                       ;复位时RB1 LED闪二下,表示工作正常。
     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 
     GOTO      MAIN 
;==========频道上翻=============
SCHUP:
     CALL      DELAY                         ;键去抖
     BTFSC     PORTB,0  
     GOTO      MAIN 
     BTFSS     PORTB,0                       ;键释放?
     GOTO      $-1
     BSF       PORTB,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
     BSF       PORTA,4
;
     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
;=======发送8.07mS+4.0MS组成的头码===========  (一般是9MS+4.5MS)
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                         ;注意PC示波器先收到的是低位!!!
     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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -