PIC−USBIO using BASIC
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
USBインターフェースを内蔵したPICを使ってWindowsパソコンで外部回路を制御するための各種I/O基板の製作記事です。
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
[第186回]
●PICUSBIO用BASIC説明書(1)BASICの文法
何日か間があいてしまいました。
やっとのことで販売開始の記事まではUPしたのですが、これから後の作業を考えると頭が痛くなりそうです。
まず第一にBASICの説明書をどうするか、それが一番頭の痛い問題です。
BASICについては過去記事で説明はしてきましたが順序とか項目別とかというまとまりからは離れてもっぱらそのときにPICUSBIOボードのテストに必要なBASIC機能についてそこで説明する、という書き方でした。
それを読んで理解してください、というわけにもいきませんでしょう。
かといってそれを最初から整理しながら書くというのも大変な作業です。
どうしようか悩んでいたのですが、いつまで悩んでいても始まりません。
とにかく覚悟を決めて書き始めることにしました。
どうせ書くなら今までと同じようにホームページに記事のかたちで書けば皆様方に少しずつ読んでいただくことができます。
書きやすいところから少しずつ書いていくつもりです。
今回はその第1回目です。
PICUSBIO用BASICインタプリタ説明書(1)
以下の説明では「PICUSBIO用BASICインタプリタ」を「BASIC」と表記します。
3章 BASICの文法
1. 動作モード
BASICインタプリタの動作にはコマンドモードとプログラム実行モードの二通りがあります。
コマンドモードでは命令を直接実行したりプログラムの編集を行います。
プログラム実行モードではあらかじめ作成した一連のステートメントを自動実行します。
1.1 コマンドモード
>(プロンプトマーク)が表示されカーソルマーク _ が表示されている時(つまり普通のキー入力待ちの時)がコマンドモードで、このときに命令を入力するとただちに実行されます。
例えば下のようにPRINT命令に続いて計算式を実行するとただちに実行されてその演算結果が表示されます。
>PRINT 2+3−7[Enter]
−2 計算結果がすぐに表示される。
> 再び、次の入力待ちとなる。
コマンドを実行する以外にもうひとつ機能があります
それはプログラムの作成、編集です。
プログラムは行番号をつけたステートメント(命令文)の集まったものです。
命令に行番号をつけて入力すると上のようにすぐに実行されるのではなくてそのかわりにユーザーズエリア(TEXTエリアとも言います)内にプログラムとして記憶されます。
つまりこのモードはコマンドモードであると同時にプログラム作成モードであるとも言えます。
1.2 プログラム実行モード(RUNモード)
このモードは表記のように別名RUNモードといいRUN[Enter]と入力するとこのモードになりTEXTエリアにあるBASICプログラムをインタプリタが順に解読しながら自動的に実行します。(もしTEXTエリア内にプログラムが無い場合には、すぐにコマンドモードに戻りますが、別にエラーメッセージは表示されません)
2. BASICプログラムの構造
BASICプログラムは1以上の行からなっており、行には命令実行のための文が1つ以上含まれています。
2.1 行
行は行番号と文で構成されます。
1行の長さは最大80バイトです。
行番号は1つだけ必要ですが、文は1つの行に複数個記述することができます。
文と文との区切には:(コロン)を使います。
2.2 行番号
1〜32767の範囲の符号無し整数を使用します。
RUNコマンドでプログラムを実行させると一部の命令を除いて原則的にはこの行番号の順に実行されます。
行番号はあとからの追加修正を容易にするために10番飛び位で記述するのが便利です。
2.3 文(ステートメント)
文はBASICインタプリタが実行する場合の命令実行単位で1つの行に複数記述することも許されます(マルチステートメント)。
この場合は前述のように、:(コロン)で区切ります。
10 A=A+1:PRINT A:GOTO 30
↑ ↑ ↑ ↑
行番号 文 文 文
3. BASIC文の構成要素
BASIC文は命令語だけではなく、変数、定数、演算子等様々な構成要素によって成り立っています。
3.1 コマンド
コマンドモードでのみ実行可能でRUNモードでは実行不可能です(行番号をつけてBASICプログラムの中で使うことはできません)。
BASICのプログラムを作成したり修正したりまたはディスクに保存したりするときに使用します。
コマンドには次のものがあります。
AUTO、CONT、DELETE、LIST、/LOAD、NEW、REN、RUN、/SAVE
これらのコマンドの詳細については、次の章で説明します。
3.2 コマンド以外の命令
一般にRUNモードのもとで実行される命令です。
コマンドモードでも実行可能ですが、実行しても意味のないもの(REM、STOP)や、マルチステートメント以外では正しく実行されないものもあります(FOR〜NEXTなど)。
CLOSE、DATA、DIM、EOF、FOR…NEXT、GOSUB〜RETURN、GOTO、IF…THEN、INPUT、LET、ON ERROR GOTO、OUT、PICOUT、PRINT、READ、RDATA、REM、RESTORE、RESUME、RETURN、ROPEN、STOP、WDATA、WOPEN
3.3 関数
BASICでは下記の関数を使用することができます。
AND、ASC、BI$、CHR$、HEX$、IN、INKEY$、INPUT$、INSTR、LEFT$、LEN、MID$、OR、PICIN、RIGHT$、SPACE$、SPC、STR$、VAL、XOR
3.4 システム変数・システム定数
一般の変数はその値をユーザーが定義しますがこれとは逆にシステムが値を与えてユーザーはそれを利用することはできるが、ユーザーが勝手に値を与えることはできない特殊な変数、定数です。
ERL、ERR、DATE$、TIME$
3.5 定数
BASICで扱う数には、ある特定の値を示す「定数」と、値が可変な「変数」及び「配列」があります。
ここではまずその「定数」について説明します。
3.5.1 十進定数
BASICで扱う十進定数は2147483647 〜−2147483648の範囲にある整数です。
そのほか有効桁数6桁の実数も扱えますがこれについては現在評価中です。
表現形式は@整数型、A固定小数点型の2通りがあります。
各々の例を下に示します。
@整数型
123456 −365
A固定小数点型
123.45 −0.00135
3.5.2 16進定数
BASICではI/Oポートの操作に便利なように2桁の16進定数が扱えるようにしてあります。(2桁以外は扱えません)
16進定数は10進数と区別するために、$マークをつけて表します。
16進定数は式の中で使用することもできます。
[例]
A=$FF
B=C*K+$B0
3.5.3 文字定数
文字定数はPRINT文等で文字列を表示したり、文字変数に値を代入するのに使用します。
文字定数は、” ”(クォーテーションマーク)ではさんで表示します。
文字定数は文字変数に代入する場合には39桁を越えるとエラーになります。
” ”(クォーテーションマーク)の中には、英大文字、英小文字、数字、記号が使用できます。
[注記]
クォーテーションマーク(”)をデータとして用いたい時には、CHR$($22)を使います。
[使用例]
>10 PRINT "ABCDE"
>20 PRINT CHR$($22);"abcde";CHR$($22)
>RUN
ABCDE
"abcde"
3.6 変数
変数にはその取りうる値によって、実数型、整数型及び文字型の区別があります。
どの型の変数も最初の1文字がA〜Zで始まる、1〜13桁の英数字で表された変数名を使用しますが、実数型は最終桁に!をつけ、文字型は$をつけて区別します。
この場合、変数ABCとABC!、ABC$はそれぞれ別の変数として扱われます。
いずれの変数も、BASICの命令、関数、システム変数と同じ並びの名前は使用できません。
3.6.1 文字型変数
最初の1文字がA〜Zで始まる、1〜12桁の英数字に続けて$をつけて表します。
各変数に代入できる文字列の長さは最大39桁です。
文字型変数に値を代入する場合の右辺は、文字型定数、文字型変数、または文字型関数でなければエラーになります。
10 A$="abcABC"
20 B$=A$
30 C$=CHR$($41)
などの書き方をします。また文字型定数、文字型変数、文字型関数を+でつないで、
40 D$=A$+"XYZ"+C$
のように使うこともできます。
この場合に左辺の変数には右辺の文字列を順につないだものが代入されます。
右辺の文字列の桁数の合計が39を越えるとエラーになります。
3.7 配列
配列は整数型のみです。
名前も変数と同じように1〜13桁の英数字でその後ろに( )をつけて要素を特定します。
最大3次まで使用でき、( )内の数値(添字)は0及び正の整数です。
配列はDIM文により使用する範囲を定義しておく必要があります。
配列と変数で同じ名前を使用することはできません。
例えば変数でABCを使っていて、配列でABC(1,2)のように使うことはできません。
3.8 式
式には算術式と関係式及び論理式があり、算術式は一般の数値演算に用いられ、関係式、論理式は主にIF文の中で用いられます。
3.8.1 算術式
算術式は数値定数、数値変数、数値配列及び数値関数を算術演算子及び( )カッコでつないだもので、演算の優先順位は一般の数学における計算と同じですが代数式のように乗算記号を省略することはできません。
算術演算子を優先順位の高いものから順に並べると次のようになります。
@*(乗算)及び/(除算)A+(加算)及び−(減算)
( )がある場合は( )内の計算が優先されます。
( )の多重使用に制限はありません。
なお、特に除算を含む計算式の場合は表現を考える必要があります。
次の例を参考にして下さい。
K
(代数表現) ――――×(C+D)
A(B+C)
(算術式表現) K/(A*(B+C))*(C+D)
これを下のように書くと正しい結果は得られません。注意して下さい。
K/A*(B+C)*(C+D)
なお文字型の定数、変数、関数に対しても+記号のみを使用してつなぐことができます(「3.6.1 文字型変数」参照)。
3.8.2 関係式
関係式は2つの要素(変数、定数、配列、関数またはこれらを組合わせた式)を関係演算子でつないだもので、ふつうはIF文の中で用いられ、2つの値の比較の結果により真又は偽の値をとります。真のときは1、偽のときは0の値をもちます。
関係演算子 使用例 意味、その値
> A>B A>Bのとき真(1)、それ以外偽(0)
< A<B A<B 〃 〃 〃 〃
>= A>=B A≧B 〃 〃 〃 〃
<= A<=B A≦B 〃 〃 〃 〃
= A=B A=B 〃 〃 〃 〃
# A#B A≠B 〃 〃 〃 〃
[使用例]
10 IF A>0 GOTO 30
20 IF ABC<=XYZ+100 print "y"
文字型の変数、定数、関数などの比較も同じようにできます。
文字型の場合には桁数が大きい方が大となり、同じ桁数なら始めの桁からひと桁ずつ各桁の文字のキャラクタコードを比較していって、はじめに大きいコードが出てきた方が大になります(キャラクタコードについては23章を参照して下さい)。
全く同じ文字の並びで桁数も同じ場合には、その値は等しいことになります。
3.9 ラベル名
BASICでは行位置を示すマークとしてラベル名を使用することができます。
ラベル名は先頭に*マークをつけた最大13桁の英数字で表します。
GOTO文、GOSUB文の行番号の代わりにラベル名を書くことによってそのラベルの置かれている行へジャンプすることができます。
ラベル名は行番号のすぐ次の位置、つまり行の一番先頭に書かなければいけません。
[使用例]
30 *TASU :A=B+C:PRINT A:STOP
10 A=1:*ABC:N=N+1 というように行の途中に置くことは許されません。
上の例ではマルチステートメントになっていますが次のようにラベル名だけを書くこともできます。
30 *TASU
35 A=B+C:PRINT A:STOP
変数名とラベル名の*から後ろの部分とが同じつづりであっても構いません。
PIC−USBIO using BASIC[第186回]
2023.2.20upload
前へ
次へ
ホームページトップへ戻る