今までは何となく OUT命令 や
WAIT命令 を使ってきましたが、
ここで関連するI/Oポートの説明を行いたいと思います。
I/Oポートとは入力・出力ポートの略称で、
ハンディのCPUから見て外部装置に該当する
キーボード、 LEDランプ、ブザーなどを制御するためのポート(外部メモリの様なもの)です。
I/Oポートは制御対象毎に別々のアドレスが割り当てられていて、
それへの入力命令が INP関数 で、
出力命令が OUTステートメント です。
また、I/Oポートの状態が指定状態になるまでプログラムを止めておく
WAITステートメント があります。
以下に私がプログラムで使用したポートについて一覧を記します。 ここに上げた以外のポートは各装置のマニアルを参照して下さい。
例として先ずは、WAIT命令について説明します。
ポート番号で指定された入力ポートの内容を読込し、 AND パターンとXOR パターンで指定された値になるまで、 ユーザプログラムをこの命令で待つ様にします。
指定されたパターンになるまで命令が終わらないので、 指定値が間違っていると、命令から帰って来なくなり、 プログラムが止まってしまいますので、注意して下さい。
以下のソースがWAIT命令の使用例の関数なのですが、 ポート(0000)の0ビット目が1になるまで待っています。 WAIT命令を抜けてきた時点で、キーボードバッファにキー入力が在ることになるのでキーデータを1文字取得しています。
次は、INP関数について説明します。
INP関数が返す値は整数型になります。 I/Oポートのデータは1バイトなので、整数型では最大でも255となります。
WAIT命令のところの関数の例をINP関数で置き換えると以下の様になります。
(ちょっと冗長すぎますね)
次は、OUT命令について説明します。
I/Oポートに割り振られていないポート番号を指定すると無視されます。 また、使用されているポート番号でも意味の無いBIT位置にデータを設定しても無視されます。
最後にTIMER命令について説明します。
ソースの例としては以下の様な感じです。
この方法ですが、以下の様にしても同じことができます。
尚、.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等)とのデータファイルの送受信について
以下に私がプログラムで使用したポートについて一覧を記します。 ここに上げた以外のポートは各装置のマニアルを参照して下さい。
ポートNO (HEX) |
bit | 制御対象 | R/W | データ | 初期値 | ||
---|---|---|---|---|---|---|---|
.pnEvent |
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 |
0 | 表示LED(赤) | W |
- | 0 | 消灯 | 0 |
.pvLEDRed | 1 | 点灯 | |||||
1 | 表示LED(緑) | - | 0 | 消灯 | 0 | ||
.pvLEDGrn | 1 | 点灯 | |||||
2 | 表示LED(青) | - | 0 | 消灯 | 0 | ||
.pvLEDBle | 1 | 点灯 | |||||
.pnFont |
0 | 表示フォント | R/W |
.pvFtStd | 0 | 標準フォント | 0 |
.pvFtSmall | 1 | 小フォント | |||||
サイズ指定(16,24,30,40) | |||||||
.pnKeyEnt |
0 | キー入力方式 | R/W |
.pvKyNm | 0 | 数字入力 | 0 |
.pvKyAlpNm | 1 | 英数字入力 | |||||
.pnKeyMd |
0 | キー入力状態 | R/W |
.pvKMNm | 0 | 数字 | 0 |
.pvKMAlp | 1 | 英字 |
例として先ずは、WAIT命令について説明します。
WAIT <ポート番号> , <AND パターン>[,XOR パターン]
<ポート番号>:入力ポート番号を指定
<AND パターン>:チェックしたいビットを1 にして、AND パターンに設定
<ポート番号>:入力ポート番号を指定
<AND パターン>:チェックしたいビットを1 にして、AND パターンに設定
ポート番号で指定された入力ポートの内容を読込し、 AND パターンとXOR パターンで指定された値になるまで、 ユーザプログラムをこの命令で待つ様にします。
指定されたパターンになるまで命令が終わらないので、 指定値が間違っていると、命令から帰って来なくなり、 プログラムが止まってしまいますので、注意して下さい。
以下のソースがWAIT命令の使用例の関数なのですが、 ポート(0000)の0ビット目が1になるまで待っています。 WAIT命令を抜けてきた時点で、キーボードバッファにキー入力が在ることになるのでキーデータを1文字取得しています。
次は、INP関数について説明します。
INP(<ポート番号>)
<ポート番号>:入力ポート番号を指定
<ポート番号>:入力ポート番号を指定
INP関数が返す値は整数型になります。 I/Oポートのデータは1バイトなので、整数型では最大でも255となります。
WAIT命令のところの関数の例をINP関数で置き換えると以下の様になります。
(ちょっと冗長すぎますね)
次は、OUT命令について説明します。
OUT <ポート番号>,<データ>
<ポート番号>:入力ポート番号を指定 <データ> :ポートに出力するバイトデータ(0~255)
<ポート番号>:入力ポート番号を指定 <データ> :ポートに出力するバイトデータ(0~255)
I/Oポートに割り振られていないポート番号を指定すると無視されます。 また、使用されているポート番号でも意味の無いBIT位置にデータを設定しても無視されます。
最後にTIMER命令について説明します。
書式1:(タイマ値を参照するとき)
W% = TIMEA
W% = TIMEB
W% = TIMEC
(W%は宣言済みとする)
書式2:(タイマ値を設定するとき)
TIMEA = <カウント値>
TIMEB = <カウント値>
TIMEC = <カウント値>
<カウント値>:指定可能範囲は0~32767、単位は100ms
タイマは値を設定されてからカウントダウンが始まり、
カウント値が0になった時点で動きを止めます。
例えばある時間の待ちを作る場合に、カウンタに値を設定し、
カウンタを読込をループで行い その値が0になるのを待ちます。
W% = TIMEA
W% = TIMEB
W% = TIMEC
(W%は宣言済みとする)
書式2:(タイマ値を設定するとき)
TIMEA = <カウント値>
TIMEB = <カウント値>
TIMEC = <カウント値>
<カウント値>:指定可能範囲は0~32767、単位は100ms
ソースの例としては以下の様な感じです。
この方法ですが、以下の様にしても同じことができます。
尚、.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等)とのデータファイルの送受信について