アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるプログラムで、TIMERというサブルーチンを作りました。適当に数値を変えてうまく行った値を採用したのですが、実際に処理時間が何秒かかるのかが分りません。

TIMER MOVLW 0x40 ;この40が採用した値です
MOVWF WC1
LOOPT DECFSZ WC2,F ;WC2はあらかじめCLRされてます
GOTO LOOPT
DECFSZ WC1,F
RETURN
見難くてすいません(TIMER、LOOPTがラベルです)

使用ハードはPIC16F84Aでクロック周波数は20[MHz]です。

たしか通常は一つの命令にクロック4周期分だった気がするので、最初の二行で8/20M[s]なのは分るんですが、LOOPTのDECFSZとかは4周期分じゃなかったような気がして、混乱してしまいました・・・。

知りたいのはRETURNで戻るまで(メインルーチンに戻るまで)です。
わかる方ご教示願います。

A 回答 (2件)

>DECFSZは2命令サイクル必要な時と1命令サイクルでいいときがあって混乱しています。



そんなに難しい話ではないと思いますが。
この種の条件が成立した時にスキップという命令の場合、
条件が成立しない場合は1サイクル(4クロック)、成立してスキップする場合2サイクルかかるだけです。
条件によって処理する量が違うので、スキップという処理を余分に行う分、余計なサイクルが必要なだけですから。
結局、こんな感じのサイクル数になると思います。

MOVLW 1サイクル
MOVWF 1サイクル
DECFSZ (1サイクル * 0xff + 2サイクル) * 0x40
GOTO (2サイクル * 0xff ) * 0x40
DECFSZ 1サイクル * 0x3f + 2サイクル
GOTO 2サイクル * 0x3f
RETURN 2サイクル

多分二重ループでしょうから LOOPTへのジャンプがあるはずとGOTOを一つ追加しております。

この合計を4倍すればクロック数がでます。

各命令のサイクル数は手元の「PICマイコン活用ハンドブック」で調べました。
ちなみに、まだPICでプログラム作ったことはありません(^^;

この回答への補足

訂正。GOTO  LOOPTですね。
なんかボケてますね
ありがとうございました

補足日時:2004/09/14 22:59
    • good
    • 0
この回答へのお礼

あ、GOTO TIMER忘れてましたね…。ありがとうございます

お礼日時:2004/09/14 22:37

サイクル数が正確にわからないと答えようがないと思いますが、、、



オシロで測定してみるというのは無しですか?

この回答への補足

1命令サイクルは20[MHZ]4周期分です。
これで計算できませんかね?

補足日時:2004/09/14 00:44
    • good
    • 0
この回答へのお礼

回答ありがとうございます
すいません。さらに補足です。
DECFSZは2命令サイクル必要な時と1命令サイクルでいいときがあって混乱しています。
言い回しが不適切で申し訳ありません

お礼日時:2004/09/14 00:53

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!