自作イグナイタ その10

またまたプログラムの簡単な説明の続きです。
 
前回は通常回転域での制御でした。今回はタイマサブルーチンの説明となります。
 
これまで数回に渡り説明しましたマニアックなプログラムネタ。
 
次回は最初から最後までの説明なしのプログラムのみをもう一回掲載したいと思います。
 
太文字がプログラムソースです。

;***************************
;タイマサブルーチン
;***************************
   ; << 162.5uS待つサブルーチン >>
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              ; このサブルーチン呼出し元に戻る
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              ; このサブルーチン呼出し元に戻る
       
10ms待機のサブルーチン。162.5usのサブルーチンを61回繰り返して10msにしています。
 
  END

おしまい。