またまたプログラムの簡単な説明の続きです。
前回は通常回転域での制御でした。今回はタイマサブルーチンの説明となります。
これまで数回に渡り説明しましたマニアックなプログラムネタ。
次回は最初から最後までの説明なしのプログラムのみをもう一回掲載したいと思います。
太文字がプログラムソースです。
;***************************
;タイマサブルーチン
;***************************
; << 162.5uS待つサブルーチン >>
T05mS
MOVLW D'80'
MOVWF T05mCNT
T05mLP
NOP ; 何もせず1サイクル消費
DECFSZ T05mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T05mLP ;
RETURN ; このサブルーチン呼出し元に戻る
T05mS
MOVLW D'80'
MOVWF T05mCNT
T05mLP
NOP ; 何もせず1サイクル消費
DECFSZ T05mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T05mLP ;
RETURN ; このサブルーチン呼出し元に戻る
162.5us待機のサブルーチン。
; << 1mS待つサブルーチン >>
T03mS
MOVLW D'6' ; 5
MOVWF T50mCNT ; セット
T03mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT ,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T03mLP ;
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
NOP
RETURN ; このサブルーチン呼出し元に戻る
T03mS
MOVLW D'6' ; 5
MOVWF T50mCNT ; セット
T03mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT ,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T03mLP ;
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
NOP
RETURN ; このサブルーチン呼出し元に戻る
1ms待機のサブルーチン。162.5usのサブルーチンを6回繰り返して1msにしています。
; << 20mS待つサブルーチン >>
T50mS
MOVLW D'122' ; ループ回数249を
MOVWF T50mCNT ; セット
T50mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T50mLP ;
RETURN ; このサブルーチン呼出し元に戻る
20ms待機のサブルーチン。162.5usのサブルーチンを122回繰り返して20msにしています。
; << 10mS待つサブルーチン >>
T10mS
MOVLW D'61' ; ループ回数249を
MOVWF T50mCNT ; セット
T10mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T10mLP ;
RETURN ; このサブルーチン呼出し元に戻る
T10mS
MOVLW D'61' ; ループ回数249を
MOVWF T50mCNT ; セット
T10mLP
CALL T05mS ; 何もせず1サイクル消費
DECFSZ T50mCNT,F ; ループ回数-1して0になったら次の命令をスキップ
GOTO T10mLP ;
RETURN ; このサブルーチン呼出し元に戻る
10ms待機のサブルーチン。162.5usのサブルーチンを61回繰り返して10msにしています。
END
おしまい。