BHT-BASIC4.0:I/OポートとWAIT、さらにTIMERについて(BHT-1300)

今までは何となく OUT命令  WAIT命令 を使ってきましたが、 ここで関連するI/Oポートの説明を行いたいと思います。 I/Oポートとは入力・出力ポートの略称で、 ハンディのCPUから見て外部装置に該当する キーボード、 LEDランプ、ブザーなどを制御するためのポート(外部メモリの様なもの)です。 I/Oポートは制御対象毎に別々のアドレスが割り当てられていて、 それへの入力命令が INP関数 で、 出力命令が OUTステートメント です。 また、I/Oポートの状態が指定状態になるまでプログラムを止めておく  WAITステートメント があります。

以下に私がプログラムで使用したポートについて一覧を記します。 ここに上げた以外のポートは各装置のマニアルを参照して下さい。
ポートNO
(HEX)
bit 制御対象 R/W データ 初期値
.pnEvent
 (0000)
0 キーボードバッファ R - 0 データ無 -
.pvEvKeyOn 1 データ有
1 バーコードバッファ - 0 データ無 -
.pvEvBarOn 1 データ有
2 トリガスイッチ - 0 OFF -
.pvEvTrgOn 1 ON
3 受信バッファ - 0 データ無 -
.pvEvtCmOn 1 データ有
4 TIMEA関数 - 0 関数の値が0以外 -
.pvEvTma0 1 関数の値が0
5 TIMEB関数 - 0 関数の値が0以外 -
.pvEvTmb0 1 関数の値が0
6 TIMEC関数 - 0 関数の値が0以外 -
.pvEvTmc0 1 関数の値が0
7 CS(CTS)信号 - 0 常に0を返す -
.pvEvCsOn 1 -
.pnLEDCtrl
 (0001)
0 表示LED(赤) W - 0 消灯 0
.pvLEDRed 1 点灯
1 表示LED(緑) - 0 消灯 0
.pvLEDGrn 1 点灯
2 表示LED(青) - 0 消灯 0
.pvLEDBle 1 点灯
.pnFont
 (6080)
0 表示フォント R/W .pvFtStd 0 標準フォント 0
.pvFtSmall 1 小フォント
サイズ指定(16,24,30,40)
.pnKeyEnt
 (60B0)
0 キー入力方式 R/W .pvKyNm 0 数字入力 0
.pvKyAlpNm 1 英数字入力
.pnKeyMd
 (60B1)
0 キー入力状態 R/W .pvKMNm 0 数字 0
.pvKMAlp 1 英字

例として先ずは、WAIT命令について説明します。
WAIT <ポート番号> , <AND パターン>[,XOR パターン]

 <ポート番号>:入力ポート番号を指定
 <AND パターン>:チェックしたいビットを1 にして、AND パターンに設定

ポート番号で指定された入力ポートの内容を読込し、 AND パターンとXOR パターンで指定された値になるまで、 ユーザプログラムをこの命令で待つ様にします。

指定されたパターンになるまで命令が終わらないので、 指定値が間違っていると、命令から帰って来なくなり、 プログラムが止まってしまいますので、注意して下さい。
以下のソースがWAIT命令の使用例の関数なのですが、 ポート(0000)の0ビット目が1になるまで待っています。 WAIT命令を抜けてきた時点で、キーボードバッファにキー入力が在ることになるのでキーデータを1文字取得しています。

次は、INP関数について説明します。
INP(<ポート番号>)

 <ポート番号>:入力ポート番号を指定

INP関数が返す値は整数型になります。 I/Oポートのデータは1バイトなので、整数型では最大でも255となります。
WAIT命令のところの関数の例をINP関数で置き換えると以下の様になります。
(ちょっと冗長すぎますね)

次は、OUT命令について説明します。
OUT <ポート番号>,<データ>
 <ポート番号>:入力ポート番号を指定  <データ>  :ポートに出力するバイトデータ(0~255)

I/Oポートに割り振られていないポート番号を指定すると無視されます。 また、使用されているポート番号でも意味の無いBIT位置にデータを設定しても無視されます。

最後にTIMER命令について説明します。
書式1:(タイマ値を参照するとき)
  W% = TIMEA
  W% = TIMEB
  W% = TIMEC
  (W%は宣言済みとする)

書式2:(タイマ値を設定するとき)
  TIMEA = <カウント値>
  TIMEB = <カウント値>
  TIMEC = <カウント値>

  <カウント値>:指定可能範囲は0~32767、単位は100ms
タイマは値を設定されてからカウントダウンが始まり、 カウント値が0になった時点で動きを止めます。 例えばある時間の待ちを作る場合に、カウンタに値を設定し、 カウンタを読込をループで行い その値が0になるのを待ちます。
ソースの例としては以下の様な感じです。

この方法ですが、以下の様にしても同じことができます。

尚、.pnEventなどのシステム定義定数は 「BHT-BASIC定義ファイル(BHTDEF.INC)」をプログラム先頭でインクルードする必要があります。 (このファイルですがDENSOの会員登録と装置の製品番号登録が必要なはずです。 DENSOのホームページからダウンロードして下さい)

楽天市場

転職を本気で考えている方向けのプログラミングスクール!【WebCampPRO】



■関連記事
BHT-BASIC:DENSOのハンディターミナルの開発言語のBHT-BASIC4.0を使ってみた
BHT-BASIC4.0:変数宣言の書き方(BHT-1300)
BHT-BASIC4.0:変数宣言の書き方その2(BHT-1300)
BHT-BASIC4.0:ユーザ定義関数について(BHT-1300)
BHT-BASIC4.0:演算子について(BHT-1300)
BHT-BASIC4.0:画面への表示について(BHT-1300)
BHT-BASIC4.0:キー入力について(BHT-1300)
BHT-BASIC4.0:数値用キー入力関数(ユーザ定義関数)について(BHT-1300)
BHT-BASIC4.0:ユーザ定義関数の値渡し・参照渡しについて(BHT-1300)
BHT-BASIC4.0:文字列を扱うユーザ定義関数について
BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその2
BHT-BASIC4.0:文字列を扱うユーザ定義関数についてその3
BHT-BASIC4.0:TeraTermを使ってDENSOのハンディターミナルにファイル(プログラム)転送を行う方法
BHT-BASIC4.0:データファイルの取り扱いについて(BHT-1300)
BHT-BASIC4.0:データファイルの取り扱いについてその2(書込み・読込みの実用的な関数)
BHT-BASIC4.0:データファイルの検索について(SEARCH関数)
BHT-BASIC4.0:ユーザ関数の引数の仮変数に対する代入の注意点
BHT-BASIC4.0:データファイルの削除等について(KILL、CLFILEのラッパ関数)
BHT-BASIC4.0:ファイルの存在確認関数を作ってみました
BHT-BASIC4.0:拡張関数のバイナリサーチ処理関数(BSEARCH.FN3)の使い方
BHT-BASIC4.0:拡張関数のサーチ処理関数(SEARCH.FN3)の使い方
BHT-BASIC4.0:簡単なメニュー表示・選択を行うユーザ関数について
BHT-BASIC4.0:ファイル伝送におけるXFILE命令の使い方
BHT-BASIC4.0:バーコードの読込み(バーコードスキャン)について
BHT-BASIC4.0:Bluetoothデバイスアドレス取得等について
VB.NET:ハンディターミナル(BHT-1300等)とのデータファイルの送受信について

デル株式会社
コメント(0)