ホームに戻る
遅延タイマーの計算
遅延タイマーを作ってみます。
遅延タイマーとは命令をループさせて指定する時間のブランクを作成する方法です。
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