ホームに戻る
 遅延タイマーの計算

遅延タイマーを作ってみます。
遅延タイマーとは命令をループさせて指定する時間のブランクを作成する方法です。

10MHzのクロックで0.4msの遅延タイマーを作ってみます。
まず、1命令に要する時間を計算します。

1クロックの時間=1/10000000=0.1μs

PICは4クロックで1命令なので、

1命令の時間=0.1*4=0.4μs

以下のコードが1003命令を処理するループになります。

; まず変数 T1 を用意してください
; T1 は8ビットなので 255 を超えないように

; 0.4ms (10MHzで)
TIME04          ; (a)  0サイクル
 MOVLW D'250'   ; (b)  1サイクル
 MOVWF T1       ; (c)  1サイクル
TIMELOOP        ; (d)  0サイクル
 NOP            ; (e)  1サイクル
 DECFSZ T1, F   ; (f1) 1サイクル ((f2) スキップするときは2サイクル)
 GOTO  TIMELOOP ; (g)  2サイクル
 RETURN         ; (h)  2サイクル

上記コードの命令数=
(a)+(b)+(c)+((d)+(e)+(f1)+(g))*249+(d)+(e)+(f2)+(h)
 =0+1+1+(0+1+1+2)*249+0+1+2+2
 =1003

タイマーの時間=1003×0.4=401.2μs≒0.4ms

この遅延タイマーを利用して 20ms や 1s の遅延タイマーも作成できます。

; 20ms
TIME20
 MOVLW D'50'
 MOVWF T2
TIMELOOP2
 CALL TIME04
 DECFSZ T2, F
 GOTO  TIMELOOP2
 RETURN

; 1m
TIME1000
 MOVLW D'50'
 MOVWF T3
TIMELOOP3
 CALL TIME20
 DECFSZ T3, F
 GOTO  TIMELOOP3
 RETURN

inserted by FC2 system