目次>5章 第2ステップ(色々な実験)>(2)2つのLEDを交互に点滅させる>ソース
2つのLEDを交互に点滅させる(ソース)
更新日2005.8.4
以下のソースを取り込んで、アセンブル→PIC書き込み→実行して下さい。
; ========================== ここから ==============================
; CLOCK 10MHz
; PORTB 0:LED緑,1:LED赤
;
LIST P=PIC16F84A ; LIST宣言で、使用するPICをPIC16F84Aと定義する
INCLUDE P16F84A.INC ; 設定ファイルp16f84a.incを読み込む
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
GPR_1 EQU 0Ch ; GPRの1バイト目にGPR_1と言う名前を付ける
GPR_2 EQU 0Dh ; GPRの2バイト目にGPR_2と言う名前を付ける
GPR_3 EQU 0Eh ; GPRの3バイト目にGPR_3と言う名前を付ける
ORG 0 ; リセットベクタ(0番地)を指定する。
INIT
; << PICの初期化 >>
BSF STATUS,RP0 ; ファイルレジスタSTATUSのRP0をセット(1)する → バンク1
CLRF TRISB ; ファイルレジスタTRISBをクリア(0) → PORTBは全て出力
BCF STATUS,RP0 ; STATUSのRP0をクリア(0) → バンク0
LOOP
MOVLW 01h
MOVWF PORTB ; RB0:ON,RB1:OFFにする
CALL T05S ; 0.5秒待つ
MOVLW 02h
MOVWF PORTB ; RB0:OFF,RB1:ONにする
CALL T05S ; 0.5秒待つ
GOTO LOOP ; LOOPに戻って繰り返す
; << 0.5S待つサブルーチン >>
T05S
MOVLW 05h ; ループ回数5を
MOVWF GPR_3 ; セット
T05LP CALL T100mS ; 100mS待つ
DECFSZ GPR_3,F ; ループ回数−1して0になったら次の命令をスキップ
GOTO T05LP
RETURN ; このサブルーチン呼出し元に戻る
; << 100mS待つサブルーチン >>
T100mS
MOVLW 0F9h ; F9h=249
MOVWF GPR_2 ; (ループ回数として249をセット)
T100LP CALL T04mS ; 0.4mS待つ
DECFSZ GPR_2,F ; ループ回数−1して0になったら次の命令をスキップ
GOTO T100LP ;
RETURN ; このサブルーチン呼出し元に戻る
; << 0.4mS待つサブルーチン >>
T04mS
MOVLW 0F9h ; F9h=249
MOVWF GPR_1 ; (ループ回数として249をセット)
T04LP NOP ; 何もせず1サイクル消費
DECFSZ GPR_1,F ; ループ回数−1して0になったら次の命令をスキップ
GOTO T04LP
RETURN ; このサブルーチン呼出し元に戻る
END ; プログラムの終了をアセンブラに指示する
; =========================== ここまで ===============================