楽天市場
[無料でホームページを作成] [通報・削除依頼]

1kワードのTINYBASIC その7

◎キー入力(INKEY$)の実装

前回はASCIIコードの出力方法について記載しました。今回はそれとは逆のASCIIコードの入力方法について検討します。

実は、この機能は1kワードTINYBASICインタープリタにすでに実装されています。
プログラム実行中にctrl-C入力やEscキー押打でプログラムが停止しますが、この機能がまさにそれです。
(インタープリタのアセンブラソース上のラベルは"INT")

現状のINTルーチンでは、キー入力は出来てもASCIIコードを読みだせない仕様になっているため、ここに手を加えます。
変更点はわずかで、入力キーのASCIIコードを受信したときに目印となるフラグを立てるだけです。

押されたキーのASCIIコードは次のキー入力があるまで受信バッファーに保存されていますので、プログラム中で上述の
フラグをチェックし、フラグが立っていたら受信バッファーのASCIIコードを読み出し、次のキー入力に備えてフラグを
クリアするという手順になります。


以下にキー入力エコーバックのプログラム例を示します。(実行には最新版のインタープリタが必要です。)

①UARTを搭載しているデバイスの場合 (PIC16F1704/PIC16F18323/PIC16F18313)
img_20190714-002443.jpg

解説 10行目 フラグ($0073)をクリア
   20行目 フラグが立っていなければ20行目でループ
   30行目 $019AはTXREG、$0199はRCREGのアドレス TXREG=RCREG
       フラグをクリアして20行目へジャンプ (無限ループ)

②UARTを搭載していないデバイスの場合 (PIC16F1703)
img_20190714-002637.jpg

解説 PIC16F1703のシリアル受信にはIOC割込みを使用していますので、データの取りこぼしはありません。
   受信したASCIIコードは送受信バッファ$007Fに書き込まれます。
   30行目 $0761は$007Fに書き込まれたASCIIコードをシリアル出力するサブルーチンのアドレス
       フラグをクリアして20行目へジャンプ (無限ループ)

①②いずれもダイレクトコマンドでは使用できません。プログラム中に記述する必要があります。


〇インタープリタで使用する特別なアドレスの変更:フラグ新設に伴い以下のように更新します。
<PIC16F1704>
img_20190714-002820.jpg
<PIC16F1703/18323/18313>
img_20190714-002910.jpg

キー入力(INKEY$)に対応した最新版(Ver0.93)のインタープリタ(PIC16F1704/1703/18323/18313用)のダウンロードはこちらから

https://drive.google.com/file/d/11Mx6nenQmZSpF4mQ4MX3tb7oI78DHHe8/view?usp=sharing