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