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


PIC−USBIO using BASIC

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

[第33回]



●/CONVを自動化

前回までのところでPIC−USBIO用BASICの当面の説明は概ね終ったように思います。
一部の命令や機能についてはまだ説明していないものも残っていますが、それについては今後ハードウェアについて説明をしていくなかで必要に応じて説明していくつもりです。
今回はソフトウェアについての説明の一応の区切りとして/CONVを自動化するためのプログラムの変更作業を行ないました。
PIC−USBIO用BASICは実行前にソースプログラム(TEXTプログラム)を中間言語型のプログラム(OBJECTプログラム)に翻訳します。
/CONVはその作業を行なうための「仮コマンド」です。
BASICシステムプログラムを作成していく過程でのデバッグを容易にするためにとりあえずコマンドとして任意の時点で実行できるように考えたものです。
しかしBASICプログラム(ユーザープログラム)を実行する際に毎回RUNコマンドに先立って/CONVを実行するなどはわずらわしい限りです。
もちろんそれはわかっていますから「当分の間」というつもりで「仮コマンド」にしていました。
前回までのところでソフトウェアについては一応の区切りがついたと判断しましたのでこの辺で/CONVをシステムプログラムの中で必要なときに呼び出してサブプログラムとして自動で実行できるようにしておこうと考えました。

以下はそのようにシステムプログラムを変更したあとでの動作テストの記録です。
そのようにシステムプログラムを変更したことで今までとどこがどのように変わったのかということが比較し易いように前回と同じテストを新しく変更したシステムプログラムで実行して確かめてみました。
下のプログラムは[第25回]でテストに使ったサンプルプログラムです。

/CONVを実行するタイミングですが一番わかりやすいのはRUNコマンドを実行する直前です。
そのように考えたのですが長いプログラムになると多分コンバートするにも時間がかかることが予想されます。
RUNコマンドを入力したのに実際にそれが実行されるまでに時間がかかるというのはあまり気持ちのいいものではありません。
もちろん必要な場合にはそうなっても(RUN入力後に実際にプログラムが実行されるまで多少の時間待たされても)仕方がないと思いますが、それをできるだけ避けるためまずは/LOADでユーザープログラムをロードしたときはロードした直後にコンバートを実行するようにしました。
当面のデバッグ用にコンバートが実行されるときには画面に*CONVERT*と表示するようにしました(最終的にはこの表示は無くすつもりです)。
上の画面ではユーザプログラム(TEST90.TXT)をロードした直後に*CONVERT*と表示されています。
そのあとLISTコマンドに続いてRUNコマンドを実行していますが、ここでは*CONVERT*は表示されていないで、普通にRUNコマンドが実行されています。

続いて前回行なったのと同じ作業(ラベル→行番号への変更作業)を行いました。

何回も書いていますがこういうときにスクリーンエディタが使えると実に便利です。
上の画面は先ほどの/LOAD〜LIST、RUNまでを実行したあとの画面です。
先ほどの画面ではカーソルはプログラムが終ったあとですから画面の一番下にありました。
そこから画面上部のLIST表示のところまでカーソルを移動してプログラムの一部書き換えを行なっています。
もとのプログラムでは最初の10行にON ERROR GOTO *err があります。
そして60行に *errラベル があります。
RESUME文に対しては70行の resume *l30 があります。
RESUME文で指定する戻り先は30行です。
そこに*l30ラベルがあります。
その4行(10、30、60、70)を上の画面のように書き換えました。
行を書き換えるときは書き換え後に[Enter]を入力すると変更が確定します。
[Enter]を入力するとカーソルが次の行に移動してそこにプロンプトマーク(>)が表示されますからどこで[Enter]が入力されたかがわかります。
最後に70行を書き換えましたのでカーソルがちょうど先ほど行なったテストのRUNコマンド入力のところに来ています。
このままここで[Enter]を入力してもよいのですが、それでは実行後の表示が先に行なったときの表示と重なってしまうのでテストとしては面白くありません。

そこでカーソルを画面の最下行に移動してから念のためLISTコマンドを実行し、それからRUNコマンドを実行しました。

プログラムを一部変更しましたから実行前に再度コンバートが必要です。
RUNコマンドの入力時にコンバートが実行されたことが*CONVERT*の表示で確認できます。

前回はダイレクトモードでのテストも行なっています。
今回も前回と同じことをやってみました。

エラー処理後にブレークするように70行のRESUME文を削除しました。
そのあとRUNコマンドを実行しました。
行の削除を行なったのでRUNコマンドの実行時にまたコンバートが行なわれています。
>RUN
の下に*CONVERT*が表示されていることでそれがわかります。
実行後はエラーが発生して60行のERC、ERLの表示でブレークしました。

そのあとダイレクトモードでRESUME文を実行しました。

>b=10:resume 30
がダイレクトモードでキーボードから入力した文です(最後に[Enter]を入力しました)。
b=10 と resume 30 が直ちに実行され、30行〜50行が実行されて、そこでブレークしました。

前回と同様に最後にRENで行番号が正しく変更されるかどうかを確認してみました。
今までと同じようにプログラムの先頭に
5’
を追加したあと、RENコマンドを実行してからLISTコマンドを実行しました。

もとのプログラムでは
10 on error goto 60
だったところがREN実行後は
20 on error goto 70
に変更されました。
また
70 b=b+2:resume 30
だったところが
80 b=b+2:resume 40
に変更されました。
ここまで前回と同じです。

そのあとRUNコマンドを実行しました。

プログラム行の追加とRENコマンドの実行が行なわれたため、RUNコマンドの実行時に再度コンバートが行なわれました。
>RUNの下の行に*CONVERT*と表示されていることでそれがわかります。

PIC−USBIO using BASIC[第33回]
2022.8.6upload

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