目次>5章 第2ステップ(色々な実験)>(1)LEDを点滅させる>ソース

LEDを点滅させる(ソース)

更新日2005.6.25

以下のソースを取り込んで、アセンブル→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   03h
        MOVWF   PORTB       ; RB0,RB1をオンにする(LED点灯)

        CALL    T05S        ; 0.5秒待つ
        CLRF    PORTB       ; RB0,RB1をオフにする(LED消灯)

        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                 ; プログラムの終了をアセンブラに指示する
; =========================== ここまで ===============================