?? ipodc.asm
字號:
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 + -