PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第27回]
●GOTO 行番号
前回はダイレクトモードについて説明しました。
前回をお読みになってあるいは気付かれた方もいらっしゃったかもしれません。
下は前回の説明に使ったサンプルプログラムです。
このプログラムに対してダイレクトモードで goto *abc と入力することでダイレクトにプログラムの途中の行から実行できるということを説明しました。
そこのところについては、いかにも苦しい説明だなあ、と思いつつ書きました。
このプログラムの中では*abcにアクセスしている命令はありません。
実はダイレクトモードでgoto文を使う例として必要なため、プログラムに追加したのでした。
つまり。
現行の仕様ではあらかじめダイレクトモードでエントリするかもしれないと予想してその対象となるであろう行にラベルをつけておかなければならないのです。
それじゃあ事実上はダイレクトモードではgoto文は使えないことになります。
ということになりますと。
それはつまり goto 行番号 の機能が必要だということになってしまいます。
そうなったら作らないわけにはまいりませんでしょう。
だからといってそれなら「ダイレクトモードだけに goto 行番号 を使えるようにしました」なんて中途半端なことはできませんでしょう。
結局これも当初の仕様を変更して、プログラム中でもダイレクトモードでも goto 行番号 を使えるようにしてしまいました。
以下はそのように機能を変更したPIC−USBIO用BASICの動作テストの様子です。
まずは前回のテストプログラムから*abcラベルを外して念のためプログラムを実行しました。
ラベルを外しただけですからふつうに実行できました。
ここからが動作テストです。
ダイレクトモードで a=10:goto 30 と入力しました。
ここは前回 a=10:goto *abc と入力したところです。
goto *abc の代わりに goto 30 をダイレクト実行して正しく実行されることが確認できました。
上では *abcラベル を外してから goto 30 をダイレクト実行しましたが、ラベルを外さなければならないということではありません。
前回の通り *abc をつけたままのプログラムに対して goto 30 をダイレクト実行してみました。
問題なく正しく実行できました。
ここまでは前回のテストと同様に行番号30に対して goto 30 をダイレクト実行しましたが、 goto ラベル だけではなくて goto 行番号 も実行できるようになりましたからどの行番号に対してもgoto文をダイレクト実行できます。
その例として goto 40 をダイレクト実行してみました。
ダイレクトモードではこの例のように変数に値を代入したりgoto文を実行したりするだけではなくて計算式を実行させることもできます。
またそのほかの命令文も1行で記述するならばプログラム中で実行するのと同じようにダイレクト実行することができます。
ここまでは goto 行番号 をダイレクトモードで使いました。
上のほうに書きましたように今回の機能変更では goto 行番号 はダイレクトモードだけではなくて通常のプログラムの中でも普通に使えるようにしました。
以下は goto 行番号 をプログラム中で使った場合の動作テストです。
下でloadしたプログラム(test67.txt)は[第10回]で使いました。
goto ラベル の説明のためのプログラムです。
このプログラムの goto ラベル をgoto 行番号 に書き換えます。
画面コピーを取らずに作業を先に進めてしまいましたので[PageUp]キーでスクロールダウンしてから画面をコピーしました。
PIC−USBIO用BASICにはこういう便利な機能もついているのです。
20行の*loop、60行の*endを外すとともに50行の goto *loop を goto 20 に、40行の goto *end を goto 60 に書き換えました。
そのように変更したあと、/convを実行してからrunコマンドを実行しました。
プログラム中の goto ラベル を goto 行番号 に書き換えたプログラムも正しく実行できました。
PIC−USBIO using BASIC[第27回]
2022.7.26upload
前へ
次へ
ホームページトップへ戻る