Notes to self: PIC arduino

PIC,arduinoなど電子工作の備忘録

PIC16F84を利用した赤外線受信回路について

2014年07月10日 | PICマイコン


1)赤外線受信プログラムのフローチャートを示す.


2)アセンブラプログラムを示す.

;*************************************
; 赤外線受信テストプログラム
; snagai4500
;*************************************
; LED-RECV.ASM
LIST P=PIC16F84A;
INCLUDE P16F84.INC;

MEM_1    EQU   0CH
MEM_2    EQU   0DH
MEM_3    EQU   0DH
MEM_4       EQU     0FH
ORG      0

;*****************************
;メインルーチン
;*****************************
MAIN

BSF      STATUS,RP0
CLRF     TRISB
MOVLW   01H
MOVWF   TRISA
BCF       OPTION_REG,7
BCF       STATUS,RP0

LOOP

CLRF     PORTA
CLRF      PORTB
CLRF         MEM_4
BTFSC       PORTA,0     ;スタートビット待ち
GOTO        LOOP

CALL         TIM04         ;400μs待って
BTFSC       PORTA,0     ;再度スタートビットを確認
GOTO        LOOP         ;じゃなかったらLOOPへ

CALL         TIM02
CALL         TIM04         ;600μs待って
BTFSS       PORTA,0     ;デバイスコード(1ビット目)確認1か?
GOTO        LOOP          ;NoならLOOPへ

CALL         TIM02
CALL         TIM04         ;600μs待って
BTFSC       PORTA,0     ;デバイスコード(2ビット目)確認0か?
GOTO        LOOP          ;NoならLOOPへ

CALL         TIM02
CALL         TIM04         ;600μs待って
BTFSC       PORTA,0     ;スイッチコード(1ビット目)確認0か?
GOTO        B0              ;No(1)ならB0へ
BSF           MEM_4,3     ;0ならMEM_4の3ビット目に1をセット


B0
CALL         TIM02
CALL         TIM04          ;600μs待って
BTFSC       PORTA,0      ;スイッチコード(2ビット目)確認0か?
GOTO        B1               ;No(1)ならB1へ
BSF           MEM_4,2      ;0ならMEM_4の2ビット目に1をセット


B1
CALL          TIM02
CALL          TIM04          ;600μs待って
BTFSC        PORTA,0      ;スイッチコード(3ビット目)確認0か?
GOTO         B2               ;No(1)ならB2へ
BSF            MEM_4,1      ;0ならMEM_4の1ビット目に1をセット


B2
CALL          TIM02
CALL          TIM04           ;600μs待って
BTFSC        PORTA,0       ;スイッチコード(4ビット目)確認0か?
GOTO         B3                ;No(1)ならB3へ
BSF            MEM_4,0       ;0ならMEM_4の0ビット目に1をセット

B3
CALL          TIM02
CALL          TIM04           ;600μs待って
BTFSC        PORTA,0       ;ストップビット(1ビット目)確認0か?
GOTO         LOOP            ;確認できずLOOPへ

CALL          TIM02
CALL          TIM04           ;600μs待って
BTFSS        PORTA,0       ;ストップビット(2ビット目)確認1か?
GOTO         LOOP            ;確認できずLOOPへ

CALL          TIM02
CALL          TIM04           ;600μs待って
BTFSC        PORTA,0       ;ストップビット(3ビット目)確認0か?
GOTO         LOOP            ;確認できずLOOPへ

CALL          TIM02
CALL          TIM04           ;600μs待って
BTFSS        PORTA,0       ;ストップビット(4ビット目)確認1か?
GOTO         LOOP            ;確認できずLOOPへ

CALL          TIM02
CALL          TIM04           ;600μs待って
BTFSC        PORTA,0       ;ストップビット(5ビット目)確認0か?
GOTO         LOOP            ;確認できずLOOPへ
;*****************************************
DECFSZ      MEM_4,1       ;スイッチコードが0001?
GOTO         C0                ;じゃないならC0へ
GOTO         Label0
C0
DECFSZ      MEM_4,1       ;スイッチコードが0010?
GOTO         LOOP
GOTO         Label1

Label0
;スイッチコードが0001の時の処理を書く
;処理終わり
GOTO LOOP
Label1
;スイッチコードが0010のときの処理を書く
;処理終わり
GOTO LOOP
;*****************************
;200μs (クロック 10MHz)
;*****************************
TIM02
MOVLW       07CH
MOVWF       MEM_1
TIMLP1        NOP
DECFSZ      MEM_1,F
GOTO         TIMLP1
RETURN


TIM04
MOVLW       0F9H
MOVWF       MEM_2
TIMLP2        NOP
DECFSZ      MEM_2,F
GOTO         TIMLP2
RETURN


TIM100
MOVLW       0F9H
MOVWF       MEM_3
TIMLP3        CALL TIM04
DECFSZ      MEM_3,F
GOTO         TIMLP3
RETURN
END



最新の画像もっと見る