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

📄 ipodc.asm

📁 使用MCU PIC12F508接收红外遥控器代码
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 LIST p=12f509 ;
#include <p12F509.inc> 
 __CONFIG 16H ;intrc_osc,WDT_ON,CP_ON,MCLRE

#define IPODTX GPIO,0 ;IPOD TXD
#define IPODRX GPIO,1 ;IPOD RXD
#define PCTXD GPIO,2  ;PC TXD
#define PCRXD GPIO,4  ;PC RXD

ZCMC   EQU 0X0B
STBY   EQU 0X0C
IRBITW EQU 0X0D
BITW   EQU 0X0E
IRTEMP EQU 0X0A
LOOPTEMP1 EQU 0X0F
LOOPTEMP2 EQU 0X10
PLAYSTOP  EQU 0X11
SKIPUP EQU 0X12
SKIPDN EQU 0X13
VOLUP  EQU 0X14
VOLDN  EQU 0X15
STBYP  EQU 0X16
ZCMCN      EQU 0X17          ;发送码位宽寄存器
IRADDR1    EQU 0X18          ;接收的码1地址
IRADDR2    EQU 0X19          ;接收的码2地址
IRDATA1    EQU 0X1A          ;接收的码数据1
IRDATA2    EQU 0X0E          ;接收的码数据2
IRRBIT     EQU 0X1D          ;接收的码
TXDTEMP    EQU 0X1B          ;发的码保存地址
TXDDATA    EQU 0X1C          ;发的码保存地址
COUTSTB    EQU 0X1F          ;记数STBY次数


  ORG 0x000
  MOVWF      OSCCAL
  GOTO MAIN
;===================================================
; R 1 BIT CODE
;===================================================
R1BIT: MOVLW D'8'
       MOVWF BITW
       MOVLW D'0'
       MOVWF IRBITW
DAI:   BTFSS PCTXD
       GOTO DAI 
STARTRXD: CALL DELAY882US
          BTFSC PCTXD
          GOTO BITZHI1
          CLRC
          GOTO YIWEI
BITZHI1:  CALL DELAY1MS
          SETC
YIWEI:    RRF IRBITW,1
          DECFSZ BITW,1
          GOTO DAI  
          MOVF IRBITW,W
          MOVWF IRRBIT
          CLRWDT
 RETLW  0X00
;===================================================
; accurate 882uS delay for a 4MHz clock.
;===================================================
DELAY882US:                    ;DELAY 882uS
           MOVLW D'176'        ;(1+2+2)*176+2=882us
           MOVWF LOOPTEMP1
LOOP1      NOP
           CLRWDT
           DECFSZ   LOOPTEMP1,1
           GOTO LOOP1 
           RETLW  0x00
;===================================================
; accurate 4.74mS delay for a 4MHz clock.
;===================================================
DELAY4740US:          ;DELAY 4.74mS
            MOVLW D'226'        ;((1+2)*4+1+2+1+1+1+3)*226+2=4748us
            MOVWF LOOPTEMP1
LOOP2       MOVLW D'4'
            MOVWF LOOPTEMP2
LOOP3       DECFSZ    LOOPTEMP2,1
            GOTO LOOP3
            CLRWDT
            NOP
            NOP
            NOP
            DECFSZ LOOPTEMP1,1
            GOTO LOOP2 
            RETLW  0x00
;===================================================
; accurate 1ms delay for a 4MHz clock.
;===================================================
DELAY1MS:                     ;DELAY 1mS
        MOVLW D'249'                ;(1+1+2)*249+2+2=1000us
        MOVWF LOOPTEMP1
LOOP5   CLRWDT
        DECFSZ  LOOPTEMP1,1
        GOTO LOOP5 
        NOP
        NOP
        RETLW  0x00
;====================================================
; accurate 100us delay for a 4MHz clock.
;====================================================
DELAY100US2:                         ;DELAY 100uS,1/9600=104.167uS
             MOVLW D'16'             ;(1+3+2)*16+3=99us
             MOVWF LOOPTEMP1
LOOP6 NOP
      CLRWDT
      NOP
      ;NOP
      DECFSZ  LOOPTEMP1,1
      GOTO LOOP6 
      RETLW  0x00
;====================================================
; accurate 93us delay for a 4MHz clock.
;====================================================
DELAY96US2:                         ;DELAY 93uS
             MOVLW D'18'             ;(1+2+2)*18+3=96us
             MOVWF LOOPTEMP1
LOOP7 NOP
      CLRWDT
      DECFSZ  LOOPTEMP1,1
      GOTO LOOP7 
      NOP
      NOP
      NOP
      RETLW  0x00
;=================================================================
;
;=================================================================     
DELAY93US2:                         ;DELAY 93uS
             MOVLW D'18'             ;(1+2+2)*18+3=96us
             MOVWF LOOPTEMP1
LOOP8 NOP
      CLRWDT
      DECFSZ  LOOPTEMP1,1
      GOTO LOOP8 
      RETLW  0x00
;=================================================================
;
;================================================================= 
TXD1DB:  
         ;MOVLW 0X08
         ;MOVWF ZCMCN                             ;BIT位宽记数器值为8
         MOVF TXDTEMP,W
         MOVWF TXDDATA
         ; CLRC
         BCF IPODRX
         CLRWDT
         CALL DELAY96US2                        ;起始位为0
         BTFSC TXDDATA,0
         GOTO ZHIWEI10
         GOTO ZHIWEI00
ZHIWEI10: BSF IPODRX
          GOTO YANSHI0
ZHIWEI00: BCF IPODRX          
          NOP
          CLRWDT
YANSHI0:  CALL DELAY96US2
          BTFSC TXDDATA,1
          GOTO ZHIWEI11
          GOTO ZHIWEI01
ZHIWEI11: BSF IPODRX
          GOTO YANSHI1
ZHIWEI01: BCF IPODRX          
          NOP
          CLRWDT
YANSHI1:  CALL DELAY96US2
          BTFSC TXDDATA,2
          GOTO ZHIWEI12
          GOTO ZHIWEI02
ZHIWEI12: BSF IPODRX
          GOTO YANSHI2
ZHIWEI02: BCF IPODRX          
          NOP
          CLRWDT
YANSHI2:  CALL DELAY96US2
          BTFSC TXDDATA,3
          GOTO ZHIWEI13
          GOTO ZHIWEI03
ZHIWEI13: BSF IPODRX
          GOTO YANSHI3
ZHIWEI03: BCF IPODRX          
          NOP
          CLRWDT
YANSHI3:  CALL DELAY96US2
          BTFSC TXDDATA,4
          GOTO ZHIWEI14
          GOTO ZHIWEI04
ZHIWEI14: BSF IPODRX
          GOTO YANSHI4
ZHIWEI04: BCF IPODRX          
          NOP
          CLRWDT
YANSHI4:  CALL DELAY96US2
          BTFSC TXDDATA,5
          GOTO ZHIWEI15
          GOTO ZHIWEI05
ZHIWEI15: BSF IPODRX
          GOTO YANSHI5
ZHIWEI05: BCF IPODRX          
          NOP
          CLRWDT
YANSHI5:  CALL DELAY96US2
          BTFSC TXDDATA,6
          GOTO ZHIWEI16
          GOTO ZHIWEI06
ZHIWEI16: BSF IPODRX
          GOTO YANSHI6
ZHIWEI06: BCF IPODRX          
          NOP
          CLRWDT
YANSHI6:  CALL DELAY96US2
          BTFSC TXDDATA,7
          GOTO ZHIWEI17
          GOTO ZHIWEI07
ZHIWEI17: BSF IPODRX
          GOTO YANSHI7
ZHIWEI07: BCF IPODRX          
          NOP
          CLRWDT
YANSHI7:  CALL DELAY100US2
         BSF IPODRX                               ;STOP BIT
         CALL DELAY93US2
         RETLW  0X00 
;===================================================
; Program Main Entry.
;===================================================
MAIN: CLRWDT
      MOVLW B'11001101'  ;
      TRIS GPIO
      MOVLW B'11011000'
      OPTION
      MOVLW D'0'
      MOVWF FSR
      MOVLW B'11111111'
      MOVWF GPIO          ;空闲时数据线为1
      MOVLW 0XD8          
      OPTION
      MOVLW 0X11          ;设置接收代码   
      MOVWF PLAYSTOP       ;播放
      MOVLW 0X10
      MOVWF SKIPUP       ;上首
      MOVLW 0X12   
      MOVWF SKIPDN       ;下首
      MOVLW 0X05
      MOVWF VOLUP        ;音量加
      MOVLW 0X0D
      MOVWF VOLDN        ;音量减
      MOVLW 0X00
      MOVWF STBYP         ;开关
;========================================================
;
;========================================================
RCODE:  CLRWDT              ;开始接收红外码
        BTFSC PCTXD
        GOTO RCODE
DECODE: 
        MOVLW D'10'        ;882uS * 10 次延迟8.82ms
        MOVWF ZCMC
START:  CALL DELAY882US
        BTFSC PCTXD
        GOTO RCODE
        DECFSZ ZCMC,1
        GOTO START
DAIHI:  BTFSS PCTXD
         GOTO DAIHI
         CALL DELAY4740US
BITW8:   CALL R1BIT
         MOVF IRRBIT,W
         MOVWF IRADDR1
         CALL  R1BIT
         MOVF  IRRBIT,W
         MOVWF IRADDR2 
         CALL  R1BIT
         MOVF  IRRBIT,W
         MOVWF IRDATA1
         CALL  R1BIT
         MOVF  IRRBIT,W
         MOVWF IRDATA2
;===========================================
         CLRWDT
         MOVF  IRADDR1,W
         XORLW 0X20
         SKPZ
         GOTO RCODE
         MOVF  IRADDR2,W
         XORLW 0XDF
         SKPZ
         GOTO RCODE
         MOVF  IRDATA1,W
         XORLW 0X11

⌨️ 快捷键说明

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