;****************************************************************************************** ; リモコン受信機サンプル ; Program Name : ; Programer : ; Create date : Version 1.0 H17.12.10 ; History : ;****************************************************************************************** ; Description ; 1.I/O Port ; Port A ; A0-A3 => Output 8-11 ; A4 => Recive ; Port B ; B0-B7 => Output 0-7 ; 2.Osc 20MHz ;****************************************************************************************** ;====================== 以下はPIC16F88用の記述 ====================== ; 20MHz動作 LIST P=PIC16F88 INCLUDE "P16F88.inc" __CONFIG _CONFIG1 , _CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_OFF & _WDT_OFF & _HS_OSC __CONFIG _CONFIG2 , _IESO_OFF & _FCMEN_OFF ; IODAT EQU 20H LPRMTREV EQU 21H LPRDR0 EQU 22H LPTWL0 EQU 23H LPTWL1 EQU 24H LPRDRB0 EQU 25H LPWAIT0 EQU 26H LPWAIT1 EQU 27H LPWAIT2 EQU 28H LPWAIT3 EQU 29H LPWAIT4 EQU 2AH ; ORG 0 GOTO START ORG 4 GOTO START START BANKSEL PORTA ; PortAのBankを選択する(Bank0) CLRF PORTA ; PortAの初期化 CLRF PORTB ; PortBの初期化 BANKSEL ANSEL ; ANSELのBankを選択する(Bank1) MOVLW 0x00 ; MOVWF ANSEL ; Degital Inputに設定 MOVLW B'11110000' MOVWF TRISA ; PortAのI/O設定 MOVLW B'00000000' MOVWF TRISB ; PortBのI/O設定 BANKSEL PORTA ; PortAのBankを選択する(Bank0) ;===================================================================== CALL INTPORT CALL WAIT ; 赤外線受信モジュールが安定するのを待つ MAIN ; 1.赤外線モジュールからデータがくるのを待つ CALL RMTREV ; 2.データを送る CALL OUTDAT ; GOTO MAIN ;****************************************************************************************** ; Function Name : OUTDAT ; Title : ポートに出力する ; Input : W-REG ; Output : ; Description : ;****************************************************************************************** OUTDAT ; 1.初期化 CALL INTPORT ; 2.ポート出力 MOVFW IODAT XORLW '0' BTFSC STATUS,Z BSF PORTB,0 ; MOVFW IODAT XORLW '1' BTFSC STATUS,Z BSF PORTB,1 ; MOVFW IODAT XORLW '2' BTFSC STATUS,Z BSF PORTB,2 ; MOVFW IODAT XORLW '3' BTFSC STATUS,Z BSF PORTB,3 ; MOVFW IODAT XORLW '4' BTFSC STATUS,Z BSF PORTB,4 ; MOVFW IODAT XORLW '5' BTFSC STATUS,Z BSF PORTB,5 ; MOVFW IODAT XORLW '6' BTFSC STATUS,Z BSF PORTB,6 ; MOVFW IODAT XORLW '7' BTFSC STATUS,Z BSF PORTB,7 ; MOVFW IODAT XORLW '8' BTFSC STATUS,Z BSF PORTA,0 ; MOVFW IODAT XORLW '9' BTFSC STATUS,Z BSF PORTA,1 ; MOVFW IODAT XORLW 'A' BTFSC STATUS,Z BSF PORTA,2 ; MOVFW IODAT XORLW 'B' BTFSC STATUS,Z BSF PORTA,3 ; RETURN ;****************************************************************************************** ; Function Name : RMTREV ; Title : 赤外線リモコン受信(8ビットデータ) ; ※標準バースト波を使用 ; Input : ; Output : IODAT ; Description : ;****************************************************************************************** RMTREV ; 0.変数初期化 CLRF IODAT ; 1.リーダー部分 ; (1)開始の検知 BTFSC PORTA,4 GOTO $-1 ; (2)リーダーを飛ばす(13.5mS) CALL WAITRDR ; 2.データ設定 MOVLW H'08' MOVWF LPRMTREV RMTREV2 ; (1)右シフト RRF IODAT,F ; (2)Wait 1/2TWL CALL WAITTWL ; (3)データ設定 BTFSC PORTA,4 BCF IODAT,7 BTFSS PORTA,4 BSF IODAT,7 ; (4)Wait 1/2TWL CALL WAITTWL ; (5)Loop-end DECFSZ LPRMTREV,F GOTO RMTREV2 ; (6)ADD Shft RRF IODAT,F ; (7)Copy Data MOVFW IODAT RETURN ;******************************************************************************************* ; Function Name : WAITRDR ; Title : リーダー部分を読み飛ばす(13.5mSのWAIT;9mS+4.5mS) ; Input : ; Output : ; Description : OSC:20/4MHz用 => 67,500ステップ(2400 * 45) ;******************************************************************************************* WAITRDR MOVLW H'2D' ; 108,000 Step(45) MOVWF LPRDR0 WAITRDR0 CALL WAITTWL DECFSZ LPRDR0,F GOTO WAITRDR0 RETURN ;******************************************************************************************* ; Function Name : WAITTWL ; Title : TWL(1/2)のWAIT(300μSのWAIT;600μS/2) ; Input : ; Output : ; Description : OSC:20/4MHz用 => 1500ステップ ;******************************************************************************************* WAITTWL MOVLW H'0F' ; 1500 Step(30*100) MOVWF LPTWL1 WAITTWL1 MOVLW H'20' ; 100 Step(32*3+2) MOVWF LPTWL0 WAITTWL0 DECFSZ LPTWL0,F GOTO $-1 DECFSZ LPTWL1,F GOTO WAITTWL1 RETURN ;****************************************************************************************** ; Function Name : WAIT ; Title : 約0.5秒のWAIT ; Input : ; Output : ; Description : 20/4MHz(50)->100KHz(100)->1kHz(100)->10Hz(5)->2Hz ;****************************************************************************************** WAIT MOVLW H'05' ; Step(50*100*100*5) MOVWF LPWAIT3 WAIT3 MOVLW H'64' ; Step(50*100*100) MOVWF LPWAIT2 WAIT2 MOVLW H'64' ; Step(50*100) MOVWF LPWAIT1 WAIT1 MOVLW H'18' ; Step(50:24*2+2) MOVWF LPWAIT0 WAIT0 DECFSZ LPWAIT0,F GOTO WAIT0 DECFSZ LPWAIT1,F GOTO WAIT1 DECFSZ LPWAIT2,F GOTO WAIT2 DECFSZ LPWAIT3,F GOTO WAIT3 RETURN ;****************************************************************************************** ; Function Name : INTPORT ; Title : 出力ポートの初期化 ; Input : ; Output : ; Description : ;****************************************************************************************** INTPORT CLRF PORTB BCF PORTA,0 BCF PORTA,1 BCF PORTA,2 BCF PORTA,3 RETURN END