1. 定数リファレンス

Tiny BASIC for Arduino STM32」では定義済の定数が利用出来ます。
定数はコマンドの引数や式の中で数値関数と同等に利用出来ます。

1.1. HIGH,LOW 1ビット入出力値

HIGHLOW

デジタル入出力のロジックレベルを表す定数です。
値は次の通りです。

定数

概要

LOW

0

0V、ロジック  LOW

HIGH

1

3.3V、ロジック HIGH

GPIO入出力コマンド(INOUT など)の引数や IF 文の条件式などに利用出来ます。

1.2. ON,OFF定数

ONOFF

2値の状態を表す手数です。
値は次の通りです。

定数

OFF

0

ON

1

各コマンドの引数、IF 文、式にて利用出来ます。

1.3. メモリ領域先頭アドレス定数

VRAMVARARRAYPRGMEMFNTGRAM

データ領域を参照するための定数です。
各定数の詳細は次の通りです。

定数名

領域サイズ

用途

VRAM

$0000

(可変)
最大6,400

スクリーン表示用メモリ(CW×CH)

VAR

$1000

440

変数領域(A~Z, A0~Z6)+ 4バイト

ARRAY

$1240

200

配列変数領域(@(0)~@(99) )

PRG

$1340

4,096

プログラム領域

MEM

$2340

1,024

ユーザーワーク領域

FNT

$2740

(可変)
最大2,048

フォント256文字(フラッシュメモリ)

GRAM

$2F40

(最大)
可変6,048

グラフィック表示用メモリ

定数値のアドレスは仮想的なアドレスです。実アドレスとは異なります。
PEEKPOKEI2CWI2CRBITMAPLDBMPGETS 等の仮想メモリ領域を利用するコマンドで利用できます。

1.4. CW,CH,GW,GH 画面表示の定数

CWCHGWGH

画面サイズを参照する定数です。
定数の値は、利用するデバイス画面、画面関連の設定により異なります。

定数

概要

CW

キャラクタ画面の横文字数

CH

キャラクタ画面の縦行数

GW

グラフィック画面の横ドット数

GH

グラフィック画面の縦ドット数

1.5. UP,DOWN,RIGHT,LEFT 方向を示す定数

UPDOWNRIGHTLEFT

CSCROLLGSCROLL コマンドでスクロール方向を指定に利用出来ます。

定数

UP

0

DOWN

1

RIGHT

2

LEFT

3

1.6. PAn,PBn,PCn ピン番号定数

PA n、PB n 、 PC n (nは数値)

各ピン番号定数に実際のピン番号0 ~ 34が割り当てられています。

GPIOOUTINANASHIFTOUTSHIFTIN 等の
コマンド・関数のピン番号の指定に利用します。

利用可能なピン番号定数

PA0PA1PA2PA3PA4PA5PA6PA7PA8
PA9PA10PA11PA12PA13PA14PA15
PB0PB1PB2PB3PB4PB5PB6PB7PB8
PB9PB10PB11PB12PB13PB14PB15
PC13PC14PC15

ピン番号定数と値の対応は次の通りです。
PA0PA15 :0 ~ 15 に対応
PB0PB15 :16 ~ 31 に対応
PC13PC15 :32 ~ 34 に対応

1.7. GPIOモード設定定数

OUTPUT_ODOUTPUTINPUT_PUINPUT_PDANALOGINPUT_FL

GPIO コマンドのモード設定を行うための定数です。

定数

概要

OUTPUT

0

デジタル出力

OUTPUT_OD

1

デジタル出力(オープンドレイン)

INPUT_FL

2

デジタル入力(フロート状態:ArduinoのINPUT指定と同じ)

ANALOG

3

アナログ入力

INPUT_PU

4

デジタル入力(内部プルアップ抵抗有効)

INPUT_PD

5

デジタル(内部プルダウン抵抗有効)

PWM

7

PWM出力

1.8. LSB,MSB ビット方向定数

LSBMSB

ビット送受信等で上位、下位を指定するための定数です。

SHIFTOUTSHIFTIN コマンドで利用します。

定数

概要

LSB

0

下位ビットから送受信

MSB

1

上位ビットから送受信

2. コマンド概要

2.1. 制御命令

プログラムは通常、先頭行から行番号順に実行されます。
ここに示す制御命令を用いることでプログラムの実行の条件分岐、繰り返し、終了の制御を行うことが出来ます。

以下に制御命令の一覧を示します。

制御命令・書式

概要

GOTO 行番号
GOTO "ラベル"

指定行にジャンプ

GOSUB 行番号
GOSUB "ラベル"

サブルーチンの呼び出し

RETURN

サブルーチンからの復帰

IF 条件式 真の場合の実行文
IF 条件式 真の場合の実行文 ELSE 偽の場合の実行文

条件判定を行う

FOR 変数 = 初期値 TO 最終値 [STEP 増分]
 <繰り返し実行文(複数行可能)>
NEXT 変数

処理の繰り返し

END

プログラムの終了

各制御命令の詳細についれは、それぞれの命令文のコマンドリファレンスを参照してください。

2.2. プログラム作成・保存・環境設定

プログラムの作成、編集、保存、読み込み、環境設定に関連するコマンドです。

以下に制御命令の一覧を示します。

コマンド・書式

概要

REM コメント
' コメント

コメント

RUN

プログラムの実行

LRUN プログラム番号
LRUN プログラム番号 ,行番号
LRUN プログラム番号 ,"ラベル"
LRUN "ファイル名"
LRUN "ファイル名" ,行番号
LRUN "ファイル名" ,"ラベル"

指定プログラム番号の実行

LIST
LIST 表示開始行番号
LIST 表示開始行番号, 表示終了行番号

プログラムリストの表示

RENUM
RENUM 開始行番号
RENUM 開始行番号, 増分

行番号の振り直し

NEW

プログラムの消去

DELETE 行番号
DELETE 先頭行番号, 末尾行番号

プログラムの指定行削除

FREE( )

プログラム領域残量取得

SAVE
SAVE プログラム番号
SAVE "ファイル名"
SAVE "ファイル名", 保存形式

プログラムの保存

LOAD
LOAD プログラム番号
LOAD "ファイル名"
LOAD "ファイル名", モード

プログラムの読み込み

FILES
FILES 開始プログラム番号
FILES 開始プログラム番号, 終了プログラム番号
FILES "ファイルパス"

プログラム一覧表示

CONFIG 項目番号, 設定値 [,設定値2, 設定値3]

システム環境設定

SAVECONFIG

システム環境設定の保存

CONSOLE モード

コンソール画面切替

CLV

変数領域の初期化

ERASE プログラム番号
ERASE 開始プログラム番号 , 終了プログラム番号

フラッシュメモリのプログラム削除

EXPORT
EXPORT 対象番号
EXPORT 開始番号 , 終了番号

フラッシュメモリの内容のエクスポート

WIDTH 横文字数, 縦文字数

シリアルコンソール画面サイズ設定

各制御命令の詳細についれは、それぞれの命令文のコマンドリファレンスを参照してください。

2.3. スクリーン画面表示入出力

スクリーン画面へのテキスト表示、入力、表示制御を行うコマンド及び関数です。

以下にコマンド・関数の一覧を示します。

コマンド・書式

概要

ATTR 属性

文字表示属性の設定

CLS
CLS 消去対象画面

画面表示内容の全消去

COLOR 文字色
COLOR 文字色, 背景色

文字色の設定

GETS ( 文字列格納先仮想アドレス [ ,有効文字列長 ] )

文字列の入力

INKEY( )

入力文字コード取得

INPUT 変数
INPUT 変数,オーバーフロー時の既定値
INPUT プロンプト, 変数
INPUT プロンプト, 変数, オーバーフロー時の既定値

数値の入力

LOCATE 横位置, 縦位置

カーソルの移動

PRINT
PRINT 文字列 | 数値
PRINT 文字列 | 数値 ;
PRINT 文字列 | 数値 ; 文字列 | 数値 ;
PRINT 文字列 | 数値 ; 文字列 | 数値 ;;
PRINT # 桁数,文字列 | 数値 ; 文字列 | 数値 ;… ;

… は可変指定を示す
‘;’ は連結・改行抑制指定(オプション)、カンマ ‘,’ も可能

文字列表示

REDRAW

画面表示の再表示

VPEEK (横位置 , 縦位置)

指定位置の文字コード参照

2.4. 数値・文字列関数

スクリーン画面へのテキスト表示、入力、表示制御を行うコマンド及び関数です。

以下にコマンド・関数の一覧を示します。

関数・書式

概要

LET 変数 = 値
LET 配列変数 = 値, 値, 値, 値...
変数 = 値
配列変数 = 値, 値, 値, 値...

LET は省略可能

変数への値代入

ABS (値)

絶対値の取得

RND (値)

乱数の発生

MAP (値 , 範囲下限 , 範囲上限 , 新範囲下限 , 新範囲上限)

数値のスケール変換

ASC (文字列)
ASC (文字列 , 文字位置)
ASC (変数)
ASC (変数 , 文字位置)

文字コード変換

BIN$ (数値)
BIN$ (数値 , 桁数)

整数の2進数文字列変換

HEX$ (数値)
HEX$ (数値 , 桁数)

整数の16進数文字列変換

CHR$ (文字コード)
CHR$ (文字コード, 文字コード, … , 文字コード)

文字コードから文字への変換

STR$ (変数)
STR$ (変数,先頭位置,長さ)
STR$ (文字列)
STR$ (文字列,先頭位置,長さ)

文字列参照・文字列の切り出し

DMP$ (数値)
DMP$ (数値 , 小数点桁数)
DMP$ (数値 , 小数点桁数 , 整数部桁数)

整数小数付き文字列変換

BYTE (変数)
BYTE (文字列)

文字列のバイト数の取得

LEN (変数)
LEN (文字列)

文字列の長さの取得

2.5. 仮想メモリー参照

仮想メモリの参照、書き込みを行うコマンド・関数です。

以下にコマンド・関数の一覧を示します。

コマンド・書式

概要

PEEK (仮想アドレス)

指定アドレスの値参照

POKE 仮想アドレス , データ
POKE 仮想アドレス , データ , データ , … ,データ(可変個数指定)

指定アドレスへのデータ書き込み

2.6. 時間

時間、経過時間関連のコマンド・関数です。

以下にコマンド・関数の一覧を示します。

コマンド・書式

概要

WAIT 待ち時間(ミリ秒)

時間待ち

TICK ()
TICK (モード)

経過時間取得

CLT

経過時間カウントのリセット

DATE

現在時刻の表示

GETDATE 年格納変数, 月格納変数, 日格納変数, 曜日格納変数

日付の取得

GETTIME 時格納変数 , 分格納変数 , 秒格納変数

時刻の取得

SETDATE 年,月,日,時,分,秒

時刻の設定

2.7. GPIO I/O入出力

GPIOポートを使った入出力を行うためのコマンド・関数です。

以下にコマンド・関数の一覧を示します。

コマンド・書式

概要

GPIO ピン番号, モード

GPIO機能設定

OUT ピン番号, 出力値

デジタル出力

IN (ピン番号)

デジタル入力

ANA (ピン番号)

アナログ入力

POUT ピン番号, デューティー値
POUT ピン番号, デューティー値, 周波数

PWM出力

SHIFTOUT データピン番号, クロックピン番号, 出力形式, 出力データ

デジタルシフトアウト出力

SHIFTIN (データピン番号, クロックピン番号, 入力形式)
SHIFTIN (データピン番号, クロックピン番号, 入力形式, 条件)

デジタルシフトアウト入力

PULSEIN (パルス入力ピン番号 , 検出信号 , タイムアウト )
PULSEIN (パルス入力ピン番号 , 検出信号 , タイムアウト , スケール値 )

入力パルス幅の計測力

I2CR (デバイスアドレス, コマンドアドレス, コマンド長, 受信データアドレス, データ長)

I2Cデータ受信

I2CW (デバイスアドレス, コマンドアドレス, コマンド長, データアドレス, データ長)

I2Cデータ送信

2.8. サウンド

サウンド出力を行うためのコマンド・関数です。

以下にコマンド・関数の一覧を示します。

コマンド・書式

概要

TONE 周波数
TONE 周波数, 出力期間

単音出力

NOTONE

単音出力停止

PLAY "MML文"

音楽演奏(MML文)

TEMPO テンポ

音楽演奏のテンポの設定

2.9. ファイル操作

SDカードのファイルを操作するコマンド・関数です。

以下にコマンド・関数の一覧を示します。

コマンド・書式

概要

BLOAD "ファイル名" , アドレス, バイト数

SDカードからバイナリデータ読込

BSAVE "ファイル名" ,アドレス ,バイト数

SDカードへのバイナリデータ保存

LDBMP "ファイル名",仮想アドレス,bx,by, 幅, 高さ[,色指定]

ビットマップファイルの読み込み

CAT "ファイル名"

ファイルの内容表示

REMOVE "ファイル名"

ファイルの削除

MKDIR "ディレクトリ名"

ディレクトリの作成

RMDIR "ディレクトリ名"

ディレクトリの削除

2.10. グラフィック・デバイス画面表示

グラフィック・デバイス画面表示関連のコマンド・関数です。

以下にコマンド・関数の一覧を示します。

コマンド・書式

概要

SCREEN モード [,画面向き]

スクリーンモードの設定

PSET 横座標, 縦座標, 色

点の描画

LINE 横座標1, 縦座標1, 横座標2, 縦座標2,色

直線の描画

RECT x1, y1,x2, y2, 色, モード

矩形の描画

CIRCLE 横中心座標, 縦中心座標,半径,色,モード

円の描画

GPRINT 横座標, 縦座標
GPRINT 横座標, 縦座標, 文字列 | 数値
GPRINT 横座標, 縦座標, 文字列 | 数値 ;
GPRINT 横座標, 縦座標, 文字列 | 数値 ; 文字列 | 数値 ;
GPRINT 横座標, 縦座標, 文字列 | 数値 ; 文字列 | 数値 ;;
GPRINT 横座標 , 縦座標, # 桁数 , 文字列 | 数値;文字列 | 数値 ;;

| はいずれのうち1つを示す
… は可変指定を示す
; は連結指定、カンマ’,’も可能

文字列の描画

BITMAP 横座標, 縦座標, 仮想アドレス, インデックス, 幅, 高さ [,倍率]

ビットマップ画像の描画

DWBMP "ファイル名", x, y [, Bx, By 幅, 高さ[,色指定]]

BMPファイルの表示

CSCROLL x1,y1,x2,y2,方向

キャラクタ画面スクロール

GSCROLL x1, y1, x2, y2,方向

グラフィックスクロール

GPEEK (横位置 , 縦位置)

画面上の指定位置ピクセルの参照

GINP (横位置,縦位置,高さ,幅,色)

指定領域内ピクセル検出

RGB (赤, 緑, 青)

3原色からRGBコード変換

2.11. シリアル通信

シリアル通信関連のコマンド・関数です。

以下にコマンド・関数の一覧を示します。

コマンド・書式

概要

SMODE 0
SMODE 1, "通信速度"
SMODE 2
SMODE 3, 制御コード処理指定

シリアルポート機能設定

SOPEN 通信速度

シリアル通信オープン

SCLOSE 通信速度

シリアル通信クローズ

SPRINT
SPRINT 文字列 | 数値
SPRINT 文字列 | 数値 ;
SPRINT 文字列 | 数値 ; 文字列 | 数値 ;
SPRINT 文字列 | 数値 ; 文字列 | 数値 ;;
SPRINT # 桁数 , 文字列 | 数値 ; 文字列 | 数値 ;;

| はいずれのうち1つを示す
… は可変指定を示す
;’ は連結指定、カンマ ’,’ も可能

シリアル通信文字列出力

SWRITE 送信データ

シリアル通信1バイト出力

SREAD ()

シリアル通信1バイト受信

SREADY ()

シリアル通信データ受信確認

2.12. 仮想EEPROM

仮想EEPROM利用のためののコマンド・関数です。

以下にコマンド・関数の一覧を示します。

コマンド・書式

概要

EEPFORMAT

仮想EEPROMのフォーマット

EEPREAD (アドレス)

仮想EEPROMデータ読み込み

EEPWRITE アドレス, データ

仮想EEPROMデータ書き込み

3. コマンド詳細

3.1. 制御命令

3.1.1. GOTO 指定行にジャンプ(制御命令)

指定行にジャンプ

【書式】

GOTO 行番号
GOTO "ラベル"

【引数】
行番号

ジャンプ先の行番号 数値(1 ~ 32767) または 式

"ラベル"

ジャンプ先のラベル "文字列"の形式

【説明】

プログラムの実行を行番号、"ラベル"で指定した行にジャンプします。
行番号には数値、式(変数、関数を含む)が利用可能です。
ラベルを指定した場合、行先頭に同じラベルがある行にジャンプします。
ラベルはダブルクオテーション( " )で囲って指定します。

ラベルを使った例
10 I=0
20 "LOOP"
30 PRINT "@"
40 I=I+1:IF I=5 GOTO 60
50 GOTO "LOOP"
60 END

上記の例では、40行の GOTO で60行にジャンプ、50行のラベル指定で20行にジャンプしています。
ラベルを使うとプログラムの流れがわかりやすくなります。
ラベルは必ず行の先頭に記述してください。行に先頭にない場合は、ラベルとして認識されません。

ラベルのつけ方が悪い例
10 GOTO "hoge"
20 END
30 ? "Hello":"hoge":?"test"
run
Undefined line number or label in 10
10 GOTO "hoge"
OK

上記の例では、30行の真ん中にラベルをつけているのでエラーとなります。

行番号には式や変数の指定が可能です。
ただしその場合は、 RENUM コマンドよる行番号付け替えに対応出来ない場合があります。

GOTO N*100+500      (1)
GOTO 500+N*100+500  (2)

(1)では RENUM コマンドは何もしません。
(2)は500を号番号とみなして更新します。
ただし(1)(2)とも計算結果が正しい行番号となることは保証出来ません。
ご注意下さい。

【エラーメッセージ】
Undefined line number or label

指定した行、ラベルが存在しない

Overflow

指定した数値が-32768 ~ 32767を超えている

Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
ラベルを使ったループ処理
100 GOSUB "SUB01"
110 GOSUB "SUB02"
120 N=0
130 "LOOP"
140 PRINT "N=";N
150 N=N+1:IF N<5 GOTO "LOOP"
160 END
170 "SUB01"
180 PRINT "SUB01"
190 RETURN
200 "SUB02"
210 PRINT "SUB02"
220 RETURN

3.1.2. GOSUB サブルーチン呼び出し(制御命令)

サブルーチンの呼び出し

【書式】

GOSUB 行番号
GOSUB "ラベル"

【引数】
行番号

ジャンプ先の行番号 数値(1 ~ 32767) または 式

"ラベル"

ジャンプ先のラベル "文字列"の形式

【説明】

プログラムの実行を一旦、行番号またはラベルで指定した行に移ります。
移った先で RETURN 命令により、呼び出した GOSUB 命令の次の位置に戻ります。
行番号には数値、式(変数、関数を含む)が利用できます。
ラベルを指定した場合は、行先頭に同じラベルがある行に移ります。
ラベルはダブルクオテーション`"`で囲って指定します。

10 GOSUB "PRN_LOGO"
20 GOSUB "PRN_DATE"
30 GOSUB 200
40 END
50 "PRN_LOGO"
60 PRINT "Tiny BASIC for Arduino STM32"
70 RETURN
80 "PRN_DATE"
90 PRINT "Edition V0.84 2017/08/01"
100 RETURN
200 PRINT "Ready"
210 RETURN

上記の例では、10行、20行でラベルを指定してサブルーチンを呼び出しています。
30行では、行番号を指定してサブルーチンを呼び出しています。
ラベルを使うことで、プログラムの実行がわかりやすくなります。
行の先頭に無いラベルは、GOSUB 文の呼び出し先としての参照はされません。

ラベルのつけ方が悪い例
10 GOSUB "hoge"
20 END
30 ? "Hello":"hoge":?"test":RETURN
run
Undefined line number or label in 10
10 GOSUB "hoge"
OK

行番号には式や変数の指定が可能ですが、 RENUM コマンドよる行番号付け替えに対応出来ない場合があります。

GOSUB N*100+500      (1)
GOSUB 500+N*100+500  (2)

(1)では RENUM コマンドは何もしません。
(2)は500を行番号とみなして更新します。
ただし(1)(2)とも計算結果が正しい行番号となることは保証出来ません。ご注意下さい。

【エラーメッセージ】
Undefined line number or label

指定した行、ラベルが存在しない

Overflow

指定した数値が-32768 ~ 32767を超えている

GOSUB too many nested

GOSUBのネスト数が規定(=10)を超えた

Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
ラベルを使ったサブルーチンの呼び出し例
100 GOSUB "SUB01"
110 GOSUB "SUB02"
120 N=0
130 "LOOP"
140 PRINT "N=";N
150 N=N+1:IF N<5 GOTO "LOOP"
160 END
170 "SUB01":PRINT "SUB01":RETURN
200 "SUB02":PRINT "SUB02":RETURN

3.1.3. RETURN 呼び出し元への復帰(制御命令)

サブルーチンからの復帰

【書式】
【引数】

なし

【説明】

直前に呼び出された GOSUB の次の処理に復帰します。
詳細は 「GOSUB コマンドリファレンス」 を参照して下さい。

【エラーメッセージ】
Undefined line number or label

指定した行、ラベルが存在しない

Overflow

指定した数値が-32768 ~ 32767を超えている

RETURN stack underflow

GOSUBの呼び出しがないのにRETURNを実行

Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
ラベルを使ったサブルーチンの呼び出し例
100 GOSUB "SUB01"
110 GOSUB "SUB02"
120 N=0
130 "LOOP"
140 PRINT "N=";N
150 N=N+1:IF N<5 GOTO "LOOP"
160 END
170 "SUB01"
180 PRINT "SUB01"
190 RETURN
200 "SUB02"
210 PRINT "SUB02"
220 RETURN

3.1.4. IF 条件判定(制御命令)

条件判定を行う

【書式】

IF 条件式 真の場合の実行文
IF 条件式 真の場合の実行文 ELSE 偽の場合の実行文

【引数】
条件式

定数、数値、式

真の場合の実行文

条件式の計算結果が真(0以外)の場合に実行される命令文
命令文は`:`を使って複数記述することが可能

偽の場合の実行文

条件式の計算結果が偽(0)の場合に実行される命令文
命令文は`:`を使って複数記述することが可能

【説明】

条件式の真偽判定を行い、真の場合は 真の場合の実行文 を実行します。
条件式が偽の場合、ELSE がある場合は 偽の場合の実行文 を実行します。

真偽は次の条件となります。

真:評価した値が0以外である
偽:評価した値が0である

真偽判定を行う条件式には定数、数値、関数を含む式が記述できます。

条件式の記述例
  • IF A > 5 B=B-1

  • IF A+1 PRINT A

  • IF A & 1 TONE 440,200

  • IF INKEY() = ASC("A") GOTO 100

定数の例
  • IF HIGH GOTO 100

数値の例
  • IF 123 PRINT "123"

関数の例
  • IF RND(1) X=X+1

実行文には、`:`を使って複数のコマンドを記述することが可能です。 .例

10 INPUT "年齢=",N
20 IF (N<0) OR (N>120) PRINT "bad value":GOTO 10
30 PRINT "年齢:";N

上記のプログラムでは、入力した年齢の範囲をチェックし、
不当な値である場合は、再入力を行います。+ 20行の真の場合に実行される命令文では PRINTGOTO が逐次実行されます。
実行文には IFGOTOGOSUB 等の制御命令を使うことも可能です。

注意
ELSE 利用の制約(ぶら下がり ELSE に関する補足)
IF 文をネストして利用した場合、ELSE 文は直前の IF 文に対応します。
 例: IF A=1 IF B=1 ? "A,B=1" ELSE ? "A=1,B<>1"
上記の ELSE は2番目の IF 文に対応します。
この「 ELSE 文は直前の IF 文に対応」の条件で、ELSE 文に IF 文をネスト出来ます。
 例: IF A=1 IF B=1 ? "A,B=1" ELSE IF B=2 ? "A=1,B=2" ELSE IF B=3 ?"A=1,B=3"
上記では、A=1,B=1,2,3の条件に対して対応する表示メッセージを表示する例です。
【エラーメッセージ】
IF without condition

条件式が定義されていない

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】

yを押したら、"Y key" を表示して終了、その他のキーなら"End" を表示して終了する 何も押されていなければ10行から30行をループする。

10 A=INKEY()
20 IF A=ASC("y") PRINT "Y key":END ELSE IF A<>0 PRINT "End":END
30 GOTO 10

3.1.5. FOR ~ TO ~ NEXT 繰り返し実行(制御命令)

処理の繰り返し

【書式】

FOR 変数 = 初期値 TO 最終値 [STEP 増分]
 <繰り返し実行文(複数行可能)>
NEXT 変数

【引数】
変数

変数A~Z、An~Zn(nは0~6) または 配列変数@(0) ~@(99)

初期値

数値(-32768 ~ 32767)、定数、式

最終値

数値(-32768 ~ 32767)、定数、式

増分

数値(-32768 ~ 32767)、定数、式

繰り返し実行文(複数行可能)

繰り返し実行する命令文

【説明】

変数を初期値から最終値まで増やし、FOR から NEXT の間の実行文を繰り返し実行します。
変数が最終値に達した時点で繰り返しを止め、NEXT の次の命令の実行を行います。
STEP にて増分を指定しない場合、増分は1となります。 STEP を用いた場合は、マイナス値を含め任意の増分の指定が可能です。

例1
10 PRINT "start."
20 FOR I=0 TO 5 STEP 2
30 PRINT I
40 NEXT I
50 PRINT "done."
実行結果
start
0
2
4
done.
ok

上記の例ではIを0から5まで、2ずつ増加して30行の命令を繰り返し実行します。 Iが4の時、増分2を足すと終了値5を超えた6となるので繰り返しを終了し、50行を実行します。

FOR 文はネストも可能です(利用例 のプログラムを参照)。
最大で10段のネストを行うことが出来ます。
ネストする場合、各 FORNEXT の組み合わせには異なる変数を指定します。

FORNEXT の繰り返しは、利用している変数が繰り返し条件を満たさなくなった時点で繰り返しを終了します。
例1 に`35 I=6`を追加した 例2 では、ループ内で条件を満たさなくすることでループを抜けることが出来ます。

例2
10 PRINT "start."
20 FOR I=0 TO 5 STEP 2
30 PRINT I
35 I=6
40 NEXT I
50 PRINT "done."
実行結果
start
0
done.
ok
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

FOR without variable

FOR文で変数を指定していない

FOR without TO

FOR文でTOを指定していない

NEXT without counter

NEXTに対応するFOR文が無い

FOR too many nested

FOR文のネスト数が規定数(=10)を超えた

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
画面の指定位置に*を表示する(FOR文のネストの例)
10 CLS
20 FOR Y=5 TO 10
30 FOR X=5 TO 10
40 LOCATE X,Y:PRINT "*"
50 NEXT X
60 NEXT Y

3.1.6. END プログラムの終了(制御命令)

プログラムの終了

【書式】

END

【引数】

なし

【説明】

プログラムの実行を終了します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
特定の条件でプログラムを終了する
10 I=0
20 PRINT I
30 IF I=5 END
40 GOTO 20

3.2. プログラム作成・保存・環境設定

3.2.1. CONFIG システム環境設定

システム環境設定

【書式】

CONFIG 項目番号, 設定値 [,設定値2, 設定値3]

【引数】
項目番号

0 ~ 2 設定値;;  選択した項目の設定値(項目により設定値の条件は異なる)

設定値2

選択した項目の設定値(項目により設定値の条件は異なる)

設定値3

選択した項目の設定値(項目により設定値の条件は異なる)

【説明】

項目で指定した機器の設定を行います。

項目と書式

説明

NTSC信号補正

書式
CONFIG 0,垂直同期補正[,横補正, 縦補正]

NTSCの信号の補正値を設定します。
垂直同期補正:-2 ~ 2(デフォルト 0)
横補正: -15 ~ 15(デフォルト 0)
縦補正: -15 ~ 15(デフォルト 0)

画面が縦にスクロールする場合は、
垂直同期補正に正の数値を指定します。
例: 2
垂直同期補正の単位は走査線増減数です。

横補正は左側からの補正量、
縦補正は上からの補正量です。
単位はドットではなく、クロック数です。

キーボード設定

書式
CONFIG 1,レイアウト指定値

利用するキーボードのレイアウト設定を行います。
レイアウト指定値
0:日本語キーボード(デフォルト)
1:USキーボード

自動起動プログラム設定

書式
CONFIG 2,プログラム番号

電源ON後に自動起動するプログラムを指定します。
プログラム番号:0 ~ 7 or -1
-1の設定で自動起動無し

設定はコマンド実行後、直ちに反映されます。本設定は電源を落とすまで有効です。
次回以降の起動にも適用したい場合は、SAVECONFIG コマンドで保存して下さい。

注意
初めてボードに書き込みを行う場合、SAVECONFIG コマンドで書き込めない場合があります。その場合は、EEPFORMAT コマンドにて保存領域の初期化を行って下さい。
【エラーメッセージ】
Syntax error

書式と異なる利用を行った、プログラム番号に変数、式を指定した

Illegal value

指定した項目番号、設定値が正しくない。

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
利用しているキーボードをUSキーボードに設定する
CONFIG 1,1
OK
SAVECONFIG
OK

3.2.2. CONSOLE コンソール画面切替

コンソール画面切替

【書式】

CONSOLE モード

【引数】
モード

0 ~ 1 の整数 または 定数 OFF、ON

表 1. モードの引数の詳細

モード

機能

説明

OFF
(0)

デバイスコンソール

コンソール画面をデバイス画面に切り替えます。
デバイス画面はNTSC、OLEDディスプレイ、TFTディスプレイです。

ON
(1)

シリアルコンソール

コンソール画面をシリアルターミナル画面に切り替えます。
USBシリアル、シリアルポート接続のシリアルコンソールが利用可能です。

【説明】

コンソール画面の切替を行います。

モードの指定で、デバイスコンソールを指定した場合、利用している表示デバイス(NTSC、OLED、TFT)がコンソール画面となります。
シリアルコンソールを指定した場合、USBシリアルまたはシリアルポート接続のシリアルターミナルがコンソール画面となります。

シリアルコンソールでは、パソコン上のターミナルソフトにてスクリーン編集を行うことが出来ます。デフォルトでは2つのシリアルポート(USBシリアル、シリアル端子PA9、PA10)のうち、USBシリアルがスクリーン編集用として機能します。

シリアルポートをスクリーン編集用に利用する場合は、SMODE コマンドを使うことで、利用することが出来ます。

: シリアルコンソールをシリアルポートに切り替える

SMODE 1,"115200"
注意
シリアルコンソールに切り替えた場合、PS/2キーボードを利用することは出来ません。
パソコン等のシリアルコンソール無しでの利用環境での切り替えにおいてはご注意下さい。

シリアルコンソールを利用している状態で SCREEN コマンドを実行した場合、デバイスコンソールに切り替わり、指定したスクリーンモードの設定が反映されます。 シリアルコンソールからデバイスコンソールに切り替えた場合、スクリーンモードはデフォルトの設定となります。

【補足】
起動直後のモードについて

デフォルトではモード:0(デバイスコンソール)となります(コンソール版を除く) 。
ただし、次の設定を行うことでモード:1(シリアルコンソール)に切り替えることが出来ます。

設定

ボート上の BOOT1 のジャンパーピンを1にセットして起動する

さらに、上記の設定と併用して、
SWCLK( PA14 )ピンをHIGH(VCC接続)の場合、USBシリアルではなくシリアルポート(PA9、PA10)をシリアルコンソール画面として利用することが出来ます。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Illegal value

指定した引数の値が範囲外である

Overflow

指定した数値が-32767 ~ 32767を超えている

【利用例】

コンソール画面をシリアルコンソールに切り替える

CONSOLE ON

3.2.3. CLV 変数領域の初期化

変数領域の初期化

【書式】

CLV

【引数】

なし

【説明】

変数領域(変数、配列)の初期化を行います。
変数A~Z、配列@(0)~@(99)はすべて0に初期化されます。

LRUN コマンドにてプログラムをロードして実行する場合、変数領域は初期化されません。
これにより呼び出し元のプログラムの変数を引き継ぐことが出来ます。
呼び出されたプログラムにて明示的に変数領域の初期化を行う場合は、CLV コマンドを使って下さい。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
変数Aに値を代入後、初期化する
a=123
OK
?a
123
OK
CLV
OK
?a
0
OK

3.2.4. DELETE プログラムの指定行削除

プログラムの指定行削除

【書式】

DELETE 行番号
DELETE 先頭行番号, 末尾行番号

【引数】
行番号

削除対象の行番号: 1~32767

先頭行番号

削除対象範囲の先頭番号: 1~32767

末尾行番号

削除対象範囲の末尾番号: 1~32767

【説明】

プログラム内の指定した行、指定した範囲(先頭行番号、末尾行番号)の行を削除します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

Illegal value

先頭番号と末尾番号の指定に矛盾がある

【利用例】

プログラム内の20行から50行の範囲を削除する

10 ? "AAAAAA"
20 ? "BBBBBB"
30 ? "CCCCCC"
40 ? "DDDDDD"
50 ? "EEEEEE"
60 ? "FFFFFF"
70 ? "GGGGGG"

DELETE 20,50
OK
LIST
10 ? "AAAAAA"
60 ? "FFFFFF"
70 ? "GGGGGG"
OK

3.2.5. ERASE フラッシュメモリのプログラム削除

フラッシュメモリのプログラム削除

【書式】

ERASE プログラム番号
ERASE 開始プログラム番号 , 終了プログラム番号

【引数】
プログラム番号

削除対象のプログラム番号: 0 ~ 5

開始プログラム番号

削除範囲の開始プログラム番号:0 ~ 5

終了プログラム番号

削除範囲の終了プログラム番号: 0 ~ 5

【説明】

マイコン内のフラッシュメモリに保存されているプログラム(プログラム番号0~5)の削除を行います。
削除対象プログラムは、コマンド引数にてプログラム番号を指定するか、
削除するプログラム番号の範囲(開始プログラム番号、終了プログラム番号)を指定します。

注意
豊四季Tiny BASIC for Arduino STM32 のスケッチを書き込み後、
FILES コマンドにてプログラム一覧を表示した場合、
意味不明の文字列が大量に表示される場合があります。
この場合は ERASE コマンドを実行して、プログラム保存領域を初期化して下さい。
【エラーメッセージ】
Syntax error

書式と異なる利用を行った、プログラム番号に変数、式を指定した

Illegal value

プログラム番号の指定が0~5の範囲外である

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
フラッシュメモリに保存されている全てのプログラムの削除を行う
ERASE 0,5
OK
FILES
0:(none)
1:(none)
2:(none)
3:(none)
4:(none)
5:(none)
OK

3.2.6. EXPORT フラッシュメモリの内容のエクスポート

フラッシュメモリの内容のエクスポート

【書式】

EXPORT
EXPORT 対象番号
EXPORT 開始番号 , 終了番号

【引数】
対象番号

エクスポートするプログラム保存番号: 0 ~ 5

開始番号,終了番号

エクスポートするプログラム保存番号の範囲: 0 ~ 5

【説明】

マイコン内のフラッシュメモリに保存されているプログラム(プログラム番号0~5)を出力表示します。
ターミナルソフト等を利用することにより、出力表示されたプログラムリストをコピーすることで、
内部保存されたプログラムのバックアップを行うことが出来ます。

引数に何も指定しない場合は、0 ~ 5までの全てのプログラムを画面に出力します。
対象番号を指定した場合は、該当するプログラム番号の内容のみ出力します。
開始番号と終了番号を指定した場合はその範囲のプログラムを出力します。

出力形式は次の形式となります。

出力例
NEW
10 'oscilloscope
20 CLS
30 GPIO PB1,ANALOG
40 "LOOP"
50 R=ANA(PB1)
60 Q=R/20
70 LOCATE 0,0:?R;"   "
80 PSET 223,221-Q,1
90 WAIT 50
100 GSCROLL 0,8,GW-1,GH-1,LEFT
110 GOTO "LOOP"
SAVE 1

プログラム番号毎のプログラムリストの先頭に NEW コマンド、末尾に SAVE プログラム番号 が付加されます。
ターミナルソフトにペーストすることにより、フラッシュメモリ内に再登録することが出来ます。

【エラーメッセージ】
Syntax error

書式と異なる利用を行った、プログラム番号に変数、式を指定した

Illegal value

指定した引数が有効範囲を超えている

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
プログラム番号1,2に保存されているプログラムのエクスポート
EXPORT 1,2
NEW
10 'oscilloscope
20 CLS
30 GPIO PB01,ANALOG
40 "LOOP"
50 R=ANA(PB01)
60 Q=R/20
70 LOCATE 0,0:?R;"   "
80 PSET GW-1,GH-Q-4,1
90 WAIT 50
100 GSCROLL 8,208,3
110 GOTO "LOOP"
SAVE 1

NEW
10 CLS
20 RECT 0,0,GW,GH,1,1
30 RESETTICK
40 FOR I=0 TO 215
50 FOR X=0 TO 200 STEP 16
60 GSCROLL X,0,8,GH,0
70 GSCROLL X+8,0,8,GH,1
80 NEXT X
100 NEXT I
110 ?TICK()
120 GOTO 120
SAVE 2

OK

3.2.7. FILES プログラム一覧表示

プログラム一覧表示

【書式】

FILES
FILES 開始プログラム番号
FILES 開始プログラム番号, 終了プログラム番号
FILES "ファイルパス"

【引数】
開始プログラム番号

表示開始プログラム番号: 0~5

終了プログラム番号

表示終了プログラム番号: 0~5

"ファイルパス"

SDカード内のディレクトリまたはファイル名(ワイルドカード指定可能)

【説明】

マイコン内のフラッシュメモリに保存されているプログラムまたは、SDカード内に保存されているファイルの一覧を表示します。

引数を指定しない場合は、内部フラッシュメモリ内のプログラム番号0~5の先頭行をリスト表示します。開始プログラム番号,終了プログラム番号を指定した場合、その範囲のリストを表示します。
プログラム番号にプログラムが保存されていない場合は(none)と表示されます。
保存されている場合は先頭行の内容の一部を表示します。
プログラム先頭行にコメントをつけると、一覧表示でのプログラムの内容が分かり易くなります。

files
0:'Edit bitmap
1:'RTC TEST
2:(none)
3:(none)
4:(none)
5:1'LED Blink
OK

引数にファイルパスを指定した場合、SDカード内のファイルを一覧表示します。
ファイル名は8.3形式となります。
ファイルパスには、ディレクトリ名、ディレクトリ名+ファイル名(ワイルドカード指定可能)の記述が可能です。ワイルドカードは、*と?が利用可能です。ディレクトリ名指定の上位、下位の"/"は省略可能です。""と"/"は同じ出力となります。

ファイル名の指定例
FILES ""
FILES "/"
FILES "/*"
FILES "/SRC/"
FILES "/SRC"
FILES "/SRC/SAMPLE/"
FILES "SRC/"
FILES "SRC/*.BAS"
FILES "SRC/*.B??"

出力されるファイル一覧の順番は不定となります。ディレクトリファイルの場合は、ファイル名の最後に*が付きます。

ファイル一覧の出力例
files "*.bas"
TEST.BAS      TIME.BAS
TM.BAS        SOKUDO.BAS
トケイ.BAS       トケイ2.BAS
TEST2.BAS     TESTBMP.BAS
AA.BAS        1.BAS
2.BAS         3.BAS
サッチャン.BAS     SUB.BAS
ケイソク.BAS      DAT*
注意
豊四季Tiny BASIC for Arduino STM32のファームウェアの新規書き込みまたは更新を行った直後は、フラッシュメモリ上の既存データの内容の不整合により正しく表示できない場合があります。その場合は、ERASE コマンドにてフラッシュメモリ上のプログラムの消去を行って下さい。
【エラーメッセージ】
Syntax error

書式と異なる利用を行った、プログラム番号に変数、式を指定した

Illegal value

指定した開始プログラム番号,終了プログラム番号の値が正しくない。

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File read error

SDカードからのファイル読み込みに失敗した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
シリアルコンソール画面でSDカード内のファイル一覧を表示する。
OK
files ""
TEST.BAS      SYSTEM~1*     FONT.BIN      FOUND.000*    TIME.BAS
TM.BAS        SOKUDO.BAS    トケイ.BAS       TIME2.BAS     トケイ2.BAS
FONTLCD.BIN   PAC.BAS       PAC1.BAS      AKABE.IMG     PAC2.BAS
PAC0.BAS      T1.BAS        NEKO_P.BAS    TEST2.BAS     TESTBMP.BAS
AA.BAS        DIR1*         VRAM.BIN      A.BIN         B.BIN
1.BAS         2.BAS         3.BAS         サッチャン.BAS     SUB.BAS
ケイソク.BAS      SAMPLE*       TT.BAS        TEST*         MEM.BIN
SS1306.BAS    DS3231.BAS    OLED.BAS      OLED2.BAS     RR.BAS
N1.BAS        T11.BAS       OLEDヨコ.BAS    CAT*          CAT.JPG
CAT2.JPG      INDEX.HTM     NEXT.HTM      T12.BAS       T13.BAS
T14.BAS       T15.BAS       OLEDロゴ.BAS   TEST.TXT      TEST1.BAS
TEST3.BAS     TEST4.BAS     メモリーMAP.BAS   CHAROUT.BAS   HAROUT.BAS
STR_01.BAS    T2.BIN        T1.BIN        GDATA.BIN     LIFE.BAS
NEKO_P2.BAS   TFT_PSET.BAS  TFT_LINE.BAS  TFT_C.BAS     TFTBMP.BAS
NAME.BAS      MESSAGE.BAS   BMP*          TT.BMP        CAT.BMP
IMG.BMP       LOGO.BMP      LOGO3.BMP     MSG.BMP       MSG2.BMP

OK
補足
表示する横の列数は、スクリーンの横のサイズに応じて調整されます。

3.2.8. FREE プログラム領域残量取得(数値関数)

プログラム領域残量取得

【書式】
【引数】

なし

【戻り値】

プログラム領域の残りバイト数: 0 ~ 4095

【説明】

プログラム領域の残りバイト数を返します。
作成したプログラムサイズを確認する場合は、下記の記述にて行うことが可能です。

プログラムサイズを調べる
PRINT 4095-FREE()
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

'(' or ')' expected

引数部の記述が正しくない

【利用例】
プログラムサイズを調べる
PRINT 4095-FREE()
287
OK

3.2.9. LIST プログラムリストの表示

プログラムリストの表示

【書式】

LIST
LIST 表示開始行番号
LIST 表示開始行番号, 表示終了行番号

【引数】
表示開始行番号

表示を開始する行番号(0 ~ 32767)

表示終了行番号

表示を終了する行番号(0 ~ 32767)

【説明】

プログラムリストの表示を行います。
引数を指定しない場合は、全てのプログラムを表示します。
表示開始番号を指定した場合は、その番号以降のプログラムリストを表示します。
表示開始番号、表示終了番号を指定した場合は、そこ範囲のプログラムリストを表示します。

表示したプログラムリストは、カーソルを移動して編集することが出来ます。
編集した行は必ず ENTER キーを押して入力確定を行って下さい。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
プログラムのリストを表示する
LIST
10 I=0
20 PRINT "*";
30 I=I+1:IF I<10 GOTO 20
40 PRINT
50 END
OK
プログラムの20行から30行を表示する
list 20,30
20 PRINT "*";
30 I=I+1:IF I<10 GOTO 20
OK

3.2.10. LOAD プログラムの読み込み

プログラムの読み込み

【書式】

LOAD
LOAD プログラム番号
LOAD "ファイル名"
LOAD "ファイル名", モード

【引数】
プログラム番号

内部フラッシュメモリのプログラム番号 0 ~ 5

"ファイル名"

ディレクトリパス(省略可能)+ファイル8文字+拡張子3文字 の形式(63文字まで)

モード

0: 上書きモード (デフォルト)、1: 追記モード
SDカードからの読み込み時のみ指定可能

【説明】

内部フラッシュメモリ、または外付けSDカードからプログラムを読み込みます。

引数を省略した場合は、内部フラッシュメモリのプログラム番号を読み込みます。
引数にプログラム番号を指定した場合は、指定したプログラム番号を読み込みます。
プログラムを読込の際、変数は初期化 されます。

引数にファイル名を指定した場合、SDカードからプログラムを読み込みます。
ファイル形式は、テキスト形式またはバイナリ形式(SAVE時にバイナリ形式指定)対応しています。

ファイル名にはディレクトリパスを付けることが出来ます。
ファイル名には大文字小文字の区別はありません。

ファイル名の指定例
LOAD "/SAMPLE/TEST.BAS"
LOAD "/PRG1.BAS"
LOAD "PRG1.BAS"

SDカードからの読み込みには、引数のモードにて
0 : 上書きモード、 1 : 追記モード を指定することが出来ます。
上書きモード の場合、メモリー上のプログラムの初期化後に読み込みます。
変数領域は初期化されます。
追記モード の場合、メモリー上のプログラムに追記して読み込みを行います。
また、変数領域は初期化されません。

注意
バイナリー形式で SAVE したプログラムを追記モードで読み込む場合、
読み込むプログラムの行番号が既存プログラムよりも若い番号が付いている場合、
行番号の重複や行並びに不整合が生じます。
追記するプログラムは、あらかじめ大きい行番号を付けて下さい。
【エラーメッセージ】
Syntax error

書式と異なる利用を行った、プログラム番号に変数、式を指定した

Illegal value

プログラム番号の指定が0~5の範囲外である

Program not found

指定したプログラム番号にプログラムが保存されていない

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File read error

SDカードからのファイル読み込みに失敗した

Overflow

指定した数値が-32767 ~ 32767を超えている

【利用例】
プログラム番号1を読み込む
LOAD 1
OK

3.2.11. LRUN 指定プログラム番号の実行

指定プログラム番号の実行

【書式】

LRUN プログラム番号
LRUN プログラム番号 ,行番号
LRUN プログラム番号 ,"ラベル"
LRUN "ファイル名"
LRUN "ファイル名" ,行番号
LRUN "ファイル名" ,"ラベル"

【引数】
プログラム番号

実行するプログラムの番号: 0 ~ 5

"ファイル名"

"ディレクトリパス(省略可能)+ファイル8文字+拡張子3文字" の形式

行番号

プログラムの実行開始行番号: 1~32767

"ラベル"

プログラムの実行開始行のラベル指定

【説明】

プログラム番号またはファイル名で指定したプログラムを実行します。
第1引数に数値を指定した場合は、内部フラッシュメモリから指定したプログラム番号のプログラムを読み込んで実行します。ファイル名を指定した場合は、SDカードから指定ファイルを読み込んで実行します。
第2引数に行番号またはラベルの指定がある場合は、その行からプログラムの実行を開始します。

ファイル名の指定には、PRINT 文と同等の記述が可能です。

変数Nの値でファイル名を作成し、プログラムを実行する
10 INPUT "PROG NO=",N,0
20 IF N=0 OR N>9 GOTO 10
20 LRUN #-2,"PRG";"N;".BAS"

上記の例では、Nの値が1~9の場合には 対応する"PRG01.BAS"~"PROG09.BAS"をロードして実行します。

注意
LRUN にてプログラムを実行し場合、変数領域の初期化は行われません。直前のプログラムが設定した変数の値を引き継ぎます。初期化が必要な場合は呼び出されたプログラム中で CLV コマンドを実行して下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

プログラム番号の指定が0~5の範囲外である

Program not found

指定したプログラム番号にプログラムが保存されていない

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File read error

SDカードからのファイル読み込みに失敗した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
入力したプログラム番号を実行する。
10 INPUT N
20 LRUN N

3.2.12. NEW プログラムの消去

プログラムの消去

【書式】

NEW

【引数】

なし

【説明】

プログラム領域のプログラム、変数、配列変数を消去します。

【エラーメッセージ
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
.プログラムを消去する
LIST
10 I=0
20 PRINT "*";
30 I=I+1:IF I<10 GOTO 20
40 PRINT
50 END
OK
実行結果
run
**********
OK
?I
10
OK
NEW
OK
LIST
OK
?I
0
OK

3.2.13. REM コメント

コメント

【書式】

REM コメント
' コメント

【引数】
コメント

任意の文字列

【説明】

プログラムに説明等の記載を行います。
(シングルクオート)は REM の省略形です。
REM および 以降の文字以降はすべてコメントとみなし、プログラムとして実行されません。
プログラムの先頭行にコメントを付けた場合は、FILES コマンドで保存プログラム一覧を表示時に、
各プログラムの見出しとなります。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
コメントの記述例
LIST
1 REM Print starts
10 I=0:’initialize value
20 PRINT "*";
30 I=I+1:IF I<10 GOTO 20
40 PRINT
50 END

3.2.14. RUN プログラムの実行

プログラムの実行

【書式】

RUN

【引数】

なし

【説明】

プログラムの実行を行います。
実行中のプログラムは ESC キーまたは、CTRL+C キーにて強制終了することが出来ます。
シリアルコンソール上で ESC キーにて中断する場合は、ESC キーを2回押す必要があります。

プログラムの実行中は、カーソルが非表示となります。
プログラムの実行中は実行すべき次の行が無い場合、実行を終了します。
また END コマンドにより実行を終了します。
プログラムの実行中にエラーが発生した場合は実行を終了します。

注意
WAIT 命令で長い時間待ちを行っている場合は、時間待ちが終了するまで、
ESC キー、 CTRL+C キーによる強制終了を行うことが出来ません。 +
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

【利用例】

プログラムを実行する。

LIST
10 I=0
20 PRINT "*";
30 I=I+1:IF I<10 GOTO 20
40 PRINT
50 END
OK

RUN
**********
OK

3.2.15. RENUM 行番号の振り直し

行番号の振り直し

【書式】

RENUM
RENUM 開始行番号
RENUM 開始行番号, 増分

【引数】
開始番号

振り直しをする新しい行番号の開始番号 : 0 ~ 32767

増分

行番号の増分:1 ~ 32767

【説明】

プログラム全体の行番号を指定した条件にて振り直します。
引数を省略した場合は、行番号を10行から10間隔で振り直します。

開始番号のみ指定した場合、指定した開始番号から10間隔で振り直します。
開始番号と増分を指定した場合、指定した開始番号から指定した増分で振り直します。
振り直しにおいて、GOTO 文、GOSUB 文のとび先の行番号も更新されます。

注意
GOTO ,GOSUB に存在しない行番号を指定している場合、更新は行われません。
また、行番号に計算式を利用している場合、正しい更新が行われない場合があります。
GOTO 100+N*10 の記載の場合、先頭の数値100を行番号とみなして更新します。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Illegal value

振り直しをする新しい行番号が有効範囲を超えている

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】

行番号を100から10間隔で振り直す。

LIST
10 I=0
20 PRINT "*";
30 I=I+1:IF I<10 GOTO 20
40 PRINT
50 END
OK
RENUM 100,10
OK
LIST
100 I=0
110 PRINT "*";
120 I=I+1:IF I<10 GOTO 110
130 PRINT
140 END

3.2.16. SAVE プログラムの保存

プログラムの保存

【書式】

SAVE
SAVE プログラム番号
SAVE "ファイル名"
SAVE "ファイル名", 保存形式

【引数】
プログラム番号

0 ~ 5

"ファイル名"

ディレクトリパス(省略可能)+ファイル8文字+拡張子3文字 の形式(63文字まで)

保存形式

1 テキスト形式(デフォルト) 、0 バイナリ形式

【説明】

プログラムをマイコン内のフラッシュメモリ、またはSDカードに保存します。

引数の省略、数値を指定した場合は内部フラッシュメモリに保存します。
プログラムは最大で6つ保存可能です。保存先はプログラム番号0~5で指定します。
引数の省略した場合、プログラム番号0に保存します。

ファイル名を指定した場合は、SDカードにプログラムを保存します。
保存形式の指定により、テキスト形式またはバイナリ形式にて保存が行えます。
保存形式を指定しない場合は、テキスト形式で保存されます。
バイナリ形式での保存はプログラム領域4kバイトの全てを保存します。

注意
NTSC表示版では SAVE コマンド実行時に画面表示が乱れる場合があります。
【エラーメッセージ】
Syntax error

書式と異なる利用を行った、プログラム番号に変数、式を指定した

Illegal value

プログラム番号の指定が0~5の範囲外である

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File write error

SDカードへのファイルの書込みに失敗した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
プログラム番号1にプログラムを保存する
SAVE 1
OK

3.2.17. SAVECONFIG システム環境設定の保存

システム環境設定の保存

【書式】
【引数】

なし

【説明】

CONFIG コマンドの設定変更をフラッシュメモリに保存します。
次回以降の起動でも設定を有効にします。

フラッシュメモリの利用状況により、保存に失敗する場合があります。
その場合は、フラッシュメモリの初期化を EEPFORMAT にて行って下さい。

【エラーメッセージ】
Syntax error

書式と異なる利用を行った、プログラム番号に変数、式を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
利用しているキーボードをUSキーボードに設定する
CONFIG 1,1
OK
SAVECONFIG
OK

3.2.18. WIDTH シリアルコンソール画面サイズ設定

シリアルコンソール画面サイズ設定

【書式】

WIDTH 横文字数, 縦文字数

【引数】
横文字数

ターミナル画面上のスクリーンの横文字数 16 ~ 128(デフォルト 80)

縦文字数

ターミナル画面上のスクリーンの縦文字数 10 ~ 45(デフォルト 24)

【説明】

シリアルターミナル画面上のスクリーンサイズの設定を行います。
この設定にてスクリーンエディタの表示文字数、スクロール範囲の変更を行うことが出来ます。 スクリーンサイズは、最小サイズ16桁×10行 ~ 最大 128桁×45行 となります。

注意
デバイスコンソール画面で WIDTH コマンドを実行た場合、設定は無視されます。
また、シリアルコンソール画面への変更直後はデフォルトの80×24となります。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Illegal value

指定した引数の値が範囲外である

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】

スクリーンサイズを80桁×30行に設定する

WIDTH 80,30

3.3. スクリーン画面表示入出力

3.3.1. ATTR 文字表示属性の設定

文字表示属性の設定

【書式】

ATTR 属性

【引数】
属性

属性コード: 0 ~ 4

【説明】

文字の表示属性を設定します。指定した表示属性は以降の文字表示に反映されます。
属性に指定する属性コードは次の表の通りです。

表 2. 属性コード

属性コード

機能

0

標準(デフォルト)

1

下線

2

反転

3

ブリンク

4

ボールド

注意
ターミナル版のみ利用可能です。
注意
利用するターミナルソフトにより色が正しく表示されない場合があります。
属性指定との併用では正しく表示されない場合があります。
CTRL-RPage UPPage Down キー操作を行った場合は
再表示が発生し、色情報は欠落します。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

属性コードに範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
Hello,worldを反転表示する
10 CLS
20 LOCATE 5,5
30 ATTR 2:? "Hello,world"
40 ATTR 0

3.3.2. CLS 画面表示内容の全消去

画面表示内容の全消去

【書式】

CLS
CLS 消去対象画面

【引数】
消去対象画面

0 コンソール画面の全消去(デフォルト)
1 デバイス画面の消去

【説明】

画面上に表示している内容を全て消します。
引数に消去対象画面を指定した場合、指定した画面の消去を行います。
OLED版、TFT版ではシリアルコンソール画面切り替え中でも、
デバイス画面へのグラフィック描画コマンドを使った描画が可能です。
その際、CLS コマンドの引数にてどちらの画面を消去するかを指定することが出来ます 。

【エラーメッセージ】
Illegal value

指定した引数が有効範囲でない

Overflow

指定した数値が-32768 ~ 32767を超えている

Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
画面の表示内容を消去する
CLS
OK

3.3.3. COLOR 文字色の設定

文字色の設定

【書式】

COLOR 文字色
COLOR 文字色, 背景色

【引数】
文字色

色コード 0~8、または RGBコード:$0009 ~ $FFFF

背景色

色コード 0~8、または RGBコード:$0009 ~ $FFFF

【説明】

文字色の設定を行います。指定した色は以降の文字表示に反映されます。
文字色、背景色で指定する色コードに対する色は次の表の通りです。

表 3. 色コード

色コード

0

1

2

3

4

5

マゼンタ

6

シアン

7

白(デフォルト)

8

TFT(ILI9341)ディスプレイを利用している場合、上記の色コードに加えて、
RGBコード:$0009 ~ $FFFFの色指定が可能です。RGBコードは次の構成となります。

RGBフォーマット

RGBコードの指定は、RGB 関数を使うことで直感的な色を指定することが出来ます。

注意
TFTデスプレイ、ターミナル版のみ利用可能です。
注意
利用するターミナルソフトにより色が正しく表示されない場合があります。
属性指定との併用では正しく表示されない場合があります。
画面を CTRL-RPage UPPage Down キーにて再表示した場合、
色情報は欠落します。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

色コードに範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
ランダムな色で"*"を表示する
10 FOR I=0 TO 10
20 FOR J=0 TO 10
30 COLOR RND(8): ? "*";
35 WAIT 100
40 NEXT J
50 ?
60 NEXT I

3.3.4. GETS 文字列の入力(数値関数)

文字列の入力

【書式】

GETS ( 文字列格納先仮想アドレス [ ,有効文字列長 ] )

【引数】
文字列格納先仮想アドレス

入力した文字列を格納する仮想アドレス $0000 ~

有効文字列長

入力した文字列のうち、有効とする文字列の長さ(バイト:デフォルト 32)

【戻り値】

文字列格納先仮想アドレス

【説明】

コンソール画面のカーソル位置での文字列入力(全角文字も可能)を行います。
入力した文字列データは引数で指定したアドレスに格納されます。
戻り値として、引数で指定した文字列格納先仮想アドレスをそのまま返します。
入力した文字列は、有効文字列長の長さ分が文字列として利用されます。デフォルトでは32です。

仮想アドレスの指定には次の定数を利用することで有用な領域の指定が簡単に行えます。

定数名

仮想化ドレス名

概要

VRAM

画面表示用メモリ(CW×CH)

サイズはSCREENモードにより可変

VAR

変数領域

サイズ 416バイト

ARRAY

配列変数領域(@(0)~@(99) )

サイズ200バイト

PRG

プログラム領域

サイズ 4096バイト

MEM

ユーザーワーク領域

サイズ1024バイト

GRAM

グラフィック表示用メモリ

サイズはSCREENモードにより可変

仮想アドレスの詳細については、「メモリーマップ」の「仮想アドレス」を参照下さい。

指定した仮想アドレスには次の形式にて文字列が格納されます。

表 4. 文字列格納形式

[文字列長(1バイト)]

[入力した文字列]

[文字列終端コード:0(1バイト)]

下記の例では、変数 S1S2 に文字列の入力を行い、その内容を表示しています。

利用例
10 S1=GETS(MEM,8)
20 S2=GETS(MEM+10,8)
30 ?STR$(S1)
40 ?STR$(S2)
OK
run
1234567890
abcdefghij
12345678
abcdefgh
OK

有効文字列長に8を指定しているため、入力した文字列のうち、先頭から8バイトが格納されます。
変数に代入されている仮想アドレスに格納されている文字列を表示する場合は STR$ 関数を利用します。
変数 S2 の格納アドレスを MEM+10 としているのは、文字列8バイト分に長さと文字列終端コードの2バイトが必要なためです。

全角を含む文字列を入力した場合、有効文字列長は全角2バイト文字を考慮します。
上記のプログラムを再度実行し、今度は全角半角混合文字を入力してみます。

run
あeいうえお
かきくけこ
あeいう
かきくけ
OK

入力した文字列 "あeいうえお" は11バイトです。 有効文字列長に8を指定しているため*S1* には "あeいう"の7バイト分が格納されます。

入力した文字列は、BYTE 関数でバイト数、LEN 関数で文字数を調べることが出来ます。

文字数、バイト数を調べる
10 S=GETS(MEM)
20 ?"バイト数:";BYTE(S)
30 ?"文字数  :";LEN(S)
OK
run
さいたまsaitama
バイト数:15
文字数  :11
OK
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
5人分の名前を入力し、配列に格納する
10 FOR I=0 TO 4
20 ?"氏名(";I;")=";
30 @(I)=GETS(MEM+I*20,18)
40 NEXT I
50 ?"--- 名前リスト ---"
55 FOR I=0 TO 4
60 ?STR$(@(I))
70 NEXT I
80 ?"------------------"
実行結果
氏名(0)=たま吉
氏名(1)=ルミちゃん
氏名(2)=モコちゃん
氏名(3)=歳三くん
氏名(4)=メイちゃん
--- 名前リスト ---
たま吉
ルミちゃん
モコちゃん
歳三くん
メイちゃん
------------------
OK

3.3.5. INKEY 入力文字コード取得(数値関数)

入力文字コード取得

【書式】

INKEY( )

【引数】

なし

【戻り値】

押したキーの文字コード: 0 ~ 255
キーが押されていない場合は0を返します。

【説明】

キーボード上の押しているキーのコードを取得します。キーが押されていない場合は、0を返します。
押したキーが返すコードについては「キー入力コード」を参照下さい。

注意
ESC キー、CTRL-Cキー はプログラム中断用のため、キー入力の読み取りは出来ません。
キーボードにおいて利用出来ないキーはコードの取得が出来ません。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

'(' or ')' expected

’(‘ または ‘)’がない

【利用例】
入力したキーのコードを調べる
10 CLS
20 I= INKEY()
30 IF I>0 LOCATE 0,0:?#3,I
40 GOTO 20

3.3.6. INPUT 数値の入力

数値の入力

【書式】

INPUT 変数
INPUT 変数,オーバーフロー時の既定値
INPUT プロンプト, 変数
INPUT プロンプト, 変数, オーバーフロー時の既定値

【引数】
変数

入力した値を格納する変数または配列変数

プロンプト

文字列定数 "プロンプト"

オーバーフロー時の既定値

-32768 ~ 32767

【説明】

現在のカーソル位置にて数値の入力をし、指定した変数にその値を格納します。
キーボードから入力できる文字は符号-+、数値 09、入力訂正の BSDEL、入力確定のEnterキーです。
それ以外の入力はできません。
数値を入力せずに、Enterキーにて入力確定を行った場合、変数には0が格納されます。

引数に変数のみを指定した場合、"変数名:"を表示しその後ろの位置から数値を入力します。

INPUT A
A:

プロンプトを指定した場合は、そのプロンプトを表示しその後ろ位置から数値を入力します。

例.

INPUT "Value=",A
Value=

オーバーフロー時の既定値を指定した場合、入力値した数値がオーバーフローを発生した場合は、オーバーフロー時の既定値を変数に設定します。オーバーフロー時の既定値を設定していない場合は、Overflowエラーとなります。

オーバーフロー時の既定値なし
INPUT A
A:111111
Overflow
OK
オーバーフロー時の既定値あり
INPUT A,-1
A:111111
OK
?A
-1
OK
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
単純な使い方
INPUT A
A=1234
OK
プロンプト指定
INPUT "Value=" A
Value=1234
OK

3.3.7. LOCATE カーソルの移動

カーソルの移動

【書式】

LOCATE 横位置, 縦位置

【引数】
横位置

画面上の横位置: 0 ~ CW-1

縦位置

画面上の縦位置: 0 ~ CH-1

CW、CHは画面の横桁数、縦行数の示す定数です。
利用するフォント等により異なります。

【説明】

カーソルを指定した位置に移動します。

縦横位置それぞれの指定に0以下の数値を指定した場合、それぞれの位置は0となります。
横位置にCW-1を超える数値を指定した場合、横位置はCW-1となります。
縦位置にCH-1を超える数値を指定した場合、縦位置はCH-1となります。

定数CW、CHに設定されている値は次のようすることで確認することができます。

定数の利用例
?CW
37
OK
?CH
27
OK
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
画面の指定位置にメッセージを表示する
10 CLS
20 LOCATE 5,5:PRINT "Hello,world."
30 LOCATE 6,6:PRINT "TinyBASIC"
40 LOCATE 7,7:PRINT "Thank you."
実行結果
     Hello,world.
      TinyBASIC
       Thank you.

3.3.8. PRINT 文字列表示

文字列表示

【書式】

PRINT
PRINT 文字列 | 数値
PRINT 文字列 | 数値 ;
PRINT 文字列 | 数値 ; 文字列 | 数値 ;
PRINT 文字列 | 数値 ; 文字列 | 数値 ;;
PRINT # 桁数,文字列 | 数値 ; 文字列 | 数値 ;… ;

… は可変指定を示す
‘;’ は連結・改行抑制指定(オプション)、カンマ ‘,’ も可能

【引数】
文字列

文字列定数または文字列関数

数値

数値定数、変数、配列変数、または数値関数、式

連結指定

セミコロン’;’ または カンマ‘,
  文末に付けると改行抑制される

桁数

# 数値 または #-数値 の形式で指定する
 例: #3#-3

【説明】

指定した文字列、式、関数、変数、数値をスクリーン画面のカーソル位置に表示します。

PRINT "Hello,World"
Hello,World
OK
PRINT 123*3
369
OK
PRINT HEX$(123*3)
171
OK

文字列、式、関数、変数、数値は連結指定のセミコロン’;’、またはカンマ’,’にて連結して表示することが出来ます。
また最後に’;’または’,’が付加されている場合は改行しません。

10 N=5:C=3:K=10
20 PRINT "N=";N;" C=";C;
30 PRINT " K=";
40 PRINT K
RUN
N=5 C=3 K=10
OK

数値の整形表示
#数値 にて桁数を指定することで、任意の桁数(指定桁に満たない場合は空白を入れる)にて等間隔で表示します。
数値の前に-(マイナス)を付加した場合、空白をではなく、0(零)で不足桁を補います。
#数値 は任意の位置、任意の回数指定できます。

桁数指定なし

PRINT 1;":";2;":";3 +
1:2:3 +

桁数指定あり(空白文字で補間)

PRINT #2,1;":";2;":";3
 1: 2: 3

桁数指定あり(0で補間)

PRINT #-2,1;":";2;":";3
01:02:03

表示位置の指定
LOCATE コマンドを併用することで、スクリーン画面の任意の位置に文字を表示することが出来ます。

10 LOCATE 10,10
20 PRINT "Hello!"

色、属性の指定
スクリーン画面が SCREEN 0 のターミナルコンソールの場合、
COLOR コマンド、ATTR コマンドを併用することで、文字の前景色、背景色の指定、点滅、アンダーライン等の属性を付加することが出来ます。

10 COLOR 4,3
20 PRINT "Hello,";
40 ATTR 2
50 PRINT "World".
60 COLOR 7,0:ATTR 0
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
時刻を表示する
10 GETTIME A,B,C
20 LOCATE 0,0:PRINT #-2,A;":";B;":";C
30 WAIT 1000
40 GOTO 20
実行結果
10:52:00

3.3.9. REDRAW 画面表示の再表示

画面表示の再表示

【書式】
【引数】

なし

【説明】

テキスト画面表示用メモリ(VRAM)の内容を画面に再表示を行います。
再表示においては、個々に色付しけした文字の色、背景色、属性は欠落します。
再表示後の表示内容は指定した文字色、背景色、属性に統一されます。

POKE コマンド等にて画面表示用メモリにデータを書き込んだ場合、
そのままでは表示が反映されません。
REDRAW コマンドを実行して再表示を行う必要があります。

【エラーメッセージ】
Syntax error

:文法エラー、書式と異なる利用を行った

Overflow

:指定した数値が-32768 ~ 32767を超えている

【利用例】
画面表示用メモリ(VRAM)に直接書き内容を画面に反映させる
10 POKE VRAM+80*5+50,ASC("b")
20 REDRAW

3.3.10. VPEEK 指定位置の文字コード参照(数値関数)

指定位置の文字コード参照

【書式】

VPEEK (横位置 , 縦位置)

【引数】
横位置

0 ~ CW - 1

縦位置

0 ~ CH - 1

CW、CHは画面の横桁数、縦行数の示す定数です。
利用するデバイス画面、画面サイズにより異なります。

【戻り値】

指定位置に表示されている文字の文字コード(0 ~ 255)

【説明】

画面上の指定位置に表示されている文字の文字コードを取得します。
引数の指定位置が範囲外の場合は0を返します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

指定した引数の値が有効範囲を超えている

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
画面最上位の行に表示されている文字を表示する
10 FOR I=0 TO CW-1
20 C=VPEEK(I,0)
30 PRINT CHR$(C);
40 NEXT I
50 PRINT

3.4. 数値・文字列関数

3.4.1. ABS 絶対値の取得(数値関数)

絶対値の取得

【書式】

ABS (値)

【引数】

式、変数、配列変数、
数値(-32767~ 32767 )、
数値定数
の指定が可能

【戻り値】

指定した値の絶対値

【説明】

指定した値の絶対値を返します。

注意
-32768の絶対値 32768はオーバーフローとなるため、-32768を指定した場合は
オバーフローエラーとなります。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32767 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
変数の値の絶対値を表示する
10 FOR I=-3 TO 3
20 PRINT ABS(I)
30 NEXT I
実行結果
RUN
3
2
1
0
2
3
OK

3.4.2. ASC 文字コード変換(数値関数)

文字コード変換

【書式】

ASC (文字列)
ASC (文字列 , 文字位置)
ASC (変数)
ASC (変数 , 文字位置)

【引数】
文字列

"文字列"
"ABC" の形式とし、ダブルクォーテーション文字を囲みます。

文字位置

1~32767
変換対象となる左からの文字位置を指定します。

変数

文字列参照している変数または配列変数

【戻り値】

指定文字に対応する文字コード0 ~ $FFFF
(1バイト文字コード または 2バイト文字コード)

【説明】

指定した全角文字または半角文字に対応する文字コードを返します。
文字列のみを指定した場合、先頭の文字コードを返します。

10 ?ASC("ABCD")
RUN
65
OK

文字位置を指定した場合、指定した位置の文字コードを返します。

10 ?HEX$(ASC("AあBうCD",4))
RUN
82A4
OK

変数を指定した場合、変数が参照している文字列のコードを返します。

10 A="ABあCDEF"
20 ?HEX$(ASC(A))
30 ?HEX$(ASC(A,3))
RUN
41
82A0
OK
注意
変数の文字列参照はプログラム中にのみ有効です。
コマンドラインでは文字列参照を正しく行うことが出来ません。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

文字指定位置が不当

'(' or ')' expected

’(‘ または ‘)’がない

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
アルファベットA~Zを表示する
10 C=ASC("A")
20 FOR I=0 TO 25
30 PRINT CHR$(C+I);
40 NEXT I
50 PRINT
実行結果
run
ABCDEFGHIJKLMNOPQRSTUVWXYZ
OK
文字列に該当するシフトJISコードを表示します。
10 S="こんにちは、世界!"
20 L=LEN(S)
30 FOR I=1 TO L
40 PRINT HEX$(ASC(S,I),2)
50 NEXT I
実行結果
run
82B1
82F1
82C9
82BF
82CD
8141
90A2
8A45
8149
OK

3.4.3. BIN$ 整数の2進数文字列変換(文字列関数)

整数の2進数文字列変換

【書式】

BIN$ (数値)
BIN$ (数値 , 桁数)

【引数】
数値

変換対象の整数値: -32768 ~ 32767

桁数

出力桁数: 0 ~ 16)

【戻り値】

2進数文字列(1桁~16桁)

【説明】

指定した数値を2進数文字列に変換します。
数値には式、変数、定数等の指定が可能です。
PRINTSPRINTGPRINTPLAY の引数にて利用可能です。
桁数を指定した場合は数値が指定した桁数に満たない場合は、0で桁を補います。
指定した桁数を超える場合は数値の桁数を優先します。
桁数を指定しない場合は、先頭の0は付加されません。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

'(' or ')' expected

’(‘ または ‘)’がない

Illegal value

桁数の値が正しくない

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
2進数で変数の内容を表示する
10 A=1234:B=1
20 PRINT BIN$(A)
30 PRINT BIN$(B)
40 PRINT BIN$(A,4)
50 PRINT BIN$(B,4)

run
10011010010
1
10011010010
0001
OK

3.4.4. HEX$ 整数の16進数文字列変換(文字列関数)

整数の16進数文字列変換

【書式】

HEX$ (数値)
HEX$ (数値 , 桁数)

【引数】
数値

変換対象の整数値: -32767 ~ 32767

桁数

出力桁数: 0 ~ 4

【戻り値】

16進数文字列(1桁~4桁)

【説明】

指定した整数値を16進数文字列に変換します。
数値には式、変数、定数等の指定が可能です。
PRINTSPRINTGPRINTPLAY の引数にて利用可能です。
桁数を指定した場合は数値が指定した桁数に満たない場合は、0で桁を補います。
指定した桁数を超える場合は数値の桁数を優先します。
桁数をしない場合は、先頭の0は付加されません。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

'(' or ')' expected

’(‘ または ‘)’がない

Illegal value

桁数の値が正しくない

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
入力した整数値を16進数表示する
10 INPUT "value=",V
20 PRINT HEX$(V,4)
30 GOTO 10

3.4.5. CHR$ 文字コードから文字への変換(文字列関数)

文字コードから文字への変換

【書式】

CHR$ (文字コード)
CHR$ (文字コード, 文字コード, … , 文字コード)

【引数】
文字コード

アスキーコード または シフトSJIS文字コード: 0~$FFFF

【戻り値】

指定した文字コードに対する文字

【説明】

指定したシフト文字コードに対応する文字を返します。
全角SJIS、半角アスキーコードに対応ます。
文字コードは複数指定することが可能です。

PRINTSPRINTGPRINTPLAY の引数にて利用可能です。
範囲外の値を指定した場合は空白文字(" ")を返します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

'(' or ')' expected

’(‘ または ‘)’が無い

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
アルファベットA~Zを表示する
10 C=ASC("A")
20 FOR I=0 TO 25
30 PRINT CHR$(C+I);
40 NEXT I
50 PRINT

run
ABCDEFGHIJKLMNOPQRSTUVWXYZ
OK
ひらがな"あいうえお"を表示する
10 ?CHR$($82A0,$82A2,$82A4,$82A6,$82A8)

run
あいうえお
OK

3.4.6. BYTE 文字列のバイト数の取得(数値関数)

文字列のバイト数の取得

【書式】

BYTE (変数)
BYTE (文字列)

【引数】
変数

変数、または配列変数

文字列

"文字列"の形式(ダブルクォーテーションで囲み)

【戻り値】

文字列の長さ: 0 ~ 32767

【説明】

文字列定数、変数で参照してる文字列のバイト数をカウントし、その値を返します。

例:文字列のバイト数を求める

10 ?BYTE("12345678")
20 A="ABCDEF"
30 @(0)="abcdef"
40 ? BYTE (A)
50? BYTE (@(0))
>RUN
8
6
6
OK
注意
文字列のサポートは限定的です。
他の文字列関数と組み合わせた利用はサポートしていません。
例) 下記のような記述は出来ません。
?BYTE(BIN$(100))

本関数は全角1文字は2バイトとしてカウントします。
全角を1文字として扱いたい場合は、LEN 関数を利用して下さい。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
変数Aが参照している文字列のバイト数をを調べ文字コードを表示
10 'BYTE関数サンプル
20 A="Hello!"
30 FOR I=1 TO BYTE(A)
40 ?STR$(A,I,1);":";ASC(A,I)
50 NEXT I
実行結果
run
H:72
e:101
l:108
l:108
o:111
!:33
OK

3.4.7. LEN 文字列の長さの取得(数値関数)

文字列の長さの取得

【書式】

LEN (変数)
LEN (文字列)

【引数】
変数

変数、または配列変数

文字列

"文字列"の形式(ダブルクォーテーションで囲み)

【戻り値】

文字列の長さ: 0 ~ 32767

【説明】

文字列定数、変数で参照してる文字列の文字数をカウントし、その値を返します。
全角文字、半角文字とも1文字としてカウントします。

例:半角全角混合文字列の長さを求める
10 ?LEN("1あ2い34う5678")
20 A="ABさいたまCDEF"
30 @(0)="abcdef埼玉"
40 ?LEN(A)
50 ?LEN(@(0))

RUN
11
10
8
OK
注意
「豊四季Tiny BASIC for Arduino STM32」の文字列のサポートは限定的です。
他の文字列関数と組み合わせた利用はサポートしていません。
例) 下記のような記述は出来ません。
?LEN(BIN$(100))
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
文字を拡大表示する
10 CLS
20 A="Hello!"
30 FOR I=1 TO LEN(A)
40 BITMAP (I-1)*30,0,FNT,ASC(A,I),6,8,5
50 NEXT I
60 LOCATE 0,5

変数Aが参照している文字列の長さ LEN 関数で取得し、その長の分、文字を拡大表示します。

実行結果

文字拡大表示

3.4.8. RND 乱数の発生(数値関数)

乱数の発生

【書式】

RND (値)

【引数】

式、変数、配列変数、
数値(0 ~ 32767)、数値定数
の指定が可能

【戻り値】

0から指定した値未満の乱数

【説明】

0から指定した値-1の範囲の乱数を発生させ、その値を返します。

例: 0~9の乱数の発生
R=RND(10)

上記の例では変数 R には0~9範囲の値が代入されます。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
ジャンケンの表示
10 @(0)="グー","チョキ","パー"
20 FOR I=1 TO 5
30 R=RND(3)
40 PRINT I,":";STR$(@(R))
50 NEXT I
run
1:チョキ
2:パー
3:チョキ
4:グー
5:パー
OK

3.4.9. STR$ 文字列参照・文字列の切り出し(文字列関数)

文字列参照・文字列の切り出し

【書式】

STR$ (変数)
STR$ (変数,先頭位置,長さ)
STR$ (文字列)
STR$ (文字列,先頭位置,長さ)

【引数】
変数

文字列を参照している変数または配列変数

先頭位置

切り出す文字位置先頭 1~32767

長さ

切り出す文字の長さ 1~32767

文字列

ダブルクォーテーションで囲った文字列定数( "文字列" )

【戻り値】

指定した文字列および変数が参照している文字列を全部または一部を切り出して返します。
全角(シフトJIS)1文字は1文字としてカウントします。

【説明】

指定した文字列および変数が参照している文字列を全部または一部を切り出して返します。
引数に先頭位置、長さを指定した場合は、その条件にて文字列を切り出して返します。
先頭位置は1からの指定となります。
PRINTSPRINTGPRINTPLAY の引数にて利用可能です。

10 S="Hello,world! こんにちは世界!"
20 ?STR$(S)
30 ?STR$(S,14,8)
40 ?STR$("あいうえお",5,1)
実行結果
run
Hello,world! こんにちは世界!
こんにちは世界!
お
OK

上記の例では、変数Sが参照している文字列" Hello,world! こんにちは世界!"に対して、
20行は全て出力、30行は14番目からの文字から8文字 "こんにちは世界!""を出力、
40行は直接指定した文字列"あいうえお"の5番目の文字から1文字 "お"を出力しています。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

指定した文字位置、長さの値が不当

'(' or ')' expected

’(‘ または ‘)’が無い

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
変数が参照している文字列を切り出して表示する
10 'モジレツソウサ サンプル
20 S="Hello,Tiny BASIC"
30 L=LEN(S)
40 PRINT STR$(S);" LEN=";L
50 PRINT STR$(S,1,5)
60 C=ASC(S,12)
RUN
Hello,Tiny BASIC LEN=16
Hello

3.4.10. DMP$ 整数小数付き文字列変換(文字列関数)

整数小数付き文字列変換

【書式】

DMP$ (数値)
DMP$ (数値 , 小数点桁数)
DMP$ (数値 , 小数点桁数 , 整数部桁数)

【引数】
数値

変換対象整数: -32767 ~ 32767

小数点桁数

小数点以下の桁数を指定: 0 ~ 4(省略時は2)

整数部桁数

小数点以上の桁数を指定: 0 ~ 8 (省略時は0)

【戻り値】

小数点を付加した数値文字列

【説明】

指定した数値を小数点付きの文字列数値に変換します。
引数の小数点以下の桁数をnとした場合、数値÷10nの計算を行い、小数点以下の数値を含めて表示します。

数値文字列変換例
PRINT DMP$(3141,3)
3.141

小数点以下の桁数を指定しない場合、小数点桁数はデフォルトの2となります。

デフォルトの数値文字列変換
PRINT DMP$(3141)
3.14

整数部桁数を指定した場合、桁数に満たない場合は空白で補完します。
PRINTSPRINTGPRINTPLAY の引数にて利用可能です。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

指定した引数の値が有効範囲を超えている

Overflow

指定した数値が-32768 ~ 32767を超えている

Illegal value

桁数の値が正しくない

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
アナログ入力値0~4095を0~3.3Vで表示する
10 CLS
20 GPIO PB1,ANALOG
30 V=MAP(ANA(PB1),0,4095,0,3300)
40 LOCATE 0,0:? DMP$(V,3)
50 WAIT 200
60 GOTO 30
実行結果
run
2.011
2.215
2.294
2.330

アナログ入力値0~4095を MAP 関数にて0~3300に変換し、
0~3300の数値を DMP$ 関数にて"0.000"~"3.300"の文字列数値に変換して表示しています。

3.4.11. MAP 数値のスケール変換(数値関数)

数値のスケール変換

【書式】

MAP (値 , 範囲下限 , 範囲上限 , 新範囲下限 , 新範囲上限)

【引数】

変換対象の数値 -32768 ~ 32767

範囲下限

対象数値の数値の下限 -32768 ~ 32767

範囲上限

対象数値の数値の上限 -32768 ~ 32767

新範囲下限

新しい対象数値の数値の下限 -32768 ~ 32767

新範囲上限

新しい新しい対象数値の数値の下限 -32768 ~ 32767

【戻り値】

スケール変換後の値: -32767 ~ 32767

【説明】

指定した値のスケール変換を行い、その値を返します。

A=MAP(ANA(PA07),0,4095,0,99)

上記の例ではアナログ入力値0~4095を0 ~ 99のレンジに変換し、その値を返します。
アナログ入力や画面座標指定、PWMパルス出力等にて MAP 関数を使うことで、簡単にレンジ変換を行うことができます。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
アナログ入力値0~4095を0~3.3Vで表示する
10 CLS
20 GPIO PB1,ANALOG
30 V=MAP(ANA(PB1),0,4095,0,3300)
40 LOCATE 0,0:? DMP$(V,3)
50 WAIT 200
60 GOTO 30

3.4.12. LET 変数への値代入

変数への値代入

【書式】

LET 変数 = 値
LET 配列変数 = 値, 値, 値, 値...
変数 = 値
配列変数 = 値, 値, 値, 値...

LET は省略可能

【引数】
変数

変数、または配列変数

配列変数

配列変数 @(値)
配列の値(添え字)には式、数値、変数、配列変数、数値定数の利用が可能

式、数値、変数、配列変数、数値定数 の利用が名農

【説明】

変数に値を代入します。
値は式、数値、定数、変数、配列変数等を評価した整数値です。
配列変数への代入は、複数の値を指定した連続代入が可能です。指定した添え字を起点に順番に代入します。

LET @(3)=1,2,3,4,5

上記の記述は、

LET @(3)=1: LET @(4)=2: LET @(5)=3: LET @(5)=4: LET @(5)=5

と同じです。

LET は省略可能です。
次の2は同じ結果となります。

LETの省略
LET A=A+1
A=A+1
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

LET without variable

変数が指定されていない

【利用例】
変数Iに値を代入します
1 'Print starts
10 LET I=0:'initialize value
20 PRINT "*";
30 LET I=I+1:IF I<10 GOTO 20
40 PRINT
50 END

3.5. 仮想メモリー参照

3.5.1. PEEK 指定アドレスの値参照(数値関数)

指定アドレスの値参照

【書式】

PEEK (仮想アドレス)

【引数】
仮想アドレス

参照を行うSRAM領域先頭からの相対バイトアドレス(16ビット) : $0000 ~

【戻り値】

指定した仮想アドレスに格納されている1バイトデータ:0~255

【説明】

指定した仮想アドレスに格納されている値(1バイト)を返します。
仮想アドレスの指定には次の定数を利用することで有用な領域への参照が簡単に行えます。

定数名

仮想化ドレス名

概要

VRAM

画面表示用メモリ(CW×CH)

サイズはSCREENモードにより可変

VAR

変数領域

サイズ 416バイト

ARRAY

配列変数領域(@(0)~@(99) )

サイズ200バイト

PRG

プログラム領域

サイズ 4096バイト

MEM

ユーザーワーク領域

サイズ1024バイト

GRAM

グラフィック表示用メモリ

サイズはSCREENモードにより可変

仮想アドレスの詳細については、「メモリーマップ」の「仮想アドレス」を参照下さい。
ユーザーワーク領域は利用者が自由に利用出来る領域です。
それ以外の領域はBASICの実行にて利用する領域です。
例として画面上のカーソル位置X,Yに格納されている文字の参照は次のようになります。

C = PEEK(VRAM+Y*CW+X)
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Out of range value

領域外のアドレスを指定した

'(' or ')' expected

括弧の指定が正しくない

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
文字"A"のフォントデータを参照し、2進数で表示する
10 FOR I=0 TO 7
20 D=PEEK(FNT+ASC("A")*8+I)
30 PRINT BIN$(D,8)
40 NEXT I
実行結果
run
01110000
10001000
10001000
10001000
11111000
10001000
10001000
00000000
OK

3.5.2. POKE 指定アドレスへのデータ書き込み

指定アドレスへのデータ書き込み

【書式】

POKE 仮想アドレス , データ
POKE 仮想アドレス , データ , データ , … ,データ(可変個数指定)

【引数】
仮想アドレス

仮想アドレス(16ビット): $0000 ~

データ

書き込むデータ(下位8ビットのみ有効)

【説明】

指定した仮想アドレスに指定したデータを書き込みます。
仮想アドレスの指定には次の定数を利用することで有用な領域への書込みが簡単に行えます。

定数名

仮想化ドレス名

概要

VRAM

画面表示用メモリ(CW×CH)

サイズはSCREENモードにより可変

VAR

変数領域

サイズ 416バイト

ARRAY

配列変数領域(@(0)~@(99) )

サイズ200バイト

PRG

プログラム領域

サイズ 4096バイト

MEM

ユーザーワーク領域

サイズ1024バイト

GRAM

グラフィック表示用メモリ

サイズはSCREENモードにより可変

仮想アドレスの詳細については、「メモリーマップ」の「仮想アドレス」を参照下さい。

ユーザーワーク領域は利用者が自由に利用出来る領域です。
それ以外の領域はBASICの実行にて利用する領域です。
指定した仮想アドレスに上記以外の領域を指定した場合はエラーとなります。

例として画面上のカーソル位置X,Yへの文字の書込みは次のようになります。
VRAMに書き込んだ内容を画面の表示に反映するには REDRAW コマンドを実行します。

REDRAW利用例
10 POKE VRAM+Y*80+X,ASC("A")
20 REDRAW
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Out of range value

S領域外のアドレスを指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
変数AからZの内容をユーザーワーク領域に保存する
10 FOR I=0 TO 51
20 POKE MEM+I,PEEK(VAR+I)
30 NEXT I

3.6. 時間

3.6.1. TICK 経過時間取得(数値関数)

経過時間取得

【書式】

TICK ()
TICK (モード)

【引数】
モード

0:経過時間をミリ秒単位で取得する(デフォルト)
1:経過時間を秒単位で取得する

【戻り値】

モード指定に従った経過時間を返す。
モード 0: 0 ~ 32767 ミリ秒の経過時間を返す(約32.767秒でオーバーフロー)
モード 1: 0 ~ 32767 秒の経過時間を返す(約9.1時間でオーバーフロー)

【説明】

起動からの経過時間を返します。経過時間は CLT コマンドにて初期化が可能です。
CLT コマンドと組み合わせて使うことで、処理時間の測定を行うことが出来ます。
モード指定無し、または0を指定の場合、ミリ秒単位の経過時間を返します。
1を指定した場合は、秒単位の経過時間を返します。

注意
オーバーフローが発生しますので、長時間の測定には利用することが出来ません。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

'(' or ')' expected

’(‘ または ‘)’がない、引数の指定が正しくない

Illegal value

モードの指定値が正しくない

Overflow

モードの指定値が-32767 ~ 32767を超えている

【利用例】
1万回ループの実行時間を測定する
10 A=0
20 CLT
30 FOR I=1 TO 10000
40 A=A+1
50 NEXT I
60 PRINT A
70 PRINT TICK();"msec"

RUN
10000
225msec

3.6.2. DATE 現在時刻の表示

現在時刻の表示

【書式】
【引数】

なし

【説明】

内蔵RTCから現在の時刻を読み、その情報を画面に表示します。

注意
内蔵RTC用のバックアップ電池を搭載していないボードでは、
時刻情報は電源OFFにより初期化されます。
その場合は SETDATE コマンドにて時刻設定を行って下さい
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
時刻の設定と表示を行う
SETDATE 2017,4,1,12,00,00
OK
DATE
2017/04/01 [Sat] 12:00:03
OK

3.6.3. GETDATE 日付の取得

日付の取得

【書式】

GETDATE 年格納変数, 月格納変数, 日格納変数, 曜日格納変数

【引数】
年格納変数

取得した西暦年を格納する変数を指定

月格納変数

取得した月を格納する変数を指定

日格納変数

取得した日を格納する変数を指定

曜日格納変数

取得した曜日コードを格納する変数を指定

【説明】

内蔵RTCから日付情報を取得し、その値を指定した変数に格納します。
格納される値は次の通りです。

年格納変数: 西暦年4桁整数 1970 ~ 2036
月格納変数: 1 ~ 12
日格納変数: 1 ~ 31
曜日格納変数: 曜日コード 0 ~ 6(0:月 1:火 2:水 3:木 4:金 5:土 6:日)

注意
内蔵RTC用のバックアップ電池を搭載していないボードでは、
時刻情報は電源OFFにより初期化されます。
その場合は SETDATE コマンドにて時刻設定を行って下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
現在の日付を取得する
DATE
2017/04/01 [Sat] 12:03:05
OK
GETDATE A,B,C,D
OK
PRINT a;b;c;d
2017416
OK

3.6.4. GETTIME 時刻の取得

時刻の取得

【書式】

GETTIME 時格納変数 , 分格納変数 , 秒格納変数

【引数】
時格納変数

取得した時を格納する変数を指定

分格納変数

取得した分を格納する変数を指定

秒格納変数

取得した秒を格納する変数を指定

【説明】

内蔵RTCから日付情報を取得し、その値を指定した変数に格納します。
格納される値を次の通りです。

時格納変数: 0 ~ 23 整数
分格納変数: 0 ~ 59 整数
秒格納変数: 0 ~ 59 整数

注意
内蔵RTC用のバックアップ電池を搭載していないボードでは、
時刻情報は電源OFFにより初期化されます。
その場合は SETDATE コマンドにて時刻設定を行って下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
現在の時間を取得する
DATE
2017/04/01 [Sat] 12:10:51
OK
GETTIME A,B,C
OK
PRINT #-2,a;":";b;":";c
12:11:01
OK
補足
PRINT 文の #-2 は数値を2桁(0付き)で表示する指定です。

3.6.5. CLT 経過時間カウントのリセット

経過時間カウントのリセット

【書式】

CLT

【引数】

なし

【説明】

起動からの経過時間カウンタをリセット(0を設定)します。
TICK 関数使う前に経過時間カウントをリセットすることで0からのカウントを行うことが出来ます。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
1万回ループの実行時間を測定する
10 A=0
20 CLT
30 FOR I=1 TO 10000
40 A=A+1
50 NEXT I
60 PRINT A
70 PRINT TICK();"msec"

RUN
10000
225msec

3.6.6. SETDATE 時刻の設定

時刻の設定

【書式】

SETDATE 年,月,日,時,分,秒

【引数】

1900 ~ 2036 の西暦年4桁の整数

1 ~ 12 の整数

1 ~ 31 の整数

0 ~ 23 の整数

0 ~ 59 の整数

0 ~ 59 の整数

【説明】

指定した時刻を内蔵RTCに設定します。

注意
内蔵RTC用のバックアップ電池を搭載していないボードでは、
時刻情報は電源OFFにより初期化されます。
その場合は SETDATE コマンドにて時刻設定を行って下さい。
【エラーメッセージ】
Illegal value

指定した引数の数値が有効範囲以外

Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
時刻の設定と表示を行う
Y=2017:M=4:D=1:H=12:N=0:S=0
SETDATE Y,M,D,H,N,S
OK
DATE
2017/04/01 [Sat] 12:00:03
OK

3.6.7. WAIT 時間待ち

時間待ち

【書式】

WAIT 待ち時間(ミリ秒)

【引数】
待ち時間

0 ~ 32767 (単位 ミリ秒)

【説明】

引数で指定した時間(ミリ秒単位)、時間待ち(ウェイト)を行います。
最大で32767ミリ秒(32.8秒)の時間待ちが可能です。
長い時間待ちを行う必要がある場合は、TICK 関数や GETTIME コマンドを使った方法を検討してください。

注意
時間待ち中はキー操作によるプログラム中断を行うことは出来ません。
短い時間の指定にてループ処理を行う等の対策を行ってください。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

待ち時間に範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
画面上の指定位置に時刻を1秒間隔で更新表示する
10 SETDATE 2017,4,1,12,0,0
20 CLS
30 LOCATE 5,5
40 DATE
50 WAIT 1000
60 GOTO 30

3.7. GPIO I/O入出力

3.7.1. ANA アナログ入力(数値関数)

アナログ入力

【書式】

ANA (ピン番号)

【引数】
ピン番号

0 ~ 7, 16, 17 または以下のピン番号定数

PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7,
PB0, PB1

【戻り値】

取得した値: 0~4095(12ビット)

【説明】

指定ピンのアナログ入力値を読み取り、その値を返します。
アナログ入力を行う場合は事前に GPIO コマンドによる機能設定(アナログ入力)が必要です。

注意
ピン番号の指定範囲及び定数は、ST32F103C8T6での利用を想定したものです。
ST32F103C8T6以外のMPUにて使う場合は、機能設定できない場合があります。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

ピン番号、モードに範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’がない

【利用例】
PB1ピンからアナログ入力値を読み取り、その値を画面に随時表示する
10 CLS
20 GPIO PB01,ANALOG
30 A=ANA(PB1)
40 LOCATE 5,5: ? A; "     "
50 GOTO 30

3.7.2. GPIO GPIO機能設定

GPIO機能設定

【書式】

GPIO ピン番号, モード

【引数】
ピン番号

0 ~ 34
ピン番号は数値の他に次のピン番号定数での指定も可能です。

PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA13, PA14, PA15,
PB0, PB1, PB2, PB3, PB4, PB5, PB8, PB10, PB11, PB12, PB13, PB14, PB15,
PC13

モード
OUTPUT_OD

デジタル出力(オープンドレイン)

OUTPUT

デジタル出力

INPUT_FL

デジタル入力(フロート状態:ArduinoのINPUT指定と同じ)

INPUT_PU

デジタル入力(内部プルアップ抵抗有効)

INPUT_PD

デジタル(内部プルダウン抵抗有効)

ANALOG

アナログ入力

PWM

PWM出力

【説明】

ボード上の指定したピン番号の入出力機能の設定を行います。
ArduinoのpinMode 関数に相当します。
ピン番号の指定には、0 ~ 34の数値または、定数 PA0PC15 が可能です。
また、GPIO は省略可能です。下記の2つは等価です。

GPIO PA0,OUTPUT
PA0,OUTPUT

各モードの機能に対応しているピン番号は次の表の通りです。

表 5. 各モードで利用可能なピン番号

モード

ピン番号

OUTPUT_OD
OUTPUT
INPUT_FL
INPUT_PU
INPUT_PD

PA0,PA1,PA2,PA3,PA4,PA5,PA6,PA7,PA8,PA9,PA10,PA13,PA14,PA15,
PB0,PB1,PB2,PB3,PB4,PB5,PB8,PB10,PB11, PB12,PB13,PB14,PB15,
PC13

ANALOG

PA0,PA1,PA2,PA3,PA4,PA5,PA6,PA7,PB0,PB1

PWM

グループ1: PA6,PA7,PB0,PB1
グループ2 : PA8,PA9,PA10

PWMのグループ内ではPWM周波数が共通設定となります。

ピン番号にサポートしていないモードを指定した場合、
エラー( Cannot use GPIO fuintion )となります。

注意
ピン番号の指定範囲及び定数は、
ST32F103C8T6での利用を想定したものです。
ST32F103C8T6以外のMPUにて使う場合は、
機能設定できない場合があります。
注意
利用するシステム構成により、利用出来ないピンがあります。
詳細については、「ボート上のピン一覧」を参照して下さい。

起動直後では各ピンの設定は、デジタル入力( INPUT_FL )、
またはアナログ入力( ANALOG )となります。
ただし、これは動作を保障するものではありません。
GPIO コマンドによる機能設定を行って下さい。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

ピン番号、モードに範囲外の値を指定した

Cannot use GPIO fuintion

ピン番号に利用出来ないモード設定を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

Illegal value

指定した数値が不当である

【利用例】
PB1ピンからアナログ入力値を読み取り、その値を画面に随時表示する
10 CLS
20 GPIO PB01,ANALOG
30 A=ANA(PB1)
40 LOCATE 5,5: ? A; "     "
50 GOTO 30 

3.7.3. I2CR I2Cデータ受信(数値関数)

I2Cデータ受信

【書式】

I2CR (デバイスアドレス, コマンドアドレス, コマンド長, 受信データアドレス, データ長)

【引数】
デバイスアドレス

0 ~ 127 ($00 ~ $7F)(7ビット指定)
  I2Cスレーブアドレスを7ビット形式で指定

コマンドアドレス

0 ~ 32767($0000 ~ $1FFFF)
  送信するコマンドが格納されている仮想アドレス

コマンド長

0 ~ 32767
  送信するコマンドのバイト数

受信データアドレス

0 ~ 32767($0000 ~ $1FFFF)
  受信データを格納するSRAM内仮想アドレス

データ長

0 ~ 32767
  受信するデータのバイト数

【説明】

I2Cスレーブデバイスからデータを受信します。

注意
I2Cバスは必ずプルアップ抵抗によるプルアップを行って下さい。
プルアップされていない状態で I2CR 関数を実行するとハングアップします。

送信先はデバイスアドレスにてI2Cスレーブアドレスを指定します。
受信において、コマンド等の制御データの送信が必要な場合は、
コマンドアドレス、コマンド長にて送信するデータを指定します。
受信のみを行う場合は、コマンドアドレス、コマンド長に0を設定します。

送信受信するデータは仮想アドレスにて指定します。
仮想アドレスの指定には次の定数を利用することで有用な領域への書込み・参照が簡単に行えます。

定数名

仮想化ドレス名

概要

VRAM

画面表示用メモリ(CW×CH)

サイズはSCREENモードにより可変

VAR

変数領域

サイズ 416バイト

ARRAY

配列変数領域(@(0)~@(99) )

サイズ200バイト

PRG

プログラム領域

サイズ 4096バイト

MEM

ユーザーワーク領域

サイズ1024バイト

GRAM

グラフィック表示用メモリ

サイズはSCREENモードにより可変

仮想アドレスの詳細については、「メモリーマップ」の「仮想アドレス」を参照下さい。

I2C通信には次の接続ピンを利用します。
PB6:SCL(I2Cクロック)
PB7:SDA(I2Cデータ)

注意
有効な仮想アドレス以外の領域への参照はエラーとなります。
【戻り値】

0:正常終了
1:通信バッファに対してデータが長すぎる
2:アドレス送信にNACKが返された
3:データ送信にNACKが返された
4:その他のエラー

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

指定した引数の値が不当である

Out of range value

指定した値が有効範囲を超えている

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
I2C EEPROM(AT24C256 スレーブアドレス $50)にデータの読み書きを行う
100 POKE MEM+0,$00,$00
110 POKE MEM+2,64,65,66,67
120 R=I2CW($50,MEM,2,MEM+2,4)
130 ? "snd r=";R
140 POKE MEM+6,0,0,0,0
150 WAIT 5
160 R=I2CR($50,MEM,2,MEM+6,4)
170 ? "rcv r=";R
180 ? "rcv data:";
190 FOR I=0 TO 3
200 ? PEEK(MEM+6+I);" ";
210 NEXT I
220 ?
実行結果
run
snd r=0
rcv r=0
rcv data:64 65 66 67
OK

3.7.4. I2CW I2Cデータ送信(数値関数)

I2Cデータ送信

【書式】

I2CW (デバイスアドレス, コマンドアドレス, コマンド長, データアドレス, データ長)

【引数】
デバイスアドレス

0 ~ 127 ($00 ~ $7F)(7ビット指定)
  I2Cスレーブアドレスを7ビット形式で指定

コマンドアドレス

0 ~ 32767($0000 ~ $1FFFF)
  送信するコマンドが格納されている仮想アドレス

コマンド長

0 ~ 32767
  送信するコマンドのバイト数

データアドレス

0 ~ 32767($0000 ~ $1FFFF)   送信するデータが格納されているSRAM内仮想アドレス

データ長

0 ~ 32767   送信するデータのバイト数

【説明】

I2Cスレーブデバイスにデータを送信します。
(注意)I2Cバスは必ずプルアップ抵抗によるプルアップを行って下さい。
プルアップされていない状態で I2CW 関数を実行するとハングアップします。

送信先はデバイスアドレスにてI2Cスレーブアドレスを指定します。
送信するデータはSRAM先頭からの仮想アドレスにて指定します。
送信するデータはあらかじめ、設定しておく必要があります。
コマンドとデータの区別はありません。デバイスに対しては、単純にコマンド、データの順に送信しています。

仮想アドレスの指定には次の定数を利用することで有用な領域への書込み・参照が簡単に行えます。

定数名

仮想化ドレス名

概要

VRAM

画面表示用メモリ(CW×CH)

サイズはSCREENモードにより可変

VAR

変数領域

サイズ 416バイト

ARRAY

配列変数領域(@(0)~@(99) )

サイズ200バイト

PRG

プログラム領域

サイズ 4096バイト

MEM

ユーザーワーク領域

サイズ1024バイト

GRAM

グラフィック表示用メモリ

サイズはSCREENモードにより可変

仮想アドレスの詳細については、「メモリーマップ」の「仮想アドレス」を参照下さい。

I2C通信には次の接続ピンを利用します。
PB6:SCL(I2Cクロック)
PB7:SDA(I2Cデータ)

注意
有効な仮想アドレス以外の領域への参照はエラーとなります。
【戻り値】

0:正常終了
1:通信バッファに対してデータが長すぎる
2:アドレス送信にNACKが返された
3:データ送信にNACKが返された
4:その他のエラー

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

指定した引数の値が不当である

Out of range value

指定した値が有効範囲を超えている

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
I2C EEPROM(AT24C256 スレーブアドレス $50)にデータの読み書きを行う
100 POKE MEM+0,$00,$00
110 POKE MEM+2,64,65,66,67
120 R=I2CW($50,MEM,2,MEM+2,4)
130 ? "snd r=";R
140 POKE MEM+6,0,0,0,0
150 WAIT 5
160 R=I2CR($50,MEM,2,MEM+6,4)
170 ? "rcv r=";R
180 ? "rcv data:";
190 FOR I=0 TO 3
200 ? PEEK(MEM+6+I);" ";
210 NEXT I
220 ?
実行結果
run
snd r=0
rcv r=0
rcv data:64 65 66 67
OK
接続しているI2Cスレーブを調べる
10 FOR I=0 TO $7F
20 C=I2CW(I,MEM,0,MEM,0)
30 IF C=0 PRINT HEX$(I,2);" ";
40 NEXT I
50 PRINT :PRINT "done."

実行結果
run
50
done.
OK
補足
I2Cスレーブアドレスのみ送信し、正常終了(ACKを返した)のアドレスを調べています。

3.7.5. IN デジタル入力(数値関数)

デジタル入力

【書式】

IN (ピン番号)

【引数】
ピン番号

0 ~ 34
ピン番号は数値の他に次のピン番号定数の指定も可能です。

PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA13, PA14, PA15,
PB0, PB1, PB2, PB3, PB4, PB5, PB8, PB10, PB11, PB12, PB13, PB14, PB15,
PC13

【戻り値】

取得した値 : 0 (LOW) または 1 (HIGH)

【説明】

指定ピンの入力値を読み取り、その値を返します。
入力を行う場合は事前に GPIO コマンドによる機能設定(入力設定)が必要です。

注意
ピン番号の指定範囲及び定数は、ST32F103C8T6での利用を想定したものです。
ST32F103C8T6以外のMPUにて使う場合は、機能設定できない場合があります。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

ピン番号、モードに範囲外の値を指定した

Cannot use GPIO fuintion

ピン番号に利用出来ないモード設定を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’がない

【利用例】
PA0ピン接続しているタクトスイッチを押すLEDが点灯する
10 GPIO PC13,OUTPUT
20 GPIO PA0,INPUT_PU
30 IF IN(PA0)=OFF ?"ON":OUT PC13,0 ELSE ?"OFF":OUT PC13,1
40 WAIT 200
50 GOTO 30
IN sample
図 1. LED点灯制御

タクトスイッチを押すと、BullPillボード上のLEDが点灯します。
PA0ピンは GPIO コマンドで INPUT_PU (プルアップ抵抗あり)を設定し、
ボタンを押さない場合はHIGH、押した場合はLOWとなります。
その値を IN 関数で取得し、LEDを制御しています。

BluePillボード上のLEDは、PC13がソース(吸い込み)制御を行うため、
LOW を出力するとLEDが点灯します。 <<<

3.7.6. SHIFTIN デジタルシフトアウト入力(数値関数)

デジタルシフトアウト入力

【書式】

SHIFTIN (データピン番号, クロックピン番号, 入力形式)
SHIFTIN (データピン番号, クロックピン番号, 入力形式, 条件)

【引数】
データピン番号

0 ~ 34 データを出力するピン

クロックピン番号

0 ~ 34 クロックを出力するピン

ピン番号は数値の他に次のピン番号定数の指定も可能です。

PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA13, PA14, PA15,
PB0, PB1, PB2, PB3, PB4, PB5, PB8, PB10, PB11, PB12, PB13, PB14, PB15,
PC13

出力形式

出力するデータの順番を次の値を指定する
LSB または 0 : 下位ビットから出力する
MSB または 1 : 上位ビットから出力する

条件

LOW または HIGH
データピンからのデータを読み取るクロックのタイミングを指定する。
LOW: クロックがLOWの場合にデータを読み取る。
HIGH: クロックがHIGHの場合にデータを読み取る。

【戻り値】

入力値(1バイト)

【説明】

クロックにて同期を行い、データピンから1バイト分のデータを1ビットずつ入力します。
ArduinoのshiftIn関数と同等の動作をします。
引数に条件を指定した場合、クロックが指定した状態の時にデータピンからデータを読み取ります。
条件を指定していない場合は、条件はHIGH(ArduinoのshiftIn関数と同様の仕様)となります。

データピン、クロックピンは事前に GPIO コマンドによる機能設定(デジタル入出力)が必要です。

注意
ピン番号の指定範囲及び定数は、ST32F103C8T6での利用を想定したものです。
ST32F103C8T6以外のMPUにて使う場合は、機能設定できない場合があります。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

ピン番号、モードに範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’がない

【利用例】
ファミコン用ゲームパッドからボタン操作情報を取得する
10 CLS
20 GPIO PB12,INPUT_FL
30 GPIO PB13,OUTPUT
40 GPIO PB14,OUTPUT
50 OUT PB13,HIGH
60 OUT PB13,LOW
70 R=SHIFTIN(PB12,PB14,LSB,LOW)
80 LOCATE 0,0:?BIN$(R,8)
90 WAIT 100
100 GOTO 50

3.7.7. SHIFTOUT デジタルシフトアウト出力

デジタルシフトアウト出力

【書式】

SHIFTOUT データピン番号, クロックピン番号, 出力形式, 出力データ

【引数】
データピン番号

0 ~ 34 データを出力するピン

クロックピン番号

0 ~ 34 クロックを出力するピン

ピン番号は数値の他に次のピン番号定数の指定も可能です。

PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA13, PA14, PA15,
PB0, PB1, PB2, PB3, PB4, PB5, PB8, PB10, PB11, PB12, PB13, PB14, PB15,
PC13

出力形式

出力するデータの順番を次の値を指定する
LSB または 0 : 下位ビットから出力する
MSB または 1 : 上位ビットから出力する

出力データ

整数値(下位8ビットのみ有効)

【説明】

クロックにて同期を行い、データピンから1バイト分のデータを1ビットずつ出力します。
ArduinoのshiftOut関数と同等の動作をします。
データピン、クロックピンは事前に GPIO コマンドによる機能設定(デジタル出力)が必要です。

注意
ピン番号の指定範囲及び定数は、ST32F103C8T6での利用を想定したものです。
ST32F103C8T6以外のMPUにて使う場合は、機能設定できない場合があります。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

ピン番号、モードに範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
シフトレジスタ74HC595を使ってLED8個を制御する
10 GPIO PB12,OUTPUT
20 GPIO PB13,OUTPUT
30 GPIO PB14,OUTPUT
40 D=$80
50 FOR I=0 TO 6
60 GOSUB "led"
70 D=D>>1
80 WAIT 200
90 NEXT I
100 FOR I=0 TO 6
110 GOSUB "led"
120 D=D<<1
130 WAIT 200
140 NEXT I
150 GOTO 40
160 "led"
170 OUT PB13,LOW
180 SHIFTOUT PB12,PB14,MSB,D
190 OUT PB13,HIGH
200 TONE 600,10
210 RETURN

3.7.8. OUT デジタル出力

デジタル出力

【書式】

OUT ピン番号, 出力値

【引数】
ピン番号

0 ~ 34
ピン番号は数値の他に次のピン番号定数の指定も可能です。

PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA13, PA14, PA15,
PB0, PB1, PB2, PB3, PB4, PB5, PB8, PB10, PB11, PB12, PB13, PB14, PB15,
PC13

出力値

LOW または 0 : 0Vを出力する
HIGH or 0以外の値 : 3.3Vを出力する

【説明】

指定ピンから、指定した出力を行います。
出力を行う場合は事前に GPIO コマンドによる機能設定(出力設定)が必要です。

注意
ピン番号の指定範囲及び定数は、ST32F103C8T6での利用を想定したものです。
ST32F103C8T6以外のMPUにて使う場合は、機能設定できない場合があります。
注意
利用するシステム構成により、利用出来ないピンがあります。詳細については、
「ボート上のピン一覧」を参照して下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Cannot use GPIO fuintion

ピン番号に利用出来ないモード設定を行った

Illegal value

ピン番号、モードに範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
Blue Pillボードの搭載LED(PC13ピン)を点滅させる
10 P=PC13
20 GPIO P,OUTPUT
30 OUT P,HIGH
40 FOR I=1 TO 10
50 OUT P,LOW
60 WAIT 300
70 OUT P,HIGH
80 WAIT 300
90 NEXT I

3.7.9. POUT PWM出力

PWM出力

【書式】

POUT ピン番号, デューティー値
POUT ピン番号, デューティー値, 周波数

【引数】
ピン番号

グループ1: 6, 7, 8, 9
グループ2: 10, 16, 17

ピン番号に対応する下記のピン定数の指定も利用可能です。
グループ1: PA6,PA7,PB0,PB1
グループ2: PA8,PA9,PA10

デューティー値

0 ~ 4095
0がデューティー比 100%となります。
4095がデューティー比 100%となります。

周波数

0 ~ 32767 (単位 Hz)
指定しない場合は490Hzとなります(Arduino Uno互換)
周波数はピン番号のグループ内で共通

PWMのグループ内ではPWM周波数が共通設定となります。
【説明】

指定ピンから、PWM出力を行います。
出力を行う場合は事前に GPIO コマンドによるPWM設定(出力設定)が必要です。
パルス出力を停止する場合は、デューティー値に0を指定して下さい。

注意
ピン番号の指定範囲及び定数は、ST32F103C8T6での利用を想定したものです。
ST32F103C8T6以外のMPUにて使う場合は、機能設定できない場合があります。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

ピン番号、モードに範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
アナログジョイスティックでサーボーモーターの制御を行う
1 'サーボモーターセイギョ
5 CLS
10 GPIO PB0,ANALOG
20 GPIO PA8,PWM
30 P=MAP(ANA(PB0),0,4095,102,491)
40 POUT PA8,P,50
45 D=MAP(P,102,491,-90,90)
47 LOCATE 0,0:?#3,D
50 GOTO 30

3.7.10. PULSEIN 入力パルス幅の計測力(数値関数)

入力パルス幅の計測力

【書式】

PULSEIN (パルス入力ピン番号 , 検出信号 , タイムアウト )
PULSEIN (パルス入力ピン番号 , 検出信号 , タイムアウト , スケール値 )

【引数】
パルス入力ピン番号

データを入力するピン: 0 ~ 34 

ピン番号は数値の他に次のピン番号定数の指定も可能です。

PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7, PA8, PA9, PA10, PA13, PA14, PA15,
PB0, PB1, PB2, PB3, PB4, PB5, PB8, PB10, PB11, PB12, PB13, PB14, PB15,
PC13

検出信号

LOW、HIGH または 0 、1 測定対象のパルス

タイムアウト

パルス検出待ちタイムアウト時間 0 ~ 32767 (ミリ秒)

スケール値

計測時間のスケール変換 1 ~ 1327671 (デフォルト値 1)

【戻り値】

正常時: 測定した パルス幅 0 ~ 32767(単位はスケール値 × マイクロ秒)
タイムアウト時:0
オバーフロー時:-1

【説明】

パルス入力ピン番号で指定したピンから入力される信号のパルス幅を計測し、その値を返します。

測定完了は、入力ピンの状態が検出信号の状態になった時点で計測を開始し、
検出信号の状態でなくなた時点で計測を終了します。
たとえば、測定する検出信号がHIGHの場合、PULSEIN 関数はピンがHIGHになるのを待ち、
HIGHになった時点で計測を開始し、ピンがLOWになるタイミングで計測を終了し、
そのパルスの長さを返します。タイムアウト内に完全なパルスが受信されなかった場合は0を返します。

測定したパスルが整数値32767を超えた場合は、オーバーフローとし-1を返します。
オーバーフローを回避したい場合は、スケール値を適宜調整して下さい。

スケール値が1の場合、1~31767マイクロ秒までのパルスの測定を行うことが出来ます。
この場合、500kHz~15Hzまでのパルスを測定出来ます。
15Hzより遅い、信号の測定はオーバーフローが発生します。

スケール値が1000の場合、1~31767ミリ秒までのパルスの測定を行うことが出来ます。
この場合、500Hz~0.015Hzまでのパルスの測定が可能です。

本関数はArduinoの pulseIn 関数を利用して計測しています。
測定値はあくまでも目安であり、精度はあまり高くありません。
データピン、クロックピンは事前に GPIO コマンドによる機能設定(デジタル入出力)が必要です。

注意
ピン番号の指定範囲及び定数は、ST32F103C8T6での利用を想定したものです。
ST32F103C8T6以外のMPUにて使う場合は、機能設定できない場合があります。

NTSC版では、NTSCビデオ信号生成を随時並行して行っているため測定値に誤差が生じます。
NTSC版で利用の場合は、コンソールモードにで測定することで精度が向上します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

ピン番号、モードに範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’がない

【利用例】
パスル幅を計測する
10 CLS
20 GPIO PA8,INPUT_PU
30 A=PULSEIN(PA8,LOW,200,1)
40 LOCATE 0,0:?#8,A
50 GOTO 30
補足
PA8ピンは5Vトレラント(5Vの入力が可能)です。
パスル計測等には5Vトレラントのピンの利用を推奨します。

3.8. サウンド

3.8.1. TONE 単音出力

単音出力

【書式】

TONE 周波数
TONE 周波数, 出力期間

【引数】
周波数

0 ~ 32767 (Hz) 0の場合は消音

出力期間

0 ~ 32767 (ミリ秒) 0の場合は、継続再生

【説明】

PB9 ピンより、指定した周波数のパルス出力(デューティ比50%)を行います。
PB9 ピンに圧電スピーカー(圧電サウンダ)を接続すること音を出すことが出来ます。

出力期間の指定がある場合は、その期間パスルを出力します(ミリ秒単位)。
出力期間の指定がある場合、出力完了待ちを行います。
出力期間の指定がない場合は、NOTONE コマンドで停止指示をするまでパスルを出力し続けます。
TONE 0は NOTONE と等価です)

表 6. 音階・周波数対応表

ド♯

レ♯

ファ

ファ♯

ソ♯

ラ♯

1

33

35

37

39

41

44

46

49

52

55

58

62

2

65

69

73

78

82

87

93

98

104

110

117

123

3

131

139

147

156

165

175

185

196

208

220

233

247

4

262

277

294

311

330

349

370

392

415

440

466

494

5

523

554

587

622

659

698

740

784

831

880

932

988

6

1047

1109

1175

1245

1319

1397

1480

1568

1661

1760

1865

1976

7

2093

2217

2349

2489

2637

2794

2960

3136

3322

3520

3729

3951

8

4186

4435

4699

4978

5274

5588

5920

6272

6643

7040

7459

7902

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
スペースキーを押したら音を鳴らす
10 IF INKEY() = 32 TONE 800,50
20 GOTO 10

3.8.2. NOTONE 単音出力停止

単音出力停止

【書式】
【引数】

なし

【説明】

TONE コマンドによるパスル出力を停止します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
音を停止する
10 TONE 400
20 WAIT 200
30 NOTONE

3.8.3. PLAY 音楽演奏(MML文)

音楽演奏(MML文)

【書式】

PLAY "MML文"

【引数】
MML文

MMLを定義した文字列

【説明】

MML(Music Macro Language)にて定義した文法を元に、
接続している圧電スピーカーを使って単音による、音楽演奏を行います。

MML文には次のコマンドを利用することが出来ます。

音階記号 [#|+|-][長さ][.]
  • 音階指定:C、D、E、F、G、A、B または c、d、e、f、g、a、b
    順番に ド、レ、ミ、ファ、ソ、ラ、シ、ド の音階に対応します。
    # :半音上げる(省略可能)
    + :半音上げる(省略可能)
    - :半音下げる(省略可能)

  • 長さ :1、2、4、8、16、32、64
    (省略時はLによる長さ、デフォルト値 4)、省略可能
    1は全音符、2は2分音符、4は四分音符、64は64分の一音符

  • .:長さを半分伸ばす

R[長さ][.]:休符
  • 長さ:1、2、4、8、16、32、64
    (省略時はLによる長さ、デフォルト値 4)、省略可能
    1は全音符、2は2分音符、4は四分音符、64は64分の一音符

  • .:長さを半分伸ばす

L<長さ>[.] : 音の長さ指定

音階記号の長さ省略時の長さの設定。設定前初期値は4(四分音符)

  • 長さ: 1、2、4、8、16、32、64
    (省略時はLによる長さ、デフォルト値 4)、省略可能
     1は全音符、2は2分音符、4は四分音符、64は64分の一音符

  • .:長さを半分伸ばす

O<オクターブ> : 音の高さを指定
  • オクターブ:1~8 初期値は4

< :1オクターブ下げる
> :1オクターブ上げる
T<テンポ>:テンポを指定

初期値は120、32~255

V<音の大きさ>:ボリューム設定

初期値は15、0(無音) ~ 15(最大)
PWMのパルス幅で音の大きさを簡易的に再現しています。

?:デバッグON

演奏中の音階記号を表示します。
PLAYコマンド事に指定する必要があります。

空白文字

何もせずスキップします。

演奏の中断は ESC キー2回押し、または CTRL+Cキーにて行うことが出来ます。

PLAY 文中で変更したテンポ、L指定による省略時の長さ、音の高さは、
それ以降に実行する PLAY 文にも引継ぎます。
ただし、RUN コマンドにプログラム実行時に、L指定による省略時の長さ、
音の高さはデフォルト値に初期化されます(テンポは初期化されません)。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal MML

MML文の文法エラー

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
「ドラミファソラシド」と演奏する
PLAY "CDEFGAB>C"
OK
「ねこふんじゃった」を演奏する
1'ねこふんじゃった
10 PLAY "v15l16d+c+r8f+rf+rd+c+r8f+rf+rd+c+l8rf+r
20 PLAY "f+rl16frfrd+c+r8frfrd+c+r8frfrd+c+l8"
30 PLAY "rfrfrl16f+rf+rd+c+r8f+rf+rd+c+r8f+r
40 PLAY "f+rd+c+l8rf+rf+rl16frfrd+c+r8frfrd+c+r8fr"
50 PLAY "frd+c+l8rfrfrl16f+rf+rd+c+l8rf+rf+rf+r
60 PLAY "f+rf+rf+rl16frfrd+c+l8rfrfrfrfrfrfrl16"
70 PLAY "f+rf+rd+c+r8f+rf+rd+c+r8f+rf+rd+c+l8r
80 PLAY "f+rf+rl16frfrd+c+r8frfrd+c+r8frfrd+c+l8"
90 PLAY "rfrfrl16f+rf+r8.f+rc+c+d8c+8.frf+"

MMLは、下記のサイトに公開されているものを利用しています。

3.8.4. TEMPO 音楽演奏のテンポの設定

音楽演奏のテンポの設定

【書式】

TEMPO テンポ

【引数】
テンポ

32 ~ 500 (デフォルト 120)

【説明】

PLAY コマンドによる音楽演奏のテンポの設定を行います。
デフォルト値は120です。

【エラーメッセージ】
Syntax error

:文法エラー、書式と異なる利用を行った

Illegal value

:引数に範囲外の値を指定した

Overflow

:指定した数値が-32768 ~ 32767を超えている

【利用例】
テンポを160に設定する
10 TEMPO 160
20 PLAY "CDEFGAB"

3.9. ファイル操作

3.9.1. BLOAD SDカードからバイナリデータ読込

SDカードからバイナリデータ読込

【書式】

BLOAD "ファイル名" , アドレス, バイト数

【引数】
"ファイル名"

"ディレクトリパス(省略可能) + ファイル8文字 + 拡張子3文字" の形式

アドレス

読み込みデータ格納アドレス $0000 ~

バイト数

読み込みデータサイズ 1~32767

【説明】

SDカードから指定したファイルの内容を指定したアドレスに指定バイト数分、読み込みます。
アドレスには仮想アドレスを有効範囲内で指定します。

仮想アドレスの指定には次の定数を利用することで有用な領域の指定が簡単に行えます。

定数名

仮想化ドレス名

概要

VRAM

画面表示用メモリ(CW×CH)

サイズはSCREENモードにより可変

VAR

変数領域

サイズ 416バイト

ARRAY

配列変数領域(@(0)~@(99) )

サイズ200バイト

PRG

プログラム領域

サイズ 4096バイト

MEM

ユーザーワーク領域

サイズ1024バイト

GRAM

グラフィック表示用メモリ

サイズはSCREENモードにより可変

仮想アドレスについては「メモリーマップ」の仮想アドレスを参照下さい。
仮想アドレスの詳細については、「メモリーマップ」の「仮想アドレス」を参照下さい。
定数名については、「定数」の「メモリ領域先頭アドレス定数」も参照ください。

BSAVE で保存したユーザーワーク領域、変数領域等内容を読み込んで利用することが出来ます。

ファイル名には、PRINT 文と同じ書式の記述が可能です。

10 N=1
20 BLOAD #-2,"DATA";N;".BIN",MEM,1024
OK

上記の例では、ファイル "DATA01.BIN"をユーザー作業領域に読み込みます。

注意
読み込むファイルは BSAVE コマンドで保存したファイルに限られます。
任意のファイルを読み込む場合は、ファイルの先頭に先頭に2バイト$00,$00を付加して下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

指定した引数が有効範囲を超えている

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File read error

SDカードからのファイル読み込みに失敗した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
NTSV画面表示の内容(グラフィック表示)をファイルに保存し、再表示を行う
BSAVE "GDATA.BIN",GRAM,6048
OK
CLS
OK
BLOAD "GDATA.BIN",GRAM,6048
OK

3.9.2. BSAVE SDカードへのバイナリデータ保存

SDカードへのバイナリデータ保存

【書式】

BSAVE "ファイル名" ,アドレス ,バイト数

【引数】
"ファイル名"

"ディレクトリパス(省略可能)+ファイル8文字+拡張子3文字" の形式

アドレス

保存データ格納アドレス: $0000~

バイト数

保存データサイズ: 1~32767

【説明】

指定アドレスに格納されいてるバイナリデータをSDカードに保存します。

アドレスには仮想アドレスを有効範囲内で指定します。

仮想アドレスの指定には次の定数を利用することで有用な領域の指定が簡単に行えます。

定数名

仮想化ドレス名

概要

VRAM

画面表示用メモリ(CW×CH)

サイズはSCREENモードにより可変

VAR

変数領域

サイズ 416バイト

ARRAY

配列変数領域(@(0)~@(99) )

サイズ200バイト

PRG

プログラム領域

サイズ 4096バイト

MEM

ユーザーワーク領域

サイズ1024バイト

GRAM

グラフィック表示用メモリ

サイズはSCREENモードにより可変

仮想アドレスについては「メモリーマップ」の仮想アドレスを参照下さい。
仮想アドレスの詳細については、「メモリーマップ」の「仮想アドレス」を参照下さい。
定数名については、「定数」の「メモリ領域先頭アドレス定数」も参照ください。

ファイル名には、PRINT 文と同じ書式の記述が可能です。

10 N=1
20 BSAVE #-2,"DATA";N;".BIN",MEM,1024
OK

上記の例では、ユーザー作業領域をファイル名 "DATA01.BIN"に保存します。

注意
保存データの先頭に2バイト$00,$00が付加されます。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

指定した引数が有効範囲を超えている

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File write error

SDカードへのファイル書き込みに失敗した。

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
グラフィック表示内容の保存と読み込み
BSAVE "GDATA.BIN",GRAM,6048
OK
CLS
OK
BLOAD "GDATA.BIN",GRAM,6048
OK

3.9.3. CAT ファイルの内容表示

ファイルの内容表示

【書式】

CAT "ファイル名"

【引数】
"ファイル名"

"ディレクトリパス(省略可能)+ファイル8文字+拡張子3文字" の形式(63文字まで)

【説明】

SDカード内の指定したテキストファイルの内容を画面に表示します。
表示テキストには先頭にコメントコマンド(')が付加されます。

ファイル名にはディレクトリ名+ファイル名の形式での記述が可能です。
上位のディレクトリ名は"/"です(名前指定において省略可能)。
次の2つは同じ動作をします。

CAT "/SAMPLE.BAS"
CAT "SAMPLE.BAS"

ディレクトリ内のファイルを表示する場合はそのディレクトリ名も指定します。

CAT "/SRC/SAMPLE.BAS"

または

CAT "SRC/SAMPLE.BAS"
注意
バイナリ形式のファイルには対応していません。

ファイル名には、PRINT 文と同じ書式の記述が可能です。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File read error

SDカードからのファイル読み込みに失敗した

【利用例】
ファイルの内容を表示する
CAT "/SRC/SAMPLE.BAS"
’10 PRINT "Hello Tiny BASIC”
’20 PRINT “Hello Arduino STM32”
’30 END
OK

3.9.4. LDBMP ビットマップファイルの読み込み

ビットマップファイルの読み込み

【書式】

LDBMP "ファイル名",仮想アドレス,bx,by, 幅, 高さ[,色指定]

【引数】
"ファイル名"

"ディレクトリパス(省略可能)+ファイル8文字+拡張子3文字" の形式

仮想アドレス

データの読み込みアドレス(仮想アドレス)

Bx

ビットマップ画像の切り出し横座標: 0 ~ 32767

By

ビットマップ画像の切り出し縦座標: 0 ~ 32767

ビットマップ画像の切り出しドット幅: 1 ~ 32767

高さ

ビットマップ画像の切り出しドット高: 1 ~ 32767

色指定

0 変換なし、1 反転

【説明】

SDカード内のWindowsビットマップファイル(モノクロ2値)の指定領域を
指定した仮想メモリ上に格納します。

読み込む画像はファイル名で指定します。
仮想アドレスの指定には次の定数を利用することで有用な領域の指定が簡単に行えます。

定数名

仮想化ドレス名

概要

VRAM

画面表示用メモリ(CW×CH)

サイズはSCREENモードにより可変

VAR

変数領域

サイズ 416バイト

ARRAY

配列変数領域(@(0)~@(99) )

サイズ200バイト

PRG

プログラム領域

サイズ 4096バイト

MEM

ユーザーワーク領域

サイズ1024バイト

GRAM

グラフィック表示用メモリ

サイズはSCREENモードにより可変

仮想アドレスの詳細については、「メモリーマップ」の「仮想アドレス」を参照下さい。
定数名については、「定数」の「メモリ領域先頭アドレス定数」も参照ください。

ビットマップ画像上の座標Bx、Byから指定した幅、高さの画像を指定したアドレスに
連続データとして格納します。

LDBMP area
図 2. ビットマップ画像からの部分抽出

指定した幅、高さがビットマップ画像よりも大きい場合は、
切り出し幅、高さを画像サイズにて調整します。

引数の色指定にて、元の画像の白・黒を反転して読み込む指定が可能です。

注意
連続したデータが指定した保存可能な領域を
オーバーするチェックは行っていません。
あらかじめ画像サイズを見積もった上で利用して下さい。
ユーザーワーク領域(1024バイト)を利用した場合、格納できる画像は、
128ドット×64ドットの画像程度です。
大きい画像を表示する場合、グラフィック表示用メモリに直接読み込むか、
DWBMP コマンドを利用して下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】

下記の横96ドット、縦64ドットの画像(768バイト)ファイル"TT.BMP"の全データを
ユーザーワーク領域(MEM~)に読込み、BITMAP コマンドで2倍表示する。

LDBMP sample 1
図 3. 利用画像ファイル
プログラム
10 CLS
20 LDBMP "TT.BMP",MEM,0,0,96,64
30 BITMAP 10,30,MEM,0,96,64,2
40 GOTO 40
LDBMP sample 2
図 4. 実行結果

同画像を、「豊」「四」「季」「TBASIC」の4つに分けて読込み、BITMAP コマンドで
分離して表示する。「豊」は反転して読み込む。

プログラム
10 CLS
20 LDBMP "TT.BMP",MEM,0,0,32,32,1
30 LDBMP "TT.BMP",MEM+128,32,0,32,32
40 LDBMP "TT.BMP",MEM+256,64,0,32,32
50 LDBMP "TT.BMP",MEM+384,0,32,96,32
60 BITMAP 10,30,MEM,0,32,32,2
70 BITMAP 74,40,MEM,1,32,32,2
80 BITMAP 138,50,MEM,2,32,32,2
90 BITMAP 10,120,MEM+384,0,96,32,2
LDBMP sample 3
図 5. 実行結果

大きいサイズの画像を直接グラフィック表示用メモリに読み込んで画像を表示する

プログラム
10 CLS
20 LDBMP "CAT.BMP",GRAM,0,0,GW,GH
30 GOTO 30
LDBMP sample 4
図 6. 実行結果

画像はHelm42さんの猫絵を利用させて頂いています。
http://free-illustrations.gatag.net/tag/%E7%8C%AB-%E3%83%8D%E3%82%B3

3.9.5. MKDIR ディレクトリの作成

ディレクトリの作成

【書式】

MKDIR "ディレクトリ名"

【引数】
“ディレクトリ名”

1~63文字までのディレクトリ名

【説明】

SDカードにディレクトリを作成します。
指定するディレクトリ名は、上位ディレクトリ名を含めて最大63文字まで指定可能です。
作成するディレクトリの名称は8文字可能です。大文字小文字の区別はありません。

上位のディレクトリ名は"/"です(名前指定において省略可能)。
次の2つは同じ動作をします。

MKDIR "/DIR1"
MIDIR "DIR1"

サブディレクトリの作成は次のように記述します。

MKDIR "/DIR1/SUBDIR"

または

MKDIR "DIR1/SUBDIR"

上位のディレクトリがない場合にサブディレクトリ作成を行った場合、親ディレクトリも作成されます。
次のコマンドでは、DIR2とDIR2/SUBDIR が作成されます。

MKDIR “DIR2/SUBDIR”
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File write error

SDカードへのファイル書き込みに失敗した。

【利用例】
ディレクトリSRCを作成する
MKDIR "SRC"
OK

3.9.6. RMDIR ディレクトリの削除

ディレクトリの削除

【書式】

RMDIR "ディレクトリ名"

【引数】
"ディレクトリ名"

1~63文字までのディレクトリ名

【説明】

SDカード内の指定したディレクトリを削除します。
指定したディレクトリにサブディレクトリやファイルが存在する場合、そのファイルも削除されます。

指定するディレクトリ名は、上位ディレクトリ名を含めて最大63文字まで指定可能です。
作成するディレクトリの名称は8文字可能です。大文字小文字の区別はありません。

上位のディレクトリ名は"/"です(名前指定において省略可能)。
次の2つは同じ動作をします。

RMDIR "/DIR1"
RMDIR "DIR1"

サブディレクトリの削除は次のように記述します。

RMDIR "/DIR1/SUBDIR"

または

RMDIR "DIR1/SUBDIR"
注意
ルートディレクトリの削除は出来ません。
RMDIR "/" は"Bad file name"エラーとなります。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File write error

SDカードへのファイル書き込みに失敗した。

【利用例】
ディレクトリSRCを削除する
RMDIR "SRC"
OK

3.9.7. REMOVE ファイルの削除

ファイルの削除

【書式】

REMOVE "ファイル名"

【引数】
"ファイル名"

"ディレクトリパス(省略可能)+ファイル8文字+拡張子3文字" の形式(63文字まで)

【説明】

SDカード内の指定したファイルを削除します。
ファイル名にはディレクトリ名+ファイル名の形式での記述が可能です。

上位のディレクトリ名は"/"です(名前指定において省略可能)。
次の2つは同じ動作をします。

REMOVE "/SAMPLE.BAS"
REMOVE "SAMPLE.BAS"

ディレクトリ内のファイルを削除する場合はそのディレクトリ名も指定します。

REMOVE "/SRC/SAMPLE.BAS"

または

REMOVE "SRC/SAMPLE.BAS"
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Bad file name

指定したファイル名が正しくない

SD I/O error

SDカードの利用が出来ない

File write error

SDカードへのファイル書き込みに失敗した。

【利用例】
ファイルを削除する
REMOVE "/SRC/SAMPLE.BAS"
OK

3.10. グラフィック・デバイス画面表示

3.10.1. BITMAP ビットマップ画像の描画

ビットマップ画像の描画

【書式】

BITMAP 横座標, 縦座標, 仮想アドレス, インデックス, 幅, 高さ [,倍率]

【引数】
横座標

0 ~ GW-1

縦座標

0 ~ GH-1

仮想アドレス

数値(任意の仮想アドレス)

インデックス

0 ~ 32767

1 ~ GW-1

高さ

1 ~ GH-1

倍率

1 ~ 8

GWGHはグラフィック画面の横ドット数、縦ドット数を示す定数です。
 この定数は、画面解像度により変わります。

【説明】

指定した座標にビットマップ画像を描画します。
仮想アドレスに描画対象の画像データの先頭格納アドレスを指定します。
インデックスには画像データの先頭格納の格納位置を指定します。
(幅 + 7) / 8 + 高さ * インデックス の計算にて参照する画像格納位置を移動します。

仮想アドレスの指定には次の定数を利用することで有用な領域の指定が簡単に行えます。

定数名

仮想化ドレス名

概要

VRAM

画面表示用メモリ(CW×CH)

サイズはSCREENモードにより可変

VAR

変数領域

サイズ 416バイト

ARRAY

配列変数領域(@(0)~@(99) )

サイズ200バイト

PRG

プログラム領域

サイズ 4096バイト

MEM

ユーザーワーク領域

サイズ1024バイト

GRAM

グラフィック表示用メモリ

サイズはSCREENモードにより可変

仮想アドレスの詳細については、「メモリーマップ」の「仮想アドレス」を参照下さい。
定数名については、「定数」の「メモリ領域先頭アドレス定数」も参照ください。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
インベーダーのキャラクタをアニメーション表示する(4倍で表示)
10 CLS
20 POKE MEM+0,$10,$40,$48,$90,$5F,$D0,$77,$70
30 POKE MEM+8,$3F,$E0,$1F,$C0,$10,$40,$20,$20
40 POKE MEM+16,$10,$40,$08,$80,$1F,$C0,$37,$60
50 POKE MEM+24,$7F,$F0,$5F,$D0,$50,$50,$0D,$80
60 FOR A=0 TO 20
70 BITMAP A,0,MEM,A%2,12,8,4
80 WAIT 200
90 NEXT A
BITMAP sample
図 7. 実行結果

3.10.2. CIRCLE 円の描画

円の描画

【書式】

CIRCLE 横中心座標, 縦中心座標,半径,色,モード

【引数】
横中心座標

:0 ~ GW-1

縦中心座標

:0 ~ GH-1

半径

:1 ~ GW-1

0 黒 、1 白 、2 反転 (NTSC、OLED画面利用時)
0 ~ 8 または RGBコード $0009~$FFFF(TFT画面利用時)

モード

0 塗りつぶしなし,0以外 塗りつぶしあり

GW、GHはグラフィック画面の横ドット数、縦ドット数を示す定数です。
この定数は、画面解像度により変わります。

【説明】

指定した中心座標(横中心座標,縦中心座標)を起点に指定した半径の円を色で描画します。
NTSC版、OLED版では、2色のみ利用可能です。
色に2をした場合は、座標位置の色を反転して描画します。

TFT(ILI9341)ディスプレイでは色コード 0~8 または、
RGBコードとして $0009 ~ $FFFFの色指定が可能です。
色コード 0~8は次の色に割り当てています。

表 7. 色コード

色コード

0

1

2

3

4

5

マゼンタ

6

シアン

7

白(デフォルト)

8

RGBコードの指定は、RGB 関数を使うことで直感的な色を指定することが出来ます。

例:赤い円を描く
CIRCLE 100,100,50,RGB(31,0,0),1
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
円を描画する(NTSC画面)
10 CLS
20 FOR Y=0 TO 215 STEP 40
30 FOR X=0 TO 223 STEP 40
40 CIRCLE X,Y,30,1,0
50 NEXT X
60 NEXT Y
70 GOTO 70
CIRCLE sample
図 8. 実行結果

3.10.3. CSCROLL キャラクタ画面スクロール

キャラクタ画面スクロール

【書式】

CSCROLL x1,y1,x2,y2,方向

【引数】
x1

左上横座標0 ~ CW-1(最大値は利用フォントにより可変)

y1

左上縦座標0 ~ CH-1(最大値は利用フォントにより可変)

x2

右下横座標0 ~ CW-1(最大値は利用フォントにより可変)

y2

右下縦座標0 ~ CH-1(最大値は利用フォントにより可変)

方向

UP (0): 上、 DOWN (1): 下、 RIGHT (2): 右、 LEFT (3): 左
方向は定数またはカッコ内の数値の指定が可能

【説明】

画面の指定範囲でテキストを1文字単位でスクロールします。
本コマンドは、シリアルコンソール画面、TFTディスプレイでは利用出来ません。

画面全体をスクロールしたい場合は、

CSCROLL area
CSCROLL 0,0,CW-1,CH-1,LEFT

のように、画面の左上の位置と画面右下の位置を指定します。

指定した範囲をスクロールしたい場合は、

CSCROLL 3 ,3,13,5,LEFT

のように範囲を指定します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

Illegal value

指定した数値が不当である

Not supported

SCREEN 1~3以外でコマンドを利用した

【利用例】
文字をスクロールする
10 CLS
20 LOCATE 10,10:?"Hello,TinyBASIC"
25 WAIT 200
30 FOR I=0 TO 15
40 CSCROLL 10,10,24,10,LEFT
50 WAIT 500
60 NEXT I

3.10.4. DWBMP BMPファイルの表示

BMPファイルの表示

【書式】

DWBMP "ファイル名", x, y [, Bx, By 幅, 高さ[,色指定]]

【引数】
"ファイル名"

"ディレクトリパス(省略可能)+ファイル8文字+拡張子3文字" の形式

x

画像表示位置 横: 0 ~ GW-1

y

画像表示位置 縦: 0 ~ GH-1

Bx

ビットマップ画像の切り出し横座標: 0 ~ 32767(省略時は0)

By

ビットマップ画像の切り出し縦座標: 0 ~ 32767(省略時は0)

ビットマップ画像の切り出しドット幅: 1 ~ GW(省略時は画像幅)

高さ

ビットマップ画像の切り出しドット高: 1 ~ GH(省略時は画像高さ)

色指定

0 変換なし、1 反転 (省略時 0)
TFTディスプレイの場合、16ビット色ビットマップファイル利用では無視されます。

【説明】

SDカード内のWindowsビットマップファイルの指定領域の画像を切り出して、指定した座標(x,y)に表示します。
NTSC、OLEDディスプレイの場合、ビットマップファイルはモノクロ(白黒2値)画像のみ利用出来ます。
TFTデスプレイの場合、16ビット色ビットマップファイルも利用出来ます。

ビットマップ画像上の座標Bx、Byから指定した幅、高さの画像を切り出して指定位置に表示します。

LDBMP area
図 9. ビットマップ画像からの部分抽出

表示位置のx、 ビットマップ画像の切り出し位置Bx、切り出し幅はバイト境界である8の倍数である必要があります。8の倍数でない場合は8の倍数に丸めます。

NTSC、OLEDディスプレイの場合、引数の色指定にて、元の画像の白・黒を反転して読み込む指定が可能です。
TFTディスプレイの場合、引数の色指定は利用出来ません。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】

下記の横96ドット、縦64ドットの画像(768バイト)ファイル"TT.BMP"を3つ表示する。
それのれの画像表示開始位置は、座標(0,0)、座標(8,64)、座標(16,130)とする。

LDBMP sample 1
図 10. 画像ファイル
プログラム
10 CLS
20 DWBMP "TT.BMP",0,0,0,0,96,64
30 DWBMP "TT.BMP",8,65,0,0,96,64
40 DWBMP "TT.BMP",16,130,0,0,96,64
50 GOTO 50
DWBMP sample 1
図 11. 実行結果

同画像から指定境域の画像を切り出して表示する

プログラム
10 CLS
20 DWBMP "TT.BMP",0,0,0,0,30,30
30 DWBMP "TT.BMP",8,33,0,0,64,32
40 DWBMP "TT.BMP",16,66,0,32,96,32
50 GOTO 50
DWBMP sample 2
図 12. 実行結果

3.10.5. GPEEK 画面上の指定位置ピクセルの参照(数値関数)

画面上の指定位置ピクセルの参照

【書式】

GPEEK (横位置 , 縦位置)

【引数】
横位置

0~GW - 1

縦位置

0~GH - 1

GW、GHはグラフィック画面の横ドット数、縦ドット数を示す定数です。
 画面解像度により異なります。

【戻り値】

指定位置に表示されているピクセルの色: 0 または 1

【説明】

画面上の指定位置に表示されているピクセルを参照します。
引数の指定位置が範囲外の場合は0を返します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
画面左上に表示しているドットに有無を2進数で表示する
10 B=0
10 FOR I=0 TO 7
20 B=(B<<1)+GPEEK(I,0)
30 NEXT I
40 PRINT BIN$(B,8)
50 END

3.10.6. GPRINT 文字列の描画

文字列の描画

【書式】

GPRINT 横座標, 縦座標
GPRINT 横座標, 縦座標, 文字列 | 数値
GPRINT 横座標, 縦座標, 文字列 | 数値 ;
GPRINT 横座標, 縦座標, 文字列 | 数値 ; 文字列 | 数値 ;
GPRINT 横座標, 縦座標, 文字列 | 数値 ; 文字列 | 数値 ;;
GPRINT 横座標 , 縦座標, # 桁数 , 文字列 | 数値;文字列 | 数値 ;;

| はいずれのうち1つを示す
… は可変指定を示す
; は連結指定、カンマ’,’も可能

【引数】
横座標

横描画位置 0 ~ GW-1(通常は223)

縦座標

縦描画位置 0 ~ GH-1(通常は215)

文字列

文字列定数または文字列関数

数値

数値定数、変数、配列変数、または数値関数、式

連結指定

セミコロン’;’ または カンマ‘,’
  文末に付けると改行抑制される

桁数

#数値 または #-数値 の形式で指定する
 例:#3 、 #-3

【説明】

指定したグラフィック座標にグラフィックとして文字列を描画します。
横座標、縦座標以降の記述及び出力結果は PRINT 文と同等です。
出力する文字列の表記方法については、PRINT コマンドの説明を参照下さい。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
時刻を表示する
10 GETTIME A,B,C
20 GPRINT 0,0,#-2,A;":";B;":";C
30 WAIT 1000
40 GOTO 10
実行結果
10:52:00

3.10.7. GSCROLL グラフィックスクロール

グラフィックスクロール

【書式】

GSCROLL x1, y1, x2, y2,方向

【引数】
x1

左上横座標0 ~ GW-1(最大値は環境により可変)

y1

左上縦座標0 ~ GH-1(最大値は環境により可変)

x2

右下横座標0 ~ GW-1(最大値は環境により可変)

y2

右下縦座標0 ~ GH-1(最大値は環境により可変)

方向

UP(0): 上、 DOWN(1): 下、 RIGHT(2): 右、 LEFT(3): 左
方向は定数またはカッコ内の数値の指定が可能

GW、GHはグラフィック画面の横ドット数、縦ドット数を示す定数です。
この定数は、画面解像度により変わります。

【説明】

画面上の指定範囲表示内容を1ドット単位でスクロールします。

注意
本コマンドは、シリアルコンソール画面、
TFTディスプレイでは利用出来ません。

NTSCビデオディスプレイ使用時には次の制約があります。OLEDディスプレイでは制約はありません。
右上横方向x1は 8の倍数で指定 して下さい(バイト境界指定)。
左下横座標x2は 8の倍数-1 で指定指定して下さい(バイト境界指定)。
上記以外の数値を指定した場合、指定数値をバイト境界に補正します。

画面全体を左スクロールしたい場合は、

GSCROLL area
GSCROLL 0, 0,GW-1,GH-1 , LEFT

のように、画面全体の領域を指定します。

指定した範囲をスクロールしたい場合は、

GSCROLL 16,30,207,100, LEFT

のように範囲を指定します。

注意
GSCROLL でスクロールした場合、
見かけ上のテキストとテキスト表示管理の情報にずれが生じます。
VPEEK による表示位置の文字コード取得は正しい値を返しません。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

Illegal value

指定した数値が不当である

【利用例】
簡易オシロスコープ
10 'oscilloscope
20 CLS
30 GPIO PB1,ANALOG
40 "LOOP"
50 R=ANA(PB1)
60 Q=R/20
70 LOCATE 0,0:?R;"   "
80 PSET 223,221-Q,1
90 WAIT 50
100 GSCROLL 0,8,GW-1,GH-1,LEFT
110 GOTO "LOOP"

3.10.8. GINP 指定領域内ピクセル検出(数値関数)

指定領域内ピクセル検出

【書式】

GINP (横位置,縦位置,高さ,幅,色)

【引数】
横位置

0~GW - 1

縦位置

0~GH - 1

1 ~ GW-1

高さ

1 ~ GH-1

0 黒 、1 白 (NTSC、OLED画面利用時)
0 ~ 8 または RGBコード $0009~$FFFF(TFT画面利用時)

GW、GHはグラフィック画面の横ドット数、縦ドット数を示す定数です。
 画面解像度より異なります。

【戻り値】

1 :指定領域内(境界含む)に指定した色のピクセルが存在する
0 :指定領域内(境界含む)に指定した色のピクセルが存在しない

【説明】

指定した領域内の指定した色のピクセルが存在するをチェックし、その結果を返します。

GINP area

NTSC版、OLED版では、2色(0 黒 、1 白)の指定可能です。

TFT(ILI9341)ディスプレイでは色コード 0~8 または、
RGBコードとして $0009 ~ $FFFFの色指定が可能です。
色コード 0~8は次の色に割り当てています。

表 8. 色コード

色コード

0

1

2

3

4

5

マゼンタ

6

シアン

7

白(デフォルト)

8

RGBコードの指定は、RGB 関数を使うことで直感的な色を指定することが出来ます。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
画面上に表示しているドットに有無を2進数で表示する
10 B=0
10 FOR I=0 TO 7
20 B=(B<<1)+GPEEK(I,0)
30 NEXT I
40 PRINT BIN$(B,8)
50 END

3.10.9. LINE 直線の描画

直線の描画

【書式】

LINE 横座標1, 縦座標1, 横座標2, 縦座標2,色

【引数】
横座標1

0 ~ GW-1

縦座標1

0 ~ GH-1

横座標2

0 ~ GW-1

縦座標2

0 ~ GH-1

0 黒 、1 白 、2 反転 (NTSC、OLED画面利用時)
0 ~ 8 または RGBコード $0009~$FFFF(TFT画面利用時)

GW、GHはグラフィック画面の横ドット数、縦ドット数を示す定数です。
 この定数は、画面解像度により変わります。

【説明】

指定したグラフィク座標 (横座標1,縦座標1)と(横座標2,縦座標2)間を結ぶ直線を指定した色で描画します。

NTSC版、OLED版では、2色のみ利用可能です。
色に2をした場合は、座標位置の色を反転して描画します。

TFT(ILI9341)ディスプレイでは色コード 0~8 または、
RGBコードとして $0009 ~ $FFFFの色指定が可能です。
色コード 0~8は次の色に割り当てています。

表 9. 色コード

色コード

0

1

2

3

4

5

マゼンタ

6

シアン

7

白(デフォルト)

8

RGBコードの指定は、RGB 関数を使うことで直感的な色を指定することが出来ます。

例:赤い線を引く
LINE 100,100,200,200,RGB(31,0,0)
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
直線を描画する(NTSC画面)
10 CLS
20 FOR X=0 TO 223 STEP 4
30 LINE X,0,223-X,215,1
40 NEXT X
50 GOTO 50
LINE sample
図 13. 実行結果

3.10.10. PSET 点の描画

点の描画

【書式】

PSET 横座標, 縦座標, 色

【引数】
横座標

0 ~ GW-1 (注意 最大値は利用環境により異なる場合があります)

縦座標

0 ~ GH-1 (注意 最大値は利用環境により異なる場合があります)

0 黒 、1 白 、2 反転 (NTSC、OLED画面利用時)
0 ~ 8 または RGBコード $0009~$FFFF(TFT画面利用時)

GW、GHはグラフィック画面の横ドット数、縦ドット数を示す定数です。
 この定数は、画面解像度に設定等により変わります。

【説明】

指定したグラフィク座標に指定した色の点を描画します。
本コマンドはシリアルコンソールでは利用出来ません。

NTSC版、OLED版では、2色のみ利用可能です。
色に2をした場合は、座標位置の色を反転して描画します。

TFT(ILI9341)ディスプレイでは色コード 0~8 または、
RGBコードとして $0009 ~ $FFFFの色指定が可能です。
色コード 0~8は次の色に割り当てています。

表 10. 色コード

色コード

0

1

2

3

4

5

マゼンタ

6

シアン

7

白(デフォルト)

8

RGBコードの指定は、RGB 関数を使うことで直感的な色を指定することが出来ます。

例:赤い点を描画
PSET 100,100,RGB(31,0,0)
注意
範囲外の座標を指定した場合、 範囲内の境界に描画します。 +
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
半径100ドット内に点を描画する(NTSC画面表示)
10 CLS
20 FOR N=0 TO 30000
30 IF V!=99 Y=Y+V:V=V+1
40 X=RND(200)-100
50 Y=RND(200)-100
60 IF X*X+Y*Y<10000 PSET X+110,Y+108,1
70 NEXT N
80 GOTO 80
PSET sample
図 14. 実行結果

3.10.11. RECT 矩形の描画

矩形の描画

【書式】

RECT x1, y1,x2, y2, 色, モード

【引数】
x1

左上横座標0 ~ GW-1(最大値は環境により可変)

y1

左上縦座標0 ~ GH-1(最大値は環境により可変)

x2

右下横座標0 ~ GW-1(最大値は環境により可変)

y2

右下縦座標0 ~ GH-1(最大値は環境により可変)

0 黒 、1 白 、2 反転 (NTSC、OLED画面利用時)
0 ~ 8 または RGBコード $0009~$FFFF(TFT画面利用時)

モード

0 塗りつぶしなし,0以外 塗りつぶしあり

GW、GHはグラフィック画面の横ドット数、縦ドット数を示す定数です。
 この定数は、画面解像度により変わります。

【説明】

指定した位置に指定した色で矩形を描画します。

NTSC版、OLED版では、2色のみ利用可能です。
色に2をした場合は、座標位置の色を反転して描画します。

TFT(ILI9341)ディスプレイでは色コード 0~8 または、
RGBコードとして $0009 ~ $FFFFの色指定が可能です。
色コード 0~8は次の色に割り当てています。

表 11. 色コード

色コード

0

1

2

3

4

5

マゼンタ

6

シアン

7

白(デフォルト)

8

RGBコードの指定は、RGB 関数を使うことで直感的な色を指定することが出来ます。

例:赤い四角を描く
RECT 100,100,200,200,RGB(31,0,0),1
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

Illegal value

指定した数値が不当である

【利用例】
矩形を描画する(NTSC画面)
10 CLS
20 RECT 50,50,70,90,1,1
30 RECT 60,60,80,80,2,0
40 RECT 80,80,110,110,1,0
50 GOTO 50
RECT sample
図 15. 実行結果

3.10.12. RGB 3原色からRGBコード変換(数値関数)

3原色からRGBコード変換

【書式】

RGB (赤, 緑, 青)

【引数】

赤色のレベル 0 ~ 31 (5ビット)

緑色のレベル 0 ~ 31 (5ビット)

青色のレベル 0 ~ 31 (5ビット)

【戻り値】

RGBコード(16ビット)

【説明】

赤、緑、青の各色成分のレベルを合成した16ビットのRGBコードを返します。
本関数はカラー表示可能なTFTディスプレイの色指定を補助する関数です。

TFT(ILI9341)ディスプレイでは16ビットの色指定が可能です。
RGBコードは次の構成となります。

RGBフォーマット

TFT(ILI9341)ディスプレイではRGBコードとして $0009 ~ $FFFFの色指定が可能です。
$0000~$0008は、次の色に割り当てています。

表 12. 色コード

色コード

0

1

2

3

4

5

マゼンタ

6

シアン

7

白(デフォルト)

8

RGBコードは、緑のみ6ビット(0~63)です。
本関数では、他の色を同じように色ビットの重みを同じ扱いにするために緑も0~31を指定範囲とし、
内部にて値を2倍にしています。この場合、0~62までの値しか取れないため、
緑のみ32の値の指定が可能とし、32を指定した場合、内部処理にて63を設定するものとします。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が有効範囲を超えている

'(' or ')' expected

’(‘ または ‘)’が無い

【利用例】
TFTディスプレイ画面全体を、黒から白に段階的に変化させる
10 CLS
20 FOR C=0 TO 31
30 RECT 0,0,GW-1,GH-1,RGB(C,C,C),1
40 NEXT C

3.10.13. SCREEN スクリーンモードの設定

スクリーンモードの設定

【書式】

SCREEN モード [,画面向き]

【引数】
モード

1 ~ 6 の整数

画面向き

0 ~ 3 の整数

【説明】

デバイスコンソールのスクリーンモードの設定を行います。
設定可能なモード、画面向きは利用するデバイスコンソールにより異なります。

デバイスコンソールがNTSCビデオ出力画面の場合

モードの設定値

次の値の指定が可能です。

モード(値)

名称

機能

1

モード1
(デフォルト)

画面解像度 224×216ドット
テキストスクリーン 37×27文字

2

モード2

画面解像度 224×108ドット
テキストスクリーン 37×13文字

3

モード3

画面解像度 112×108ドット
テキストスクリーン 18×13文字

画面向き

指定出来ません

デバイスコンソールがOLEDディスプレイの場合

モードの設定値

次の値の指定が可能です。

モード(値)

名称

機能

1

ノーマルモード
(デフォルト)

画面解像度 128×64
テキストスクリーン 21×8文字

2

フォント倍角

画面解像度 128×64
テキストスクリーン 10×4文字

3

フォント3倍角

画面解像度 128×64
テキストスクリーン 7×2文字

画面向き

0(デフォルト) ~ 3の指定で90度ずつ回転することが出来ます。

TFT(ILI9341)ディスプレイの場合

モードの設定値

次の値の指定が可能です。

モード(値)

名称

機能

1

ノーマルモード
(デフォルト)

画面解像度 320×240
テキストスクリーン 53×30文字

2

フォント倍角

画面解像度 320×240
テキストスクリーン 26×15文字

3

フォント3倍角

画面解像度 320×240
テキストスクリーン 17×10文字

4

フォント4倍角

画面解像度 320×240
テキストスクリーン 13×7文字

5

フォント5倍角

画面解像度 320×240
テキストスクリーン 10×6文字

6

フォント6倍角

画面解像度 320×240
テキストスクリーン 8×5文字

画面向き

0(デフォルト) ~ 3の指定で90度ずつ回転することが出来ます。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った、引数に数値以外を指定した

Illegal value

指定した引数の値が範囲外である

Overflow

指定した数値が-32767 ~ 32767を超えている

【利用例】

スクリーンモードをモード1に設定する

SCREEN 1

3.11. シリアル通信

3.11.1. SCLOSE シリアル通信クローズ

シリアル通信クローズ

【書式】

SCLOSE 通信速度

【引数】

なし

【説明】

データ通信設定したシリアルポートのシリアル通信を終了します。

GPIOシリアルポートを使ったシリアル通信は次のGPIOピンを利用することが出来ます。
PA9 :TX 送信
PA10:RX 受信

シリアルポートが既にオープン状態の場合は、シリアルポートをクローズしてからオープンします。
シリアル通信の利用には次のコマンドが利用出来ます。

SMODE

GPIOシリアルポート、USBシリアルポート機能切り替え

SOPEN

シリアル通信開始

SWRITE

1バイト送信

SREAD

1バイト受信

SREADY

受信データ有無の確認

SPRINT

文字列出力(PRINT と同等の出力)

SCLOSE

シリアル通信クローズ

注意
シリアル通信をオープンした状態で GPIO コマンドにて
PA9,PA10 ピンにI/O機能の割り当てを行った場合、正しい動作を行うことが出来ません。
必ず SCLOSE コマンドにてシリアル通信をクローズしてからピンに機能を割り当て下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
シリアル通信経由でテキストメッセージを送信する
10 SOPEN "9600"
20 SPRINT "Hello,TinyBASIC"
30 SCLOSE

3.11.2. SMODE シリアルポート機能設定

シリアルポート機能設定

【書式】

SMODE 0
SMODE 1, "通信速度"
SMODE 2
SMODE 3, 制御コード処理指定

【引数】
通信速度

文字列形式の数値 "110"~ "921600"

制御コード処理指定

0 制御コードを処理しない、1:制御コードを処理する

【説明】

2つのシリアルポート(USBポート、GPIOシリアルポート)に関する機能設定を行います。

  1. SMODE 0

    2つのシリアルポートに次の機能を割り付けます(デフォルト設定)

    USBポート

    ターミナル対話利用(入力、プログラム転送、デバッグ)

    GPIOシリアルポート(PA9、PA10)

    データ通信用(SREADSWRITE 等のコマンド利用用)

  2. SMODE 1, "通信速度"

    2つのシリアルポートに次の機能を割り付けます(デフォルト設定)

    USBポート

    データ通信用(SREADSWRITE 等のコマンド利用用)

    GPIOシリアルポート(PA9、PA10)

    ターミナル対話利用(入力、プログラム転送、デバッグ)

    第2引数にはGPIOシリアルポート(PA9、PA10)の通信速度を数字文字列にて指定します。
    本コマンドにより、GPIOシリアルポートは指定した通信速度にてオープンされます。

  3. SMODE 2

    シリアル通信禁止
    ターミナル対話利用のコンソールでの入出力、データ通信用の入出力は利用出来ません。
    出力を行った場合は破棄されます。

  4. SMODE 3, 制御コード処理指定

    シリアルターミナルの制御コードの処理の有無指定します。
    制御コード処理指定 が 0の場合、制御コードを処理を行いません。
    制御コード処理指定が1の場合は処理を行います。

GPIOシリアルポートを使ったシリアル通信は次のGPIOピンを利用することが出来ます。
PA9 :TX 送信
PA10:RX 受信

シリアルポートが既にオープン状態の場合は、シリアルポートをクローズしてからオープンします。
シリアル通信の利用には次のコマンドが利用出来ます。

SMODE

GPIOシリアルポート、USBシリアルポート機能切り替え

SOPEN

シリアル通信開始

SWRITE

1バイト送信

SREAD

1バイト受信

SREADY

受信データ有無の確認

SPRINT

文字列出力(PRINT と同等の出力)

SCLOSE

シリアル通信クローズ

注意
シリアル通信をオープンした状態で GPIO コマンドにて
PA9,PA10 ピンにI/O機能の割り当てを行った場合、正しい動作を行うことが出来ません。
必ず SCLOSE コマンドにてシリアル通信をクローズしてからピンに機能を割り当て下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

指定した引数に範囲外の値を指定した

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
GPIOシリアルポート(PA9、PA10)を115,200bpsでオープンする
SMODE 1,"115200"
 OK

[[SOPEN,]] = SOPEN シリアル通信オープン :sectnums!:

シリアル通信オープン

【書式】

SOPEN 通信速度

【引数】
通信速度

文字列形式の数値 "110"~ "921600"
例:"115200"

【説明】

データ通信設定したGPIOシリアルポート(PA9、PA10)のシリアル通信の利用を開始します。
通信速度は文字列形式の数値で指定します。

GPIOシリアルポートを使ったシリアル通信は次のGPIOピンを利用することが出来ます。
PA9 :TX 送信
PA10:RX 受信

シリアルポートが既にオープン状態の場合は、シリアルポートをクローズしてからオープンします。
シリアル通信の利用には次のコマンドが利用出来ます。

SMODE

GPIOシリアルポート、USBシリアルポート機能切り替え

SOPEN

シリアル通信開始

SWRITE

1バイト送信

SREAD

1バイト受信

SREADY

受信データ有無の確認

SPRINT

文字列出力(PRINT と同等の出力)

SCLOSE

シリアル通信クローズ

注意
シリアル通信をオープンした状態で GPIO コマンドにて
PA9,PA10 ピンにI/O機能の割り当てを行った場合、正しい動作を行うことが出来ません。
必ず SCLOSE コマンドにてシリアル通信をクローズしてからピンに機能を割り当て下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Illegal value

指定した引数に範囲外の値を指定した

【利用例】
シリアル通信経由でテキストメッセージを送信する
10 SMODE 0
20 SOPEN "9600"
30 SPRINT "Hello,TinyBASIC"
40 SCLOSE

3.11.3. SPRINT シリアル通信文字列出力

シリアル通信文字列出力

【書式】

SPRINT
SPRINT 文字列 | 数値
SPRINT 文字列 | 数値 ;
SPRINT 文字列 | 数値 ; 文字列 | 数値 ;
SPRINT 文字列 | 数値 ; 文字列 | 数値 ;;
SPRINT # 桁数 , 文字列 | 数値 ; 文字列 | 数値 ;;

| はいずれのうち1つを示す
… は可変指定を示す
;’ は連結指定、カンマ ’,’ も可能

【引数】
文字列

文字列定数または文字列関数

数値

数値定数、変数、配列変数、または数値関数、式

連結指定

セミコロン ’;’ または カンマ ’,
  文末に付けると改行抑制される

桁数

#’ 数値 または ’#’ -数値 の形式で指定する
 例: #3#-3

【説明】

指定した文字列、数値をデータ通信設定したシリアルポートに出力します。
書式は PRINT 文と同じです。

表示要素である文字列、数値は区切り文字のセミコロン’;’、またはカンマ’,’にて連結して表示することが出来ます。
連結表示において、数値は桁指定により指定した桁幅にて等間隔で表示します。
桁指定においてマイナスの数値を指定した場合は、間隔を0で補完します。
正の数値の場合は空白文字で補完します。
SPRINT 文の引数の最後に’;’または’,’が付加されている場合は改行しません。
付加されていない場合は引数の内容を表示後、改行します。

GPIOシリアルポートを使ったシリアル通信は次のGPIOピンを利用することが出来ます。
PA9 :TX 送信
PA10:RX 受信

シリアルポートが既にオープン状態の場合は、シリアルポートをクローズしてからオープンします。
シリアル通信の利用には次のコマンドが利用出来ます。

SMODE

GPIOシリアルポート、USBシリアルポート機能切り替え

SOPEN

シリアル通信開始

SWRITE

1バイト送信

SREAD

1バイト受信

SREADY

受信データ有無の確認

SPRINT

文字列出力(PRINT と同等の出力)

SCLOSE

シリアル通信クローズ

注意
シリアル通信をオープンした状態で GPIO コマンドにて
PA9,PA10 ピンにI/O機能の割り当てを行った場合、正しい動作を行うことが出来ません。
必ず SCLOSE コマンドにてシリアル通信をクローズしてからピンに機能を割り当て下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
シリアル通信経由でテキストメッセージを送信する
10 SOPEN "9600"
20 SPRINT "Hello,TinyBASIC"
30 SCLOSE

3.11.4. SREAD シリアル通信1バイト受信(数値関数)

シリアル通信1バイト受信

【書式】

SREAD ()

【引数】

なし

【戻り値】

受信データ :0 ~ 255、データなしの場合は-1

【説明】

データ通信設定したシリアルポートから1バイトデータを受信します。
データが無い場合は-1を返します。データが無い場合の受信待ちは行いません。

GPIOシリアルポートを使ったシリアル通信は次のGPIOピンを利用することが出来ます。
PA9 :TX 送信
PA10:RX 受信

シリアルポートが既にオープン状態の場合は、シリアルポートをクローズしてからオープンします。
シリアル通信の利用には次のコマンドが利用出来ます。

SMODE

GPIOシリアルポート、USBシリアルポート機能切り替え

SOPEN

シリアル通信開始

SWRITE

1バイト送信

SREAD

1バイト受信

SREADY

受信データ有無の確認

SPRINT

文字列出力(PRINT と同等の出力)

SCLOSE

シリアル通信クローズ

注意
シリアル通信をオープンした状態で GPIO コマンドにて
PA9,PA10 ピンにI/O機能の割り当てを行った場合、正しい動作を行うことが出来ません。
必ず SCLOSE コマンドにてシリアル通信をクローズしてからピンに機能を割り当て下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
受信した文字列を画面に表示する
10 SOPEN "115200"
20 IF SREADY()=0 GOTO 20
30 D=SREAD()
40 IF D=ASC(".") GOTO 80
50 IF D=$0D ?
60 IF D>=32 ? CHR$(D);
70 GOTO 20
80 SCLOSE
90 ? :? "Done."

画面に受信した文字を表示します。
受信したデータが `.`の場合はプログラムを終了します。
表示可能な文字はそのまま表示します。
受信したデータ$ODの場合は改行します。
それ以外の制御文字は無視します。

3.11.5. SREADY シリアル通信データ受信確認(数値関数)

シリアル通信データ受信確認

【書式】

SREADY ()

【引数】

なし

【戻り値】

0:受信データなし
1:受信データあり

【説明】

シリアルポートに受信可能なデータが着信しているかを確認します。
シリアルポートから SREAD 関数にてデータの受信を行う際に、事前にデータの有無を確認することが出来ます。

GPIOシリアルポートを使ったシリアル通信は次のGPIOピンを利用することが出来ます。
PA9 :TX 送信
PA10:RX 受信

シリアルポートが既にオープン状態の場合は、シリアルポートをクローズしてからオープンします。
シリアル通信の利用には次のコマンドが利用出来ます。

SMODE

GPIOシリアルポート、USBシリアルポート機能切り替え

SOPEN

シリアル通信開始

SWRITE

1バイト送信

SREAD

1バイト受信

SREADY

受信データ有無の確認

SPRINT

文字列出力(PRINT と同等の出力)

SCLOSE

シリアル通信クローズ

注意
シリアル通信をオープンした状態で GPIO コマンドにて
PA9,PA10 ピンにI/O機能の割り当てを行った場合、正しい動作を行うことが出来ません。
必ず SCLOSE コマンドにてシリアル通信をクローズしてからピンに機能を割り当て下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
受信した文字列を画面に表示する
10 SOPEN "115200"
20 IF SREADY()=0 GOTO 20
30 D=SREAD()
40 IF D=ASC(".") GOTO 80
50 IF D=$0D ?
60 IF D>=32 ? CHR$(D);
70 GOTO 20
80 SCLOSE
90 ? :? "Done."

画面に受信した文字を表示します。
受信したデータが `.`の場合はプログラムを終了します。
表示可能な文字はそのまま表示します。
受信したデータ$ODの場合は改行します。
それ以外の制御文字は無視します。

3.11.6. SWRITE シリアル通信1バイト出力

シリアル通信1バイト出力

【書式】

SWRITE 送信データ

【引数】
送信データ

0~255
(1バイトデータ、変数指定時は上位8ビットは無視)

【説明】

データ通信設定したシリアルポートに1バイト分のデータを出力します。

GPIOシリアルポートを使ったシリアル通信は次のGPIOピンを利用することが出来ます。
PA9 :TX 送信
PA10:RX 受信

シリアルポートが既にオープン状態の場合は、シリアルポートをクローズしてからオープンします。
シリアル通信の利用には次のコマンドが利用出来ます。

SMODE

GPIOシリアルポート、USBシリアルポート機能切り替え

SOPEN

シリアル通信開始

SWRITE

1バイト送信

SREAD

1バイト受信

SREADY

受信データ有無の確認

SPRINT

文字列出力(PRINT と同等の出力)

SCLOSE

シリアル通信クローズ

注意
シリアル通信をオープンした状態で GPIO コマンドにて
PA9,PA10 ピンにI/O機能の割り当てを行った場合、正しい動作を行うことが出来ません。
必ず SCLOSE コマンドにてシリアル通信をクローズしてからピンに機能を割り当て下さい。
【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

Overflow

指定した数値が-32768 ~ 32767を超えている

【利用例】
シリアルポートに’A’から’Z’の文字を出力する
10 SOPEN "115200"
20 FOR C=ASC("A") TO ASC("Z")
30 SWRITE C
40 NEXT C
50 SCLOSE

3.12. 仮想EEPROM

3.12.1. EEPFORMAT 仮想EEPROMのフォーマット

仮想EEPROMのフォーマット

【書式】
【引数】

なし

【説明】

仮想EEPROMのフォーマットして初期化を行います。
仮想EEPROMとは内部フラッシュメモリの一部をソフトウェアにてEEPROMのように利用するものです。仮想EEPROMに書き込んだデータは、マイコンボードの電源を落としても保持されます。
EEPFORMAT コマンドは仮想的にEEPROMとして利用するためにフラッシュメモリの初期化処理を行います。既に EEPWTIRE コマンドにてデータの書込みを行っている場合、そのデータを含めて初期化されます。

仮想EEPROMはフラッシュメモリの2ページ(1024バイト×2)を利用しています。
フラッシュメモリの書込み回数の制約を考慮し、同じアドレスへの繰り返し書き込みに対して書き込み位置を分散しています。
仮想EEPROMへのデータ保存は2バイト単位(変数のバイト数と同じ)です。
保存可能なデータ量は250ワード(250バイト)となります。

EEPWRITEEEPREAD コマンドで指定する読書きを指定するアドレスは実際にはアドレスではなく、検索キーです。0~32767の間に任意で利用出来ます。
検索キー数はデータ保存量が250ワードの制約から、250以内に抑える必要あります。仮想EEPROMの機構から数十以内に抑えることを推奨します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

【利用例】
仮想EEPROMのフォーマットして初期化を行う
EEPFORMAT
OK

3.12.2. EEPREAD 仮想EEPROMデータ読み込み(数値関数)

仮想EEPROMデータ読み込み

【書式】

EEPREAD (アドレス)

【引数】
アドレス

仮想EEPROM内アドレス 0 ~ 32767

【戻り値】

読みだした2バイトデータ(-32768~32767, $0000~$FFFF)

【説明】

仮想EEPROMの指定したアドレスから2バイトデータを取得します。 書き込み単位は2バイトです。仮想EEPROMに初めてデータ書き込みを行う場合は事前に EEPFORMAT コマンドで初期化をしておく必要があります。

仮想EEPROMとは内部フラッシュメモリの一部をソフトウェアにてEEPROMのように利用するものです。仮想EEPROMに書き込んだデータは、マイコンボードの電源を落としても保持されます。
仮想EEPROMはフラッシュメモリの2ページ(1024バイト×2)を利用しています。
フラッシュメモリの書込み回数の制約を考慮し、同じアドレスへの繰り返し書き込みに対して書き込み位置を分散しています。
保存可能なデータ量は最大で250ワード(500バイト)となります。
EEPWRITEEEPREAD コマンドで指定する読書きを指定するアドレスは実際にはアドレスではなく、検索キーです。0~32767の間に任意で利用出来ます。
検索キー数はデータ保存量が250ワードの制約から、250以内に抑える必要あります。仮想EEPROMの機構から数十以内に抑えることを推奨します。

EEPREAD コマンドは、指定したアドレスを検索キーとして該当するデータを返します。該当するデータない場合は0を返します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

EEPROM bad FLASH

フラッシュメモリの異常が発生した

【利用例】
アドレス 1234 に 123 を書き込み、その値を読む
EEPWRITE 1234, 123
OK
?EEPREAD(1234)
123
OK

3.12.3. EEPWRITE 仮想EEPROMデータ書き込み

仮想EEPROMデータ書き込み

【書式】

EEPWRITE アドレス, データ

【引数】
アドレス

仮想EEPROM内アドレス 0 ~ 32767

データ

書き込みデータ -32768 ~ 32767 または $0000 ~ $FFFF(2バイト分)

【説明】

仮想EEPROMの指定したアドレスにデータを書き込みます。
書き込み単位は2バイトです。仮想EEPROMに初めてデータ書き込みを行う場合は事前に EEPFORMAT コマンドで初期化をしておく必要があります。

仮想EEPROMとは内部フラッシュメモリの一部をソフトウェアにてEEPROMのように利用するものです。仮想EEPROMに書き込んだデータは、マイコンボードの電源を落としても保持されます。
仮想EEPROMはフラッシュメモリの2ページ(1024バイト×2)を利用しています。
フラッシュメモリの書込み回数の制約を考慮し、同じアドレスへの繰り返し書き込みに対して書き込み位置を分散しています。
保存可能なデータ量は最大で250ワード(500バイト)となります。
EEPWRITEEEPREAD コマンドで指定する読書きを指定するアドレスは実際にはアドレスではなく、検索キーです。0~32767の間に任意で利用出来ます。
検索キー数はデータ保存量が250ワードの制約から、250以内に抑える必要あります。仮想EEPROMの機構から数十以内に抑えることを推奨します。

【エラーメッセージ】
Syntax error

文法エラー、書式と異なる利用を行った

EEPROM out size

書き込み容量を超えた

EEPROM bad FLASH

フラッシュメモリの異常が発生した

【利用例】
アドレス 1234 に 123 を書き込み、その値を読む
EEPWRITE 1234, 123
OK
?EEPREAD(1234)
123
OK