プログラムシミュレーション例

プログラムシミュレーション例1

下表の様なデータ列 [SX]+ "#nn" + [EX] + (BCC) のnn部を1回送信するごとに"00"から"99"までの数字で1づつ増加させ、100ms間隔で送信する。

SX # nn(00〜99) EX (BCC)
0x02 0x23 0x30,0x30〜0x39,0x39 0x03 (LRC-Evenなどで計算)

<[0]Configuration設定>
BCC:LRC-Even
Bigin code:01 02
End code:03 17

プログラム プログラム説明
SET DA 00SX # データアレイ00にデータSX #をセットします。
SET DA 02EX データアレイ02にデータEXをセットします。
SET REG0 000000 レジスタ0に値000000をセットします。
' '
L000 ラベルL000
SET DV 01 REG0 2 データアレイ01にレジスタ0の内容を文字列として2文字セットします。
SEND DA 00+REG* データアレイ00のデータを送信します。
SEND DA 01+REG* データアレイ01のデータを連続送信します。
SEND DA 02+REG* データアレイ02のデータを連続送信します。
SET REG0 INC レジスタ0の値をインクリメントします。
' '
WAIT TM 000100 100ms待ちます。
IF REG0<000100 L000 レジスタ0の値と定数値000100を比較し定数値未満ならラベルL000に分岐します。
SET REG0 000000 レジスタ0の値が99を超えたのでレジスタ0に値000000をセットします。
GOTO L000 ラベルL000にジャンプします。
' '

 

プログラムシミュレーション例2

RTS(CTS)がアクティブの間、"ABC" 受信で "001"、"DEF" 受信で "002" を送信し、1 秒以内にいずれも受信できなければ "000" を送信する。また、RTS(CTS)が非アクティブになればプログラムを終了する。

<[1]Interface設定>

Pin:DTE

プログラム プログラム説明
L000 ラベルL000
WAIT MLT 以下の連続するWAIT 命令を同時に実行し、いずれかの条件が成立するまで待ちます。
WAIT CHR A B C 文字列A B Cを受信するまで待ちます。
WAIT CHR D E F 文字列D E F を受信するまで待ちます。
WAIT LN CTS=0 制御線CTSの論理が0になるまで待ちます。
WAIT TM 001000 100msになるまで待ちます。
SET REG0 SPR-ST WAIT MLT命令で待機状態を解除する要因となったWAIT 命令を示す値をレジスタ0にセットします。
IF REG0=000100 L001 レジスタ0の値が000100(1番目のWAIT CHR命令)のときラベルL001に分岐します。
IF REG0=000101 L002 レジスタ0の値が000101(2番目のWAIT CHR命令)のときラベルL002に分岐します。
IF REG0=000601 L003 レジスタ0の値が000601(WAIT LN CTS命令)のときラベルL003に分岐します。
SEND CHR 0 0 0 データ0 0 0 を送信します。
GOTO L000 ラベルL000にジャンプします。
' '
L001 ラベルL001
SEND CHR 0 0 1 データ 0 0 1 を送信します。
GOTO L000 ラベルL000にジャンプします。
' '
L002 ラベルL002
SEND CHR 0 0 2 データ 0 0 2 を送信します。
GOTO L000 ラベルL000にジャンプします。
' '
L003 ラベルL003
STOP プログラムシミュレーション停止します。
' '

プログラムシミュレーション例3

受信フレームの 3、4 バイト目が "$A" なら "a"、"$B" なら "b"、それ以外なら "c" を送信し、[1]キー押下で"$A" の代わりに "$0"、"$B" の代わりに "$1" を条件とするように切り替え、[0]キー押下で元の条件に戻す。また受信フレームが 4 バイト未満でプログラムを終了する。

プログラム プログラム説明
SET REGA 000065 レジスタAに 10進値000065(0x41)をセットします。
SET REGB 000066 レジスタBに 10進値000066(0x42)をセットします。
L000 ラベルL000
' '
WAIT MLT 以下の連続するWAIT 命令を同時に実行し、いずれかの条件が成立するまで待ちます。
WAIT KEY キーが押されるまで待ちます。
WAIT FRM CLR 1フレームのデータを受信するまで待ちます。
SET REG0 SPR-ST WAIT MLT命令で待機状態を解除する要因となったWAIT 命令を示す値をレジスタ0にセットします。
IF REG0=000500 L001 レジスタ0の値が000500 (WAIT KEY命令)のときラベルL001に分岐します。
IF REG0=000200 L002 レジスタ0の値が000200 (WAIT FRM命令)のときラベルL002に分岐します。
GOTO L000 ラベルL000にジャンプします。
' '
L001 ラベルL001
SET REG1 SPR-KY WAIT KEY命令で実行中に入力された[0]〜[F]キーに対応する値をレジスタ1にセットします。
IF REG1=000000 L010 レジスタ1の値が000000 ([0]キー)のときラベルL010に分岐します。
IF REG1=000001 L011 レジスタ1の値が000001 ([1]キー)のときラベルL011に分岐します。
GOTO L000 ラベルL000にジャンプします。
' '
L010 ラベルL010
SET REGA 000065 レジスタAに 10進値000065(0x41)をセットします。
SET REGB 000066 レジスタBに 10進値000066(0x42)をセットします。
GOTO L000 ラベルL000にジャンプします。
' '
L011 ラベルL011
SET REGA 000048 レジスタAに 10進値000048(0x30)をセットします。
SET REGB 000049 レジスタBに 10進値000049(0x31)をセットします。
GOTO L000 ラベルL000にジャンプします。
' '
L002 ラベルL002
SET REG0 SPR-DL WAIT FRM命令で受信フレームバッファに取込まれたデータ数をレジスタ0にセットします。
IF REG0<000004 L999 レジスタ0の値が000004(データ数) 未満のときラベルL999に分岐します。
SET DP 0002 データポインタに0002をセットします。
SET REG0 SPR-DT 取込んだデータのデータポインタ位置(3バイト目)のデータをレジスタ0にセットします。
IF REG0/=000036 L000 レジスタ0の値が000036 (0x24)でないときラベルL000に分岐します。
SET DP INC データポインタの値をインクリメントします。
SET REG0 SPR-DT 取込んだデータのデータポインタ位置(4バイト目)のデータをレジスタ0にセットします。
IF REG0=REGA L041 レジスタ0の値がレジスタAの値のときラベルL041に分岐します。
IF REG0=REGB L042 レジスタ0の値がレジスタBの値のときラベルL042に分岐します。
SEND CHR c データc を送信します。
GOTO L000 ラベルL000にジャンプします。
' '
L041 ラベルL041
SEND CHR a データa を送信します。
GOTO L000 ラベルL000にジャンプします。
' '
L042 ラベルL042
SEND CHR b データb を送信します。
GOTO L000 ラベルL000にジャンプします。
' '
L999 ラベルL999
STOP プログラムシミュレーション停止します。
' '