MPLAB XでPICのプログラムの実行経過のシミュレーションができ、必要な時間をシミュレートすることができる。
File>Project PropertiesとクリックしてProject Propertiesを開く(プロジェクト名を右クリックで出るリストからも可能)。
普段はPICKit3となっているところをSimulatorとする。
Option for SimulatorのOption CategoriesでOscillator Optionsを選択してクロックの周期を設定する。
Instruction Frequencyはクロックの4分の1らしい。
4クロックで1サイクルってんだっけかな?
行番号の左あたりをクリックして時間を計りたいところにBreak Pointを設定する。
Windows、Debugging、StopwatchでStopwatchの窓を開いておく。
Debuggingを開始し、Break Pointで止まったら実行ボタンを適宜クリックする。
この例ではこんな感じにBreak Pointでの時間が表示される。
割り込みから割り込みまでの時間をチェックするというのが一番の目的だと思うので、その際はvoid interruptのルーチンのしょっぱなにBreak Pointを設定するでいいかと思う。
区間の時間を知りたければ、これを押しておく。
こっちの方がわかりやすいな。
当然、毎回同じ時間で割り込みが生ずる。
この例では、クロックは11.776MHz、タイマーは7から数え、プリスケーラは256という設定なので、
11776000 ÷ 250 ÷ 256 ÷ 4 = 46
となって、タイマーのルーチンを46回繰り返せば1秒になる計算だ。
シミュレーションの値で同様に考えると、この区間の処理を、
1000 ÷ 21.745924 = 45.9856
繰り返せばいいということになって、ぴったり1秒にならずに計算値からずれてしまう。
実際に46回に設定してシミュレーションし直すと、
となり、0.041011秒長めになるらしい。
どの部分でこの微妙な誤差が出るのか、「割り込み」自体が良くわかってないんだな。