• ベストアンサー

処理時間の計算 PICアセンブラ

あるプログラムで、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で戻るまで(メインルーチンに戻るまで)です。 わかる方ご教示願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • terra5
  • ベストアンサー率34% (574/1662)
回答No.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でプログラム作ったことはありません(^^;

ZZR1200
質問者

お礼

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

ZZR1200
質問者

補足

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

その他の回答 (1)

  • haiji2004
  • ベストアンサー率25% (48/187)
回答No.1

サイクル数が正確にわからないと答えようがないと思いますが、、、 オシロで測定してみるというのは無しですか?

ZZR1200
質問者

お礼

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

ZZR1200
質問者

補足

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

関連するQ&A