2023.4.29
前へ
次へ
ホームページトップへ戻る


PICBASICコンパイラ

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
まるでインタプリタ。でもコンパイラです。超カンタン超シンプルです。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第16回]



●WAIT n

少し間が空いてしまいました。
この一週間ほどはPICBASICコンパイラの一番難しいあたりのところを構築していました。
やっとのことでなんとか難所を乗り越えることができました。
まだまだ作らなければならないところは残っていますがかなり形が整ってきましたので、できたところから少しずつ紹介していきたいと思っています。

さて。
今回のテーマですが。
前回はFOR NEXT文を使ったタイマープログラムを作りました。
ちょいとした時間待ちが必要な場合などに手軽に使うことができます。
それほど正確な時間は必要ではなくてアバウトでよいのでちょいとした時間待ちループが欲しいときには手軽に利用できます。
そうなのですけれど、そのような機能を1つの命令で実行できたらなお便利だと思いつきました。
それでさっそく作ってしまったのが今回紹介しますWAIT文です。
この命令は一般的なBASICの命令ではありません。
PICBASICコンパイラ用に作ったローカルな命令です。
C++にはSleep(n)という機能がありますがSleepはPICのアセンブラではHALTに近い機能として用意されています。
PICでSLEEPを実行すると本当に寝てしまいます。
仮死状態になってしまいますからPICBASICコンパイラとしてSLEEPという命令を使うとHALTかと誤解されてしまうかもしれません。
それで「時間待ち」の意味でWAITとしました。
書式は WAIT n です。
WAIT(n)のほうがなんとなくしっくりきそうですがその表現はBASICでは一般的に関数の表現です。
WAIT自体は値を持っていませんから計算式の中では使えません。
それで一般的なBASICの命令形として WAIT n にしました。
nは0〜255の範囲の整数で単位はmsです。
WAIT 1
を実行すると1msの時間待ちが実行されます。
0が最大値です。
WAIT 0
は256msの時間待ちになります。

WAIT命令を使ってPORTCからパルスを出力するプログラムを作りました。

WAIT 1 ですから1msのパルスになります。

PORTCのbit0(RC0)の出力をオシロで観測しました。

1msのHL信号が出力されています。

こんどはWAIT 100を実行してみました。

100msの時間待ちが挿入されます。

RC0の出力をオシロで確認しました。

先ほどの波形と同じように見えますが先ほどは時間軸が500μs/divでした。
今回は50ms/divになっています。
HもLも100msです。

WAIT 250を実行しました。

250は設定できる最大値に近い値です。
250msの時間待ちになります。

RC0の出力をオシロで確認しました。

Lの期間もHの期間も250msです。

上のWAIT 250とFOR NEXTを組み合わせて1秒の時間を作りました。

毎回のように書いておりますが、これでも正真正銘のBASICコンパイラです。
まるでBASICインタプリタの手軽さというのがウリです。

RC0の出力をオシロで確認しました。

水平時間軸は500ms/divです。
Lの期間もHの期間も1secです。

過去記事の訂正です。
[第10回]で「変数名はアルファベットの小文字も大文字も使えます」と書きました。
そのときに書きましたようにPICBASICコンパイラのルールとしてPICのSFR(特殊関数レジスタ)は英大文字で表記します。
PORTAとかTRISCというのがPICのSFRです。
それで一般の変数名でも英大文字での表記ができるということにするとPORTCと書くつもりで間違ってPOATCと書いてもそれは一般の変数名ということになってコンパイル時にもエラーにならずに通ってしまいます。
当然期待した通りの実行結果は得られません。
あとになってからそのことに気が付きましたので一般の変数名は英小文字と数字のみで表記することにしました。
そのようにPICBASICコンパイラを機能変更しましたので、PICのSFRとして存在しない変数名を大文字で表記するとコンパイル時にエラーになります。
下はエラーになる参考例です。

/convはコンパイル命令です。
通常は/LOADか/RUNの実行時に/CONVも実行されます。
20行でPORTC=1にするところを間違えてPOATCと書いてしまいました。
erc=91(エラーコード91)は「PICのSFRではない」というメッセージです。

PICBASICコンパイラ[第16回]
2023.4.29upload

前へ
次へ
ホームページトップへ戻る