■ BASCOM-AVR (DEMO) の使用方法 ■
命令文のリファレンス・マニュアル 使用方法のページへ戻る
シリアル通信(RS-232C)関連の命令
● シリアルポート(RS-232C)の、通信を制御する命令です。
$BAUD UARTのボーレートを設定します。
$BAUD1 第2ハードウエアUARTに、ボーレートを設定します。
BAUD プログラム実行中に、シリアルポートの通信速度(ボーレート)を変更します。
BAUD1 プログラム実行中に、第2ハードウェアUARTの通信速度を変更します。
CRYSTAL (Version 1.11から、同様の働きをするBAUD命令が推奨されます)
INPUT シリアルポートのキーボードや、オープンされたファイルからデータを入力します。
INPUTHEX シリアルポートに接続されたキーボードから、16進数の数値を入力します。
INPUTBIN シリアルポートから、バイト単位のバイナリ・データを読み込みます。
CONFIG INPUTBIN INPUTBIN命令の、受信できるパケット容量を増やします。
INKEY シリアル入力バッファに受信された、1つ目のデータをASCIIコードで取り出します。
WAITKEY シリアル入力バッファにデータが受信されるまで待ち、データを変数に入れます。
ISCHARWAITING シリアル入力バッファに、受信したデータが「有る」か「無い」かをチェックします。
ECHO シリアル入力を受け付ける際に、エコーバックを「する」か「しない」を選択します。
PRINT シリアルポートの画面等や、オープンされたファイルに、データを出力します。
SPC PRINT命令で、指定された数のスペースを出力します。
PRINTBIN シリアルポートに、バイト単位のバイナリ・データを出力します。
CONFIG PRINTBIN PRINTBIN命令の、配列出力個数の最大値を増やします。
CONFIG SERIALIN シリアルデータ受信のために、バッファを使用した、割り込み処理を行います。
CONFIG SERIALOUT シリアルデータ送信のために、バッファを使用した、割り込み処理を行います。
BUFSPACE シリアル入出力バッファの、空き容量を調べて変数に入れます。
CLEAR シリアル入出力バッファの内容をクリアし、ポインタを初期化します。
CHECKSUM
CHECKSUMXOR
文字列のチェックサムを計算します。
CONFIG INPUT INPUT命令の、入力終了コードの選択と、そのエコーバック内容を設定します。
CONFIG COMx 機能が拡張されたUART(USART)の、シリアル通信設定を行います。
OPEN シリアルポートなどの、入出力装置のチャンネルを開きます。
CLOSE シリアルポートなどの、入出力装置のチャンネルを閉じます。
SERIN 任意のポートを使用した、ソフトウェアUARTから、シリアル・データを受信します。
SEROUT 任意のポートを使用した、ソフトウェアUARTへ、シリアル・データを送信します。
CONFIG WAITSUART ソフトウェアUARTが最後の送信をした後に、一定時間待機することを指示します。
$TIMEOUT ハードウェア制御のUART0およびUART1で、タイムアウト検出を可能にします。
$SERIALINPUT2LCD シリアルポートへのエコーバック送信の代わりに、LCDへ表示します。
$SERIALINPUT シリアル入力命令で、自作のアセンブラ入力ルーチンを使用するように命じます。
$SERIALINPUT1 第2UART用入力命令で、自作のアセンブラ入力ルーチンを使用します。
$SERIALOUTPUT シリアル出力命令で、自作のアセンブラ出力ルーチンを使用するように命じます。
$SERIALOUTPUT1 第2UART用出力命令で、自作のアセンブラ出力ルーチンを使用します。
CONFIG PRINT UARTをシリアル通信規格のRS-485で使用できるように設定します。



BAUD 一覧へ戻る
プログラム実行中に、シリアルポートの通信速度(ボーレート)を変更します。

書式 Baud = value
Baud #channel , value
注釈
value = ボーレートを数値で設定します。 (数値定数)
channel = 別に開いたチャンネルを利用する場合の、チャンネル番号

参照 $BAUD

 
・$BAUD命令は、初期設定時にボーレートを設定しますが、BAUD命令は、プログラム実行中に
 ボーレートを変えることができます。



BAUD1 一覧へ戻る
プログラム実行中に、第2ハードウェアUARTの通信速度(ボーレート)を変更します。

書式 Baud1 = value
注釈 value = ボーレートを数値で設定します。 (数値定数)

参照 $BAUD1 , BAUD

 
・$BAUD1命令は、初期設定時にボーレートを設定しますが、BAUD1命令は、プログラム実行中に
 ボーレートを変えることができます。
・AVRには、2つのUARTを搭載しているデバイスがあるので、2番目のUARTのボーレートを変更します。
 (Mega161、Mega162、Mega103、Mega128 など)

 △ 動作未確認
 


INPUT 一覧へ戻る
シリアルポートに接続されたキーボード、またはオープンされたファイルから、データを入力します。

書式 Input "prompt" , variable , variable ・・・
Input #channel , variable , variable ・・・
注釈
variable = 入力した数値または文字列を入れる変数名。
"prompt" = 入力を表現するプロンプト文字列。 (オプション)
#channel = 別に開いたチャンネルを利用する場合の、チャンネル番号

参照 PRINT

 
・キーボードから入力する場合は、[Enter]キーが押されるまで、入力を待ち続けます。
 
(例) 2値の足し算
$regfile = "m8535.DAT" ' AVRデバイスを"ATmega8535"に設定。
$crystal = 12800000 ' クロック周波数を12.8MHzに設定。
$baud = 9600 ' ボーレートを9600ボーに設定。
Dim A As Long , B As Long ' 使用する変数を宣言。
Do ' 繰り返しの始まり。
Print : Print "Addition" ' "足し算"のタイトルを表示。
Input "A= " , A , "B= " , B ' 変数AとBに、数値を入力。
A = A + B ' 足し算。
Print "A + B = " ; A ' 結果を表示。
Loop ' 繰り返し処理。
End ' プログラムの終了。



INPUTHEX 一覧へ戻る
シリアルポートに接続されたキーボードから、16進数の数値を入力します。

書式 Inputhex "prompt" , variable , variable ・・・
注釈
variable = 入力した数値を入れる変数名。
"prompt" = 入力を表現するプロンプト文字列。 (オプション)

参照 INPUT

 
・キーボードから入力する場合は、[Enter]キーが押されるまで、入力を待ち続けます。
・変数の型によって、バイト型ならば2文字、ワード型ならば4文字のように、入力が制限されます。
・入力する文字は、0〜9とA〜Fですが、他の文字や記号も入力できてしまいます。
 例えば、"G"ならば16のように、文字ごとに16進数以外の数値が入ってしまいます。
 
(例) 16進数→10進数 変換
$regfile = "m8535.DAT" ' AVRデバイスを"ATmega8535"に設定。
$crystal = 12800000 ' クロック周波数を12.8MHzに設定。
$baud = 9600 ' ボーレートを9600ボーに設定。
Dim A As Word ' 使用する変数を宣言。
Do ' 繰り返しの始まり。
Print : Print "hexadecimal to decimal" ' "16進10進変換"のタイトルを表示。
Inputhex "hexadecimal = " , A ' 変数Aに、16進数を入力。
Print "decimal = " ; A ' 10進変換結果を表示。
Loop ' 繰り返し処理。
End ' プログラムの終了。



INPUTBIN 一覧へ戻る
シリアルポートから、バイト単位のバイナリ・データを読み込みます。

書式 Inputbin variable , variable ・・・
Inputbin #channel , variable , variable ・・・
注釈
variable = シリアルポートから、データを受け取る変数名。
#channel = 別に開いたチャンネルを利用する場合の、チャンネル番号

参照 PRINTBIN

 
・INPUT命令のように、[Enter]キーを待つのではなく、必要なバイト数が満たされると入力を終了します。
・読み込むデータのバイト数は、受け取る変数の型に依存します。
 例えば、バイト型ならば1バイト、ワード型ならば2バイトを受け取るまで入力待ちになります。
・キーボードからの入力は、キーに対応するASCIIコードが変数に入ります。
 
・文字型変数はDim文で宣言した文字数分を受信します。
 
Dim A As String * 5 ' 使用する文字型変数を宣言。
Inputbin A ' 文字変数 A に、5文字が入力されます。
 
・配列には、入力バイト数を指定するオプションが使用できます。
 
Dim B(3) As Byte ' 使用する配列を宣言。
Inputbin B(1) , 3 ' B(1) , B(2) , B(3) に1バイトずつ入力されます。



CONFIG INPUTBIN 一覧へ戻る
INPUTBIN命令の、受信できるパケット容量を増やします。

書式 Config Inputbin = Extended
注釈 なし

参照 CONFIG PRINT , PRINTBIN , INPUTBIN , CONFIG PRINTBIN

 
・初期状態で、INPUTBIN命令が受信できるパケット容量は255バイト以内です。
・これを、最大64KBまで受信できるように拡張します。
 
・大きなパケット容量をサポートするには多くのコードが必要になり、フラッシュを多く消費するため、
 この拡張機能はオプションです。
・通常モードと拡張モードを動的に切り替えることはできません。
・拡張モードを選択した場合は、プログラム・コード内のすべてのPRINTBIN命令にこれが適用されます。



INKEY 一覧へ戻る
シリアル入力バッファに受信された、1つ目のデータをASCIIコードで取り出します。

書式 variable = Inkey()
variable = Inkey(#channel)
注釈
variable = 入力した数値を入れる変数名。
#channel = 別に開いたチャンネルを利用する場合の、チャンネル番号

参照 WAITKEY

 
・INPUT命令のように、[Enter]キーを待たないので、リアルタイムなキー入力ができます。
・入力バッファに、受信データが無い場合は、数値(0)が変数に入ります。
 よって、数値データ(0)を受信する用途には向きません。 (ISCHARWAITING()命令により可能)
 
(例) キー入力チェック
$regfile = "m8535.DAT" ' AVRデバイスを"ATmega8535"に設定。
$crystal = 12800000 ' クロック周波数を12.8MHzに設定。
$baud = 9600 ' ボーレートを9600ボーに設定。
Dim A As Byte ' 使用する変数を宣言。
Keychk: ' キー入力チェックのラベル。
A = Inkey() ' 入力バッファから、データを取り出す。
If A = 0 Then Goto Keychk ' もし、受信データがなければ、入力待ちへ。
Print A ' 入力されたキーコードを表示。
End ' プログラムの終了。



WAITKEY 一覧へ戻る
シリアル入力バッファに、データが受信されるまで待ち、そのデータを変数に入れます。

書式 variable = Waitkey()
variable = Waitkey(#channel)
注釈
variable = 入力した数値を入れる変数名。
#channel = 別に開いたチャンネルを利用する場合の、チャンネル番号

参照 INKEY , INPUTBIN

 
・INKEY命令は、受信データが無い場合に、数値(0)を変数に入れて次の処理に移りますが、
 WAITKEY命令は、数値(0)以外のデータが受信されるまで待ち続けます。
・INPUTBIN命令との違いは、数値(0)を受信できるかできないかです。
 
(例) キー入力待ち
$regfile = "m8535.DAT" ' AVRデバイスを"ATmega8535"に設定。
$crystal = 12800000 ' クロック周波数を12.8MHzに設定。
$baud = 9600 ' ボーレートを9600ボーに設定。
Dim A As Byte ' 使用する変数を宣言。
A = Waitkey() ' 入力バッファへの受信を待ち、データを取り出す。
Print A ' 入力されたキーコードを表示。
End ' プログラムの終了。



ISCHARWAITING 一覧へ戻る
シリアル入力バッファに、受信したデータが「有る」か「無い」かをチェックします。

書式 variable = Ischarwaiting()
variable = Ischarwaiting(#channel)
注釈
variable = 数値で表される、バッファの状態を入れる変数名。 ( 0 または 1 )
#channel = 別に開いたチャンネルを利用する場合の、チャンネル番号

参照 INKEY , WAITKEY

 
・シリアル入力バッファに、受信データが有る場合は(1)、無い場合は(0)が変数に入ります。
・この命令によって、バッファの受信データに影響が出ることはありません。
・INKEY命令による、数値(0)データの受信が可能になります。
 
(例) キー入力チェック
$regfile = "m8535.DAT" ' AVRデバイスを"ATmega8535"に設定。
$crystal = 12800000 ' クロック周波数を12.8MHzに設定。
$baud = 9600 ' ボーレートを9600ボーに設定。
Dim A As Byte , B As Byte ' 使用する変数を宣言。
Keychk: ' キー入力チェックのラベル。
A = Ischarwaiting() ' 入力バッファの状態をチェック。
If A = 0 Then Goto Keychk ' もし、受信データがなければ、入力待ちへ。
B = Inkey() ' 入力バッファから、データを取り出す。
Print B ' 入力されたキーコードを表示。
End ' プログラムの終了。



ECHO 一覧へ戻る
シリアル入力を受け付ける際に、エコーバックを「する」か「しない」かを選択します。

書式 Echo status
注釈
status = On  - エコーバックをします。 (デフォルト)
Off  - エコーバックをしません。

参照 INPUT , INPUTHEX

 
・INPUT命令等の入力では、キーボードから入力された文字が画面へ送り返されるので、入力した
 文字の確認ができますが、パスワードのように画面に表示させたくない場合には、エコーバックを
 オフにします。
・デフォルトでは、エコーバックがオンになっています。
 
・BASCOM-AVRのバージョン1.11.6.2以前では、「Input A Noecho」のように、INPUT命令の
 オプションになっていましたが、新しくECHO命令が追加されました。



PRINT 一覧へ戻る
シリアルポートに接続された画面等、またはオープンされたファイルに、データを出力します。

書式 Print variable ; "character" ・・・
Print #channel , variable ; variable ・・・
注釈
variable = 内容を出力する変数名。
"character" = 文字列。
#channel = 別に開いたチャンネルを利用する場合の、チャンネル番号

参照 SPC

 
・文字列は、ダブルクォーテーションマーク[ " ]で囲います。
・Print命令で、1行に複数の変数や文字列を出力する場合は、セミコロン( ; )で区切ります。
・Print命令実行後には、自動的に復帰(キャリッジ・リターン)と改行(ライン・フィード)が出力されます。
・Print命令行の最後に、セミコロン( ; )を記述した場合は、復帰・改行を出力しません。
 
(例) 2値の足し算
$regfile = "m8535.DAT" ' AVRデバイスを"ATmega8535"に設定。
$crystal = 12800000 ' クロック周波数を12.8MHzに設定。
$baud = 9600 ' ボーレートを9600ボーに設定。
Dim A As Long , B As Long ' 使用する変数を宣言。
Do ' 繰り返しの始まり。
Print : Print "Addition" ' "足し算"のタイトルを表示。
Input "A= " , A , "B= " , B ' 変数AとBに、数値を入力。
A = A + B ' 足し算。
Print "A + B = " ; A ' 結果を表示。
Loop ' 繰り返し処理。
End ' プログラムの終了。



SPC 一覧へ戻る
PRINT命令(LCD命令も同様)で、指定された数のスペースを出力します。

書式 Print Spc(value)
注釈 value = 出力するスペースの数。

参照 PRINT , SPACE

 
・LCD命令でも、同様に使用することができます。
・個数に(0)を入れると、数値のチェックが無いので、255個のスペースが出力されてしまいます。
 
(例)
Print "<" ; Spc(3) ; ">" ' <   > が印刷されます。



PRINTBIN 一覧へ戻る
シリアルポートに、バイト単位のバイナリ・データを出力します。

書式 Printbin variable ; variable ・・・
Printbin #channel , variable ; variable ・・・
注釈
variable = 内容を出力する変数名。
#channel = 別に開いたチャンネルを利用する場合の、チャンネル番号

参照 CONFIG PRINTBIN

 
・Printbinは、Print Chr(variable) と同じです。
・ワード型の変数では2バイト、ロング型の変数では4バイトが出力されます。
・Printbin命令で、複数の変数を出力する場合は、セミコロン( ; )で区切ります。
・Printbin命令では、自動的に復帰(キャリッジ・リターン)と改行(ライン・フィード)は出力されません。
 
・変数が配列の場合には、出力する個数を指定できます。
Printbin A(1) ; 3 ' A(1) , A(2) , A(3)の、3バイトが出力されます。
 
・個数を省略した場合は、宣言した個数全部が出力されます。
Dim B(10) As Byte ' 使用する配列を宣言。
Printbin B(1) ' B(1) 〜 B(10) の、10バイトが出力されます。
 
・配列の出力個数が、255個より多い場合は、「CONFIG PRINTBIN命令」で出力個数を増やす
 必要があります。

※ バージョン2.0.8.2以降では、変数を使用して送信するバイト数を指定できます。
  古いバージョンと互換性のある文法を維持するために、カンマの後にバイト数を記述する必要が
  あります。
  バイト数は、数値定数または整数値のいずれかです。
    Printbin Z , 1 ; Ar(1 , 1) , Q
  この例では、1バイトの変数Zを送信し、その後に変数Ar()からQバイトを送信します。
  (送信バイト数は、変数Qの値によります)



CONFIG PRINTBIN 一覧へ戻る
PRINTBIN命令の、配列出力個数の最大値を増やします。

書式 Config Printbin = Extended
注釈 なし (上記の書式のみです)

参照 PRINTBIN

 
・Printbin命令で、全ての配列を出力する個数の制限は、初期値で255個です。
・CONFIG PRINTBIN命令の実行により、出力個数の制限が無くなります。
・これは、大量の配列を出力するためには、プログラムのコードが大きくなってしまうので、
 オプションになっています。



CONFIG SERIALIN 一覧へ戻る
シリアルデータ受信のために、バッファを使用した割り込み処理を行います。

書式 Config Serialin = Buffered , Size = size
注釈
Serialin = ハードウエアUARTの名前。 (下記に詳細)
size = 受信バッファの容量。 (1〜255) <SRAMを使用します>

参照 CONFIG SERIALOUT , BUFSPACE , CLEAR

 
・高いボーレートで多くのデータが送られた場合に、プログラムが受信の処理に追いつかず、
 受信データを取りこぼす場合があります。
・これを防ぐために、UARTが受信したデータを、割り込みを使用して一時的に受信バッファへ保管し、
 プログラムは随時そのデータを受信バッファから取り出すようにします。
・受信バッファからのデータ取り出しは、通常のINPUTINKEY命令などを使用します。
 
・この命令は割り込みを使用するため、プログラム内に「Enable Interrupts」命令を記述して、
 割り込みを許可してください。

Serialinは、複数のハードウエアUARTを搭載しているチップに対しての名称です。
Serialin 第1UART (UART0)
Serialin1 第2UART (UART1)
Serialin2 第3UART (UART2)
Serialin3 第4UART (UART3)
 
Config Serialin = Buffered , Size = 100 ' バッファを100バイト確保。
Enable Interrupts ' 割り込みを許可。

BYTEMATCH = ALL|BYTE|NONE (オプション)
 受信割り込み発生時に、ユーザーのアセンブラ・ルーチンを使用する場合のオプションです。
ALL 受信したデータ全てで、ユーザールーチンが呼ばれます。
BYTE 特定のデータをチェックする場合に使用します。
NONE このオプションを記載しないのと同じです。
 
CTS = pin , RTS = pin (オプション)
 [CTS]端子、[RST]端子を割り当てる、ポートとピン番号を設定します。
  (例) Config Serialin = Buffered , Size = 100 , Cts = Pind.6 , Rts = Pind.7
 
 相手方に、データを送信してもよい事を通知する場合は"0"になり、バッファがほぼいっぱいになって
 送信を一時中断して欲しいことを通知する場合は"1"になります。

Threshold_full = num , Threshold_empty = num (オプション)
 [Threshold_full]は、相手方へデータの送信を一時中断してもらうために、[RTS]端子を"1"にする
 時のバッファのバイト数です。 (バッファがいっぱいであることを送信側に示すものです)
  (例) Threshold_full = 80 , Threshold_empty = 10
 例えば、高いボーレートでの受信を保証するために、バッファの容量が100バイトの場合、80バイトを
 受け取った後に[RTS]端子が"1"になり、まだ20バイトの余裕があるように、80を設定します。
 
 [Threshold_empty]は、[RTS]を再び"0"にする前に、割り込みとの遅延を考慮して、バッファに
 空いているバイト数が必要となるので、その空きバイト数を設定します。
 例えば、バッファが100バイトの場合、それを10に設定できます。

・[CTS]と[RTS]を使用して動作させるためには、シリアル送信とシリアル受信の両方にバッファを
 使用する割り込み処理が必要です。 (「CONFIG SERIALIN」と「CONFIG SERIALOUT」)

・設定は、「CONFIG SERIALIN」命令でのみ記述が可能です。
 
・[CTS](Clear to Send:送信許可)と[RTS](Request to Send:送信要求)は、ハードウェアを使用した
 フロー制御です。
 (受信側の処理が多忙となり、送信側にデータの送信を一時中断してほしい事を通知する信号処理)
・[CTS]と[RTS]を使用する場合は、送信側と受信側の両方が
 CTS,RTSを使う必要があります。
・当事者の一方がCTS,RTSを使用しない場合は、通信ができ
 ません。
・[CTS]と[RTS]は2本の追加配線が必要で、それらは送受信間
 で互い違いに接続されます。
・BASCOMでは、[CTS]は入力ピンで、[RTS]は出力ピンです。
 
・送信側は、受信側の準備ができているかを調べるために、[CTS]端子を確認しなければなりません。
・送信側は、[CTS]端子が"0"になるのを確認してから、データを送り始めます。
・受信側は、データの受け入れができることを送信側へ知らせるために、[RTS]端子を"0"にします。
・通信を開始する時、[RTS]は受信側により"0"にされます。
 
・受信側はUARTが受信したデータを受信バッファーに格納します。
・そして受信バッファーがいっぱい(受信バッファー内のバイト数がThreshold_fullと同じ)になった時、
 受信側はバッファーがいっぱいであることを送信側に通知するために、[RTS]端子を"1"にします。
・それにより、送信側は[CTS]端子が"1"になった場合、データの送信を一時停止します。
・そして再び受信側が[RTS]端子を"0"にする(送信側の[CTS]端子が"0"になる)と、送信を再開
 します。
 


CONFIG SERIALOUT 一覧へ戻る
シリアルデータ送信のために、バッファを使用した割り込み処理を行います。

書式 Config Serialout = Buffered , Size = size
注釈
Serialout = ハードウエアUARTの名前。 (下記に詳細)
size = 送信バッファの容量。 (1〜255) <SRAMを使用します>

参照 CONFIG SERIALIN , BUFSPACE , CLEAR

 
・低いボーレートで、多くのデータを送る場合に、プログラムは全てのデータを送信し終えるまで、
 次の処理ができなくなります。
 この様な場合に、送信バッファにデータを蓄積し、割り込みにより順次送信させることで、
 プログラムの流れがスムーズになります。
 
PRINT命令などでシリアル出力へ送られるデータは送信バッファへ保管され、UARTの送信割り込み
 により、そのデータが送信バッファから取り出されます。
 
・この命令は割り込みを使用するため、プログラム内に「Enable Interrupts」命令を記述して、
 割り込みを許可してください。

Serialoutは、複数のハードウエアUARTを搭載しているチップに対しての名称です。
Serialout = 第1UART (UART0)
Serialout1 = 第2UART (UART1)
Serialout2 = 第3UART (UART2)
Serialout3 = 第4UART (UART3)
 
Config Serialout = Buffered , Size = 20 ' バッファを20バイト確保。
Enable Interrupts ' 割り込みを許可。

・[CTS]と[RTS]を使用して動作させるためには、シリアル送信とシリアル受信の両方にバッファを
 使用する割り込み処理が必要です。 (「CONFIG SERIALIN」と「CONFIG SERIALOUT」)

・設定は、「CONFIG SERIALIN」命令でのみ記述が可能です。



BUFSPACE 一覧へ戻る
シリアル入出力バッファの、空き容量を調べて変数に入れます。

書式 variable = Bufspace(number)
注釈
variable = バッファの空き容量を入れる変数名。 (ワード型またはインテジャー型)
number = バッファを識別する番号。 (0〜3) (下記に詳細)

参照 CONFIG SERIALIN , CONFIG SERIALOUT , CLEAR

 
・バッファの識別番号は下記の通りです。
0 = 第1UARTの出力バッファ
1 = 第1UARTの入力バッファ
2 = 第2UARTの出力バッファ
3 = 第2UARTの入力バッファ

 △ 動作未確認
 


CLEAR 一覧へ戻る
シリアル入出力バッファの内容をクリアし、ポインタを初期化します。

書式 Clear name
注釈 name = 初期化するバッファの名前。 (下記に詳細)

参照 CONFIG SERIALIN , CONFIG SERIALOUT , BUFSPACE

 
・バッファの名前は下記の通りです。
Serialin = 第1UARTの入力バッファ
Serialout = 第1UARTの出力バッファ
Serialin1 = 第2UARTの入力バッファ
Serialout1 = 第2UARTの出力バッファ
Serialin2 = 第3UARTの入力バッファ
Serialout2 = 第3UARTの出力バッファ
Serialin3 = 第4UARTの入力バッファ
Serialout3 = 第4UARTの出力バッファ



CHECKSUM CHECKSUMXOR 一覧へ戻る
文字列のチェックサムを計算します。

書式 Print Checksum(variable)
Csum = Checksum(variable)
Csum = Checksumxor(variable)
注釈 variable = チェックサムを計算したい文字列が入った文字変数。
Csum = チェックサムの結果が入る数値変数。

参照 CRC8 , CRC16 , CRC32 , CRC16UNI , CRCMB

 
・Checksumは、文字列変数内のすべてのバイト値を合計して計算されます。
・Checksumxorは、文字列変数内のすべてのバイト値を[Xor]演算することによって計算されます。
・チェックサムはバイト単位の検査合計で、シリアル通信でよく使用されます。
 
(例)
Dim Var As String * 5 ' チェックサムを計算したい文字列を宣言する。
Var = "12345" ' チェックサムを計算したい文字列。
Print Checksum(var) ' 255が出力されます。
' &H31+&H32+&H33+&H34+&H35 = &HFF (255)



CONFIG INPUT 一覧へ戻る
INPUT命令の、入力終了[Enter]に対するコードの選択と、そのエコーバック内容を設定します。

書式 Config Input = term , Echo = echo
注釈
term = CR  −復帰(キャリッジ・リターン) (デフォルト)
LF  −改行(ラインフィード)
CRLF  −キャリッジ・リターンに、ラインフィードが続きます。
LFCR  −ラインフィードに、キャリッジ・リターンが続きます。
echo = CR  −復帰(キャリッジ・リターン)
LF  −改行(ラインフィード)
CRLF  −キャリッジ・リターンに、ラインフィードが続きます。 (デフォルト)
LFCR  −ラインフィードに、キャリッジ・リターンが続きます。

参照 INPUT

 
termは、INPUT命令に対する入力が終了し、[Enter]キーが押された場合、キーボードから
 どのようなコードが送られてくるかに合わせて選択します。
・ほとんどの場合、[Enter]キーが押されると、[CR]キャリッジ・リターン(ASCIIコード 13)が送られて
 きます。
 
echoは、INPUT命令が入力終了を受け付けたとき、ターミナルにどのようなコードを送り返すかを
 設定します。
・デフォルトでは、[CRLF]キャリッジ・リターン+ラインフィードが送り返されます。



CONFIG COMx 一覧へ戻る
機能が拡張されたUART(USART)を搭載しているチップの、シリアル通信設定を行います。

書式 Config Comx = baud , Synchrone = sync , Parity = pari , Stopbits = stb
, Databits = dtb , Clockpol = ckp
注釈
x = ハードウエアUARTの番号。 ( 1 , 2 , 3 , 4 )
baud = ボーレートを数値で設定します。 (数値定数)
($baud命令の設定値を残すには、「dummy」文字を使用して下さい。)
sync = 0  −非同期動作(デフォルト)
1  −同期動作
pari = None  −パリティなし
disabled  −パリティ無効
even  −偶数パリティ
odd  −奇数パリティ
stb = ストップビット ( 1 または 2 ) (数値定数)
dtb = データビット数 ( 4 , 5 , 6 , 7 , 8 , 9 ) (数値定数)
ckp = 0  −クロック極性 送信立ち上がり、受信立ち下がり
1  −クロック極性 送信立ち下がり、受信立ち上がり

参照 OPEN , CLOSE

 
・ハードウェアUARTを2つ以上搭載したチップの設定。
Config Com2 = 9600 , Parity = None , Stopbits = 1 , Databits = 8 ' 第2UARTの設定。
Open "com2:" For Binary As #2 ' チャンネルを開く。


Xmegaチップの場合。
 ※ 後日追記予定。

Xtinyチップの場合。
 ※ 後日追記予定。



OPEN 一覧へ戻る
シリアルポートなどの、入出力装置のチャンネルを開きます。

書式 Open "device" For mode As #channel
注釈
"device" = "COMpin : baud , dtb , pari , stb , [INVERTED]"
 
pin = ・ハードウェアUARTでは、"com1"〜"com4"。
・ソフトウェアUARTでは、ポートピンの名前。
 (PORTD bit1 ならば D.1)
baud = ボーレートを数値で設定します。
dtb = データビット数 ( 7 または 8 )
pari =  ( N = NONE , E = EVEN , O = ODD )
stb = ストップビット ( 1 または 2 )
[INVERTED] = 入出力の論理を反転します。 (オプション)
mode = Input  −入力に設定。
Output  −出力に設定。
Binary  −入出力に設定。 (ソフトウェアUARTには使用不可)
Random  −(用途不明)
Append  −AVR-DOSファイル用
channel = 開くチャンネル番号。 (1〜)

参照 CLOSE

 
・COM1は標準の装置なので、INPUT・OUTPUTモードで使用する限り、OPENする必要はありません。
・OPENされたUARTで使用できる命令は、PRINT、INPUT、INPUTHEX、INKEY、WAITKEYです。
・ソフトウェアUARTでは、INPUT命令のエコーバックはありません。
 
Open "comB.0:9600,8,N,1" For Output As #1 ' ソフトウェアUART出力を[PB0]に開く。
Print #1 , "ABC123" ' "ABC123"を送信する。

・ハードウェアUARTを2つ以上搭載したチップの設定。
Config Com2 = 9600 , Parity = None , Stopbits = 1 , Databits = 8 ' 第2UARTの設定。
Open "com2:" For Binary As #2 ' チャンネルを開く。
Print #2 , "ABC123" ' 出力。
Temp1 = Inkey(#2) ' 入力。



CLOSE 一覧へ戻る
シリアルポートなどの、入出力装置のチャンネルを閉じます。

書式 Close #channel
注釈 channel = 閉じるチャンネル番号。 (1〜)

参照 OPEN

 
・開かれたチャンネルは、必ず同じ番号で閉じられなければなりません。
・CLOSE命令は、プログラムの最後に記述します。



SERIN
SEROUT
一覧へ戻る
任意のポートを使用した、動的なソフトウェアUARTから、シリアル・データを送受信します。

書式 Serin variable , value , port , pin , baud , pari , dtb , stb
Serout variable , value , port , pin , baud , pari , dtb , stb
注釈
variable = データを送る または 受け取る変数名。
value = データのバイト数。
port = 使用するポートの名前。 (PORTAならば A )
pin = 使用するピン番号。 ( 0 〜 7 )
baud = ボーレート。 (例えば 9600 )
pari = パリティー ビット。  ( 0 = NONE , 1 = EVEN , 2 = ODD )
dtb = データ・ビット数。 ( 7 または 8 )
stb = ストップビット数。 ( 1 または 2 )

参照 OPEN , CLOSE

 
・ソフトウェアUARTは、OPENとCLOSE命令文により使用することもできますが、これは送信と受信の
 ために、別々のポートピンを必要とします。
・また、一度OPENされた接続機器は、通信設定を変えることができません。
 
SERINSEROUT命令では、同一のポートピンを使用して送受信を行うことや、通信ごとに
 パラメータを変更することも可能です。
・しかし、自由度が広い分、コンパイル後のコードサイズは大きくなってしまいます。
・また、ソフトウェアによる送受信のため、割り込みによる遅延が発生しますので、使用中は
 割り込みを禁止する必要があります。



CONFIG WAITSUART 一覧へ戻る
ソフトウェアUARTが最後のデータを送信した後に、一定時間待機することを指示します。

書式 Config Waitsuart = value
注釈
value = 待ち時間をmS単位で設定する。 (1〜255)

参照 OPEN , SERIN , SEROUT

 
・ソフトウェアUARTルーチンをシリアルLCDディスプレイと組み合わせて使用する場合、ディスプレイが
 データの処理を終えるまで待機するように遅延時間を設定すると便利です。



CONFIG PRINT 一覧へ戻る
UARTをシリアル通信規格のRS-485で使用できるように設定します。

書式 Config Printx = port , Mode = mode
注釈
x = シリアルポートの番号。 (0〜7) (下記に詳細)
port = RS-485ドライバーの送受信方向を制御するために使用するピンの名前。
mode = RS-485ドライバーの送受信方向を指定する。(Set:[H]、Reset:[L])

参照 CONFIG PRINTBIN

 
・最初のシリアル・ポートにはPRINT または PRINT0を使用します。
・2番目のシリアル・ポートにはPRINT1、3番目にはPRINT2、4番目にはPRINT3を使用します。
 
・RS-485の半二重通信を使用する場合は、データの方向を切り替えるピンが必要です。
portは、RS-485ドライバーの送受信方向を制御するために使用されるポートピンの名前を指定
 します。(例えばPORTB.1)
※ 方向制御に使用するポートピンは、ユーザーが出力ポートに設定しておいて下さい。
 
・CONFIG PRINT命令は、手動で行っていた送受信の切り替えを自動化します。
・まず、BASCOMのPRINT命令でデータを出力する前に、指定した送受信制御ピンのロジックレベルを
 SET:[H] または RESET:[L]にします。
・そして、PRINT命令でデータが送信された後に、ピンが自動で反転されて受信モードになります。
 
・CONFIG PRINT命令を使用した場合、PRINTおよびPRINTBIN命令の前に方向制御ピンのロジック
 レベルが切り替えられてからデータを送信し、すべてのデータが送信されるまで待機してからピンの
 論理レベルが元に戻されます。
 
・RS485通信用の一般的なライン・ドライバーはMAX485ですが、ほとんどのドライバーチップは同じ
 ような機能を持っています。
・ドライバーは通常[/RE]ピンを持っており、これを[L]にして受信部を有効にする必要があります。
・また、ドライバーのDEピンは、[H]にするとドライバーの出力が有効になります。
・このDEピンの入力は反転されていませんので、ドライバー出力を有効にするには[H]にする必要が
 あります。
 
・MAX485を半二重モードでマスターとして使用する場合は、方向制御用のポートピンを[DE]ピンに
 接続します。
・また、出力するためにはドライバーをSET:[H]にする必要があるため、CONFIG PRINTのmode
 SETを使用します。
 
※ CONFIG PRINTは、割り込みを使用したバッファー付きのシリアル出力では動作しません。
※ CONFIG PRINTはダイナミックなXmega UARTS(BUART)では動作しません。
※ PRINTBIN #1 のようなXmegaの定数チャンネルを使用する必要があります。






   電子工作の部屋 Top へ 前のページへ戻る