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


PIC−USBIO using BASIC

〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

[第24回]



●DATA、READ、RESTORE

前回は「TEXT型のBASICインタプリタから中間言語型のBASICインタプリタへの変更に至った理由のうちのひとつがマルチステートメント機能でした」と書きました。
今回のテーマ、DATA文も大きな理由のひとつでした。
DATA文は実行文ではありません。
READ文で読み取るためのデータをカンマで区切って定義するための文です。
READ文はDATA文で定義されたデータを先頭から順に読み取って変数に格納します。
DATA文はプログラムのどこにでも複数置くことができます。
当然そのデータを読み込むREAD文からみるとDATA文はプログラムの先頭から最後までのどこかにあってしかもそれをプログラムの先頭に近い位置にあるDATA文のデータから順番に読んでいかなければなりません。
前回のマルチステートメントよりももっと負荷のかかる厄介な機能です。
当初はこんな面倒な機能は作らないでおこうと思っていたのですけれど(というよりハナから考えていなかったのですが)やっぱりあったほうがいいだろうなあと考えるようになってきてしまいました。
かくして機能はどんどんと肥大化していってしまいます。
ともかく。
そういうDATA文、READ文をプログラムに組み込むということになりますと、これはもう覚悟を決めて中間言語型のBASICでいくしかありません。
ということで前回のマルチステートメントに続いてDATA文、READ文も中間言語型のPIC−USBIO用BASICインタプリタに組み込んでしまいました。
下はテストプログラムとその実行結果です。

DATA文はデータをカンマで区切って複数個定義することができます。
今回の例ではデータは数値のみですが文字型のデータも書くことができ、数値型と文字型を混載させることもできます。
READ文はDATA文のデータを読み取るための文でこちらもカンマで区切って複数個の変数を書くことができます。
READ文はプログラムの先頭に近いところにあるDATA文のデータから順に読み込んでいきますが、読み込む順番を変えることもできます。
RESTORE文を使うとREAD文で読み込む順番を変更することができます。
行番号50のRESTORE文のようになにもつけない場合にはREAD文の読み込み順はリセットされてポインタがプログラムの先頭に一番近い位置にあるDATA文にセットされます。
行番号70のようにRESTORE文でラベルを指定するとREAD文が読み込むためのポインタはそのラベル位置のDATA文にセットされます。
上の例では40行のREAD文で変数a、b、cに行番号10のDATA文の123、456、789がそれぞれ読み込まれたあと、d、e、fに行番号20のDATA文の1、2、3が読み込まれ、そのあとgに行番号30のDATA文の4が読み込まれます。
そのあと行番号50のRESTORE文でREAD文の読み込み順はクリアされ、ポインタは行番号10のDATA文に再セットされます。
その後の行番号60のREAD文では変数hに123が読み込まれます。
その次の行番号70のRESTORE文で行番号20(ラベル*abc)のDATA文にポインタがセットされるためその次の行番号80のREAD文で変数i、j、kには1、2、3が読み込まれます。

READ文には変数だけではなくて配列も書くことができます。
下は上のプログラムの変数の代わりに配列を使った例です。

/CONVの表示でプログラムの先頭がスクロールされてしまったのでスクリーンエディタのページモードで消えた部分を呼び戻しています。
[PageUp]キーでスクロール画面の上方向を見ることができます。
[PageDown]ではその逆の動きになります。
[End]で現在の画面に戻ります。

RUNコマンドでプログラムを実行しました。

さきほどのプログラムの変数を配列に置き換えただけなので、プログラムを実行した結果は同じになりました。

今度はDATA文に数値だけではなくて文字列も混載したプログラム例です。

DATA文に文字列を書くときは” ”では囲まず文字列のみを記述します。
” ”で囲むと” ”も文字列の一部とみなされます。
上のプログラムはテストのためわざと最初のプログラムのDATA文の一部を書き換えただけでREAD文はもとのままにしました。
プログラムを実行した結果です。

まだBASICインタプリタは作成中なのでデバッグのためのデータも表示されています。
プログラムの実行中にエラーが発生するとそこでブレイクして、エラーコードとエラーが発生したプログラム行が表示されます。
エラーコード(erc)は29と表示されています。
READ文の変数とDATA文の型が合わないときに表示されます(erc=29はそのほかの場合にも表示されることがあります)。

エラーにならないようにREAD文を変更しました。

文字型の変数名は名前の最後に$をつけて表します。

実行しました。

今度はエラーにならずに正しく実行されました。
数値型の変数に文字型のデータを読み込むとエラーになりますが逆に文字型の変数に数値型のデータを読み込んでもエラーにはなりません。
数値を文字として読み込むからです。

今度もテストのためREAD文を追加しました。

85行のread pです。
その前の80行のREAD文でDATA文のデータはちょうど最後まで読み終わります。
RESTORE文を使わないで、そのあとにさらにREAD文を置いたらどうなるかというテストプログラムです。

プログラムを実行しました。

今回もerc=29が表示されました。
READ文の変数とDATA文のデータの型が合わないときだけではなくて、今回の例のようにREAD文で読み込むためのDATA文が存在しないときにもerc=29が表示されます。

PIC−USBIO using BASIC[第24回]
2022.7.17upload

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