
あるプログラムで、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で戻るまで(メインルーチンに戻るまで)です。
わかる方ご教示願います。
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でプログラム作ったことはありません(^^;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
組み込みCプログラムで実数型
-
プログラム言語FortranとCの違...
-
【有効数字について】 授業で、...
-
【暗号資産】Bitcashって仮想通...
-
電子透かしを使用した場合の著...
-
16bitはダイナミックレンジが97...
-
ジークアクスのサイコガンダム...
-
1TBHDDに音楽ファイルは何ア...
-
文字の容量(サイズ)についての...
-
有効数字
-
実行計画の「COST」と「BYTE」...
-
GB と Gbの違いの意味
-
Stirlingについて
-
KBのMB違いって
-
ffftpのサイズの単位は何でしょ...
-
携帯電話の略語であるMBって英...
-
EXCELでの16進数取り出し、上...
-
魚民でバイトしてます。 バイト...
-
ギガバイトとメガバイト
-
PDFからワードへ→文字がくずれる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラム言語FortranとCの違...
-
arduino
-
CPU、Z80からステート数から...
-
組み込みCプログラムで実数型
-
なぜ、i++なのか?(ものすごく...
-
パイプライン制御について
-
PICマイコンのプログラムについ...
-
アセンブリ言語で。
-
MIPS アセンブリ言語
-
G4 って Pentium でいうとどの...
-
CPUって
-
マイコンのビット数とクロック数
-
64ビット化による処理速度低下...
-
H8Sで割り込み発生時の飛び先ア...
-
関数と命令の違いについて
-
+=と÷=の処理速度の謎を教え...
-
VBSとVBA
-
任天堂64の64 CPUの仕...
-
スマートフォンAndoroid の R...
-
ステート数とは
おすすめ情報