PICBASICコンパイラ
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第15回]
●FOR NEXT文を使ったタイマープログラム
前回はFOR NEXT文の実行時間を確かめました。
FOR文とNEXT文の間に何も挟まないプログラムの場合で繰り返し回数がある程度多い場合には1回の実行時間は約0.6μsという結果が得られました。
それだけはっきりした数字が得られたならばFOR NEXT文を使って任意の時間のタイマープログラムが出来そうです。
試しに1msのタイマープログラムを作ってみることにしました。
1msのタイマーは0.6μsのFOR NEXT文を何回実行することになるのでしょうか。
計算をしてみました。
1000/0.6≒1666.7
約1667回です。
しかしこれは実行できません。
PICBASICコンパイラは8ビットの数しか扱えません。
ということは最大255回(0を256と数えた場合には256回)までしかカウントできません。
そこで少し工夫をします。
FOR NEXT文を255回実行した場合には実行時間はどれほどになるでしょうか。
まずはそれを計算します。
0.6*255=153μs
です。
それならば。
第1のFOR NEXT文で100μs(0.1ms)のタイマーを作って、それを第2のFOR NEXT文で10回繰り返せば1msになるはずです。
まずは100μsになるようなFOR NEXT回数を求めます。
100/0.6≒166.7
です。
四捨五入すると167回ですがFOR NEXTを二重に使うことなどで余分に消費する時間も出てくると思いますからここは切捨てにして166回にします。
本当にそれで100μsが得られるか、まずはその部分だけのテストをしてみました。
下がそのプログラムです。
今回のような機能の応用などのテストを行ないつつ少しでも使い勝手が向上するような改良も思いつくたびに行なっています。
/LOAD、/SAVEでロード、セーブするPICBASICのソースプログラムはTXT形式のファイルで拡張子は.TXTです。
上の画面の/LOADのところを見てください。
bsfortimet2はtxtファイルですが拡張子を省略しています。
拡張子を省略した場合には拡張子が.txtのファイルを指定したことになります。
これは/SAVEコマンドの場合でも同じです。
以上は機能の紹介です。
プログラムの説明に戻ります。
0〜165までの繰り返しなので繰り返し回数は166回です。
上のプログラムを実行して出力されるPORTCのうちのビット0(RC0)の波形をCPLDロジアナで観測しました。
波形はPROBE0に見えています。
ぴったり100μsです。
そこまで確認できましたからいよいよ仕上げです。
FOR NEXTを2段に使って1msのパルスを作ります。
外側のFOR NEXT文はb=0からb=9までの繰り返しですから10回の繰り返しです。
プログラムを実行して先ほどと同じようにCPLDロジアナで観測しました。
1msのパルスになっているようです。
サンプリングクロックを50KHzにしました。
ちゃんと1msになっています。
PICには内蔵Timerの機能がありますからそれを使えば正確な時間のタイマーを作ることができます。
PIC内蔵Timerの使い方については「PIC−USBIO using BASIC」[第64回]〜 を参照してください。
しかしそこまで正確でなくても大体の値のタイマーでよいという場合には今回の要領で数ms〜数十ms程度のタイマーなら簡単に作ることができます。
BASICは本当に便利です。
PICBASICコンパイラ[第15回]
2023.4.25upload
前へ
次へ
ホームページトップへ戻る