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


PIC−USBIO using BASIC

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

[第36回]



●PICUSBIO−01(3) ルーレット、INKEY$

PICなどのプログラムの初歩的なサンプルでは出力にLEDを接続してそれを点灯させてみましょうというようなものがよくあります。
でもそれは前回やってしまいました。
次によくあるのはたとえば8ビットの出力の全部にLEDをつけてそれを順次点灯させながら入力に設定したポートをGNDにショートさせてその入力を確認したらそこでLED表示を停止するというようなものがあります。
電子ルーレットです。
今回はそれをやってみましょう。
前回は本当に簡単なプログラムでしたが今回はそれよりは少しマシなプログラムです。
今回もあらかじめ作ったプログラムをロードしました。

Aポート〜Cポートの先につないだLEDを最初は右端(ビット0)だけ点灯させます。
次に点灯させるビットを右から左に順に移動させていきます。
左端(ビット7)まできたら最初に戻って右端のビット0を点灯させます。
ビットデータをシフトさせるにはどうしたらよいか考えてしまいそうですが、1ビットだけの値を左にシフトさせるなら今回のプログラムのように元の値を2倍すればよいのです。
BASICは便利です!

このプログラムをそのまま繰り返すと速過ぎてLEDが全点灯しているように見えるのでルーレートになりません。
80行のFOR〜NEXT文で表示が見える程度にスローダウンさせています。
ちなみに同じプログラムをND80Z3.5でも試してみました。
ND80Z3.5のBASICでは変数名がAとかCとかにすると実数型の演算になってしまうのでそれを整数型(A%、B%、C%)に変えて、かつI/Oポートのアドレスも$80〜$83に変えて試してみました。
そのほかND80Z3.5の場合にはINKEY$がUSBを介してZ80CPUに送られるため応答がよくありません。
そこで70行はコメント文にしてテストしました。
さすがに8ビットCPUでクロック6MHzですからWindowsマシンにはかないません。
80行を
80 FOR C%=0 to 1000:NEXT C%
にして大体同じ速度になりました(それでもまだ少し遅いかなあというぐらいの速度です)。
それでも8ビット6MHzであることを考えるとZB3BASICは結構高速だと思います。
というか逆に言えばPICUSBIO用BASICはそれほど速くないという印象です。
まあ「Cコンパイラで作ったBASIC」ですからこんなものかなあと思います。

プログラムの説明に戻って、ビット表示をするごとに70行のところでキーボードからの入力をチェックしていて[z]キーが押されたらそこでブレークします。
INKEY$はキーボードの状態をチェックしていて何かキーが押されたらその文字コードを持ってリターンします。
何もキーが押されていないときはコード00(ヌルコード)を持ってリターンします。
ASCIIコードの20〜7Dに対応する文字キー以外は押しても00コードになります。
コード20〜7Dは「SPACE」〜「}」の文字コードです。

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

いまどきですから動画にしてyoutubeにでもUPすればよいのでしょうけれど、不慣れですしそんなことをやっている暇はありません。
静止画で勘弁願います。
実際は0.1秒ぐらいで右から左に表示が移動していきます。

「z」キーを入力しました。

そのときのビット位置(bの値)を表示してブレークしました。

そのときのLEDの表示です。

この状態で表示は停止しています。

ところで上のところでND80Z3.5のZB3BASICでテストしていて気が付きました。
今回の場合にはINKEY$を使う必要はありませんでした。
70行を削除してINKEY$を使わない状態でプログラムを実行しておいて、キー入力の代わりに[Ctrl][b]を入力すればそれでよかったのでした。

70行をコメント文にしておいてスタート後に[Ctrl][b]を入力してブレークしました。
PICUSBIO用BASICでは[Ctrl][b]を入力する([Ctrl]キーを押した状態で[b]キーを押す)とRUNで実行中のユーザーのBASICプログラムがブレークします。
なお[Ctrl][c]ではBASICシステムそのものがブレークしてコマンドプロンプトに戻ります。

PIC−USBIO using BASIC[第36回]
2022.8.11upload

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