ラベル 赤外線リモコン送信 の投稿を表示しています。 すべての投稿を表示
ラベル 赤外線リモコン送信 の投稿を表示しています。 すべての投稿を表示

2011/03/06

12F629 赤外線リモコンの受信

12F629 赤外線リモコンの受信、データコードをEEPROMに書き込み

回路図












http://akizukidenshi.com/download/PL-IRM2161-C438.pdf

受信データコードサンプル





MPLAB IDE v8.63











プログラム//////////////////////////
LIST P=12F629
INCLUDE P12F629.INC
CB = _CPD_OFF
CB &= _CP_OFF
CB &= _BODEN_ON
CB &= _MCLRE_OFF
CB &= _PWRTE_ON
CB &= _WDT_OFF
CB &= _INTRC_OSC_NOCLKOUT ;_HS_OSC
__CONFIG CB
;-----------------------------------
TCON1 EQU H'20' ;TIMER用
TCON2 EQU H'21'
TCON3 EQU H'21'

CCON1 EQU H'22' ;カウント用
CCON2 EQU H'23'
CCON3 EQU H'24'
CCON4 EQU H'25'

DD1 EQU H'2A' ;データー用
DD2 EQU H'2B'
DD3 EQU H'2C'
DD4 EQU H'2D'
DD5 EQU H'2E'
DD6 EQU H'2F'

TEMPL EQU H'30' ;臨時アドレス
TEMPDD EQU H'31' ;書き込みデータ
TEMPDATA EQU H'32' ;リモコンデータ

;------------------------------------
ORG H'0'
GOTO INIT
ORG H'04'
GOTO INIT
;------------------------------------
INIT
BSF STATUS,RP0
MOVLW B'00001100'
MOVWF TRISIO
BCF STATUS,RP0
MOVLW B'00000111'
MOVWF CMCON
MOVLW B'00000000'
MOVWF GPIO
;------------------------------------
MAIN
CLRF DD1
CLRF DD2
CLRF DD3
CLRF DD4

IR ;信号待ち
BTFSS GPIO,2
GOTO IR
GOTO SS


;/////////////////////////////////////////
;リーダー部分の確認コート、ON8=9MS,OFF4=4.5MS
;/////////////////////////////////////////
SS
SIRON
;リーダーコード HIチェック
MOVLW D'95' ;9MS=100μSX90 OR 95
MOVWF CCON1
SIRONL ;
CALL TIMER1 ;
BTFSS GPIO,2 ;90回チェック
GOTO IR ;一致しない場合、
DECFSZ CCON1,F ;CCON1=0
GOTO SIRONL ;

SIROFF
;リーダーコード LOWチェック
BTFSC GPIO,2
GOTO SIROFF ;OFF待ち
MOVLW D'47' ;4.5MS=100μSX45 OR

MOVWF CCON1
SIROFFL
CALL TIMER1

BTFSC GPIO,2 ;47回チェック
GOTO IR ;一致しない場合
DECFSZ CCON1,F
GOTO SIROFFL

;////////////////////////////////////////
;データコードの読み込み
;////////////////////////////////////////
RDD1 ; 0ビットから8ビットまで
CLRF TEMPDATA ;データクリア

CALL REDATA ;データコード読み込み

MOVF TEMPDATA,W ;
MOVWF DD1 ;読み込んだデータコードを保存

RDD2 ; 9ビットから16ビットまで
CLRF TEMPDATA

CALL REDATA

MOVF TEMPDATA,W
MOVWF DD2

RDD3 ; 16ビットから24ビットまで
CLRF TEMPDATA

CALL REDATA

MOVF TEMPDATA,W
MOVWF DD3

RDD4 ; 25ビットから32ビットまで
CLRF TEMPDATA

CALL REDATA

MOVF TEMPDATA,W
MOVWF DD4

; 読み込み完了、EEPROMに書き込み
CALL REWTOEEPROM

CALL TEST ;//////////////////

GOTO IR ;信号待ちへ

;//////////////////////////////////////
;データコード読み込みサブルーチン
;//////////////////////////////////////
REDATA
BTFSS GPIO,2 ;ON待ち
GOTO REDATA
MOVLW D'9' ;9設定、8回LOOP

MOVWF CCON2
RED1
DECF CCON2,F ;8回ビットのカウント

BTFSC STATUS,Z ;0の場合
RETURN ;8個のカウント終了、次の8ビットへ

CALL SASH ;600μS HIの後
RLF TEMPDATA ;シフト
BCF TEMPDATA,0 ;0ビット、0に設定
CALL TIMER7 ;700μS LOW 経過

BTFSC GPIO,2 ;700μS LOW 経過しても LOW の場合スキップ
GOTO RED1 ;700μS LOW 経過しても HI の場合

BSF TEMPDATA,0 ;0ビット、1に設定
CALL SASL ;残ったLOWをHIまで消耗する


GOTO RED1 ;次のビットへ

;RETURN

;//////////////////////////////////////////
;赤外線、HI時のチェックサブルーチン
;//////////////////////////////////////////
;HI
SASH
MOVLW D'4' ;4回チェック 約400μS

MOVWF CCON3

SASHL CALL TIMER1

BTFSS GPIO,2 ;4回チェック
GOTO IR ;一致しない場合、信号待ちへ
DECFSZ CCON3
GOTO SASHL

SASOK BTFSC GPIO,2 ;4回チェック後、残った HI を消耗する
GOTO SASOK
RETURN ;戻る
;-----------------------------
;LOW
SASL
BTFSS GPIO,2 ;残った LOW を消耗する
GOTO SASL
RETURN ;戻る



;///////////////////////////////////////////
;データEEPROMに書き込み
;///////////////////////////////////////////
REWTOEEPROM
; DD1の書き込み
MOVLW H'00' ;書き込みアドレス

MOVWF TEMPL ;サブルーチンへ
MOVF DD1,W ;書き込みデータ
MOVWF TEMPDD ;サブルーチンへ
CALL REW ;サブルーチン呼び出す


; DD2の書き込み
MOVLW H'01' ;書き込みアドレス
MOVWF TEMPL
MOVF DD2,W
MOVWF TEMPDD
CALL REW


; DD3の書き込み
MOVLW H'02' ;書き込みアドレス
MOVWF TEMPL
MOVF DD3,W
MOVWF TEMPDD
CALL REW


; DD4の書き込み
MOVLW H'03' ;書き込みアドレス

MOVWF TEMPL
MOVF DD4,W
MOVWF TEMPDD
CALL REW

; 書き込み完了、臨時ファイルをクリア
CLRF TEMPL

CLRF TEMPDD

RETURN


;///////////////////////////////////////////
;EEPROM 書き込みサブルーチン
;//////////////////////////////////////////
REW
BSF STATUS,RP0 ;1バンクへ
MOVF TEMPL,W ;書き込みアドレス
MOVWF EEADR ;
MOVF TEMPDD,W ;書き込みデータ
MOVWF EEDATA ;
BSF EECON1,WREN ;書き込み許可
MOVLW H'55' ;書き込み手順

MOVWF EECON2 ;
MOVLW H'AA' ;

MOVWF EECON2 ;
BSF EECON1,WR ;
RWC
BTFSC EECON1,WR ;書き込み終了待ち
GOTO RWC
BCF STATUS,RP0 ;0バンクに戻る
RETURN ;戻る

;//////////////////////////////////////////
;タイマー
;4Mhz 1クロック=0.00000025S = 0.25μS
;4Mhz 1サイクル=1μS
;//////////////////////////////////////////
TIMER1 ;100μS,100コマンド、24
MOVLW D'24' ;1;99
MOVWF TCON1 ;1
T1LOP
NOP ;1
DECFSZ TCON1 ;1
GOTO T1LOP ;2
RETURN ;2

;--------------------
TIMER2 ;200μS,200コマンド、49
MOVLW D'49' ;1;
MOVWF TCON1 ;1
T2LOP
NOP ;1
DECFSZ TCON1 ;1
GOTO T2LOP ;2
RETURN ;2

;--------------------
TIMER4 ;400μS,400コマンド、99
MOVLW D'99' ;1;99
MOVWF TCON1 ;1
T4LOP
NOP ;1
DECFSZ TCON1 ;1
GOTO T4LOP ;2
RETURN ;2

;--------------------
TIMER6 ;600μS,600コマンド、149
MOVLW D'149' ;1;149
MOVWF TCON1 ;1
T6LOP
NOP ;1
DECFSZ TCON1 ;1
GOTO T6LOP ;2
RETURN ;2

;--------------------
TIMER7 ;700μS,700コマンド、174
MOVLW D'174' ;1;174
MOVWF TCON1 ;1
T7LOP
NOP ;1
DECFSZ TCON1 ;1
GOTO T7LOP ;2
RETURN ;2

;--------------------
TEST ;DEBUG用
;TEST
MOVLW B'00010000'
MOVWF GPIO
CALL TIMER7

MOVLW B'00000000'
MOVWF GPIO
CALL TIMER7

RETURN
;TEST
;------------------------------------
END
;終了
;------------------------------------
プログラム画像