スタジオ ミュウ

ミュウロボ制御基板の命令一覧表(myurobo.exe)

LED計測制御 | LEDグループ学習 | メロディのプログラム | RCサーボの制御 | モーターのPWM制御
MYUロボ-II | MYU-USB転送ソフト | MYU USB BASIC | USBドリトル | C アセンブラMYUUSB-1基板 | MYUUSB命令一覧
転送ソフト(232C) | MYU BASIC(232C) | 構造化ドリトル | エクセルで制御 | エクセルで計測 | MYUアセンブラ | MYUROBO-1A基板 | MYUロボ(232C)命令一覧 | ドリトル命令一覧

命令には、引数のない1バイト命令。引数が1つの2バイト命令。引数が2つの3バイト命令があります。
※時間の単位は0.1秒。※ブロック内から他のブロック呼び出しは深さ8レベルまで可能。
※ブロック内からの飛び出しジャンプや飛び込みジャンプは禁止。プログラム容量は127バイト。
※前進などのモーター制御命令は、モーター制御命令以外の命令の間も状態を維持します。前進の後、ブザー命令を実行するとブザーを鳴らしながら前進します。
※パワーオンスタートについての注意
ミュウロボ命令一覧(ドリトル)

※引数が省略された場合、引数は0がセットされます。

命令 引数 使用例および解説(myurobo.exe) Code
//   //から次の行までコメントを書くことができる  
DEFINE 2 第1引数の名前を定義して第2引数から次の行までの命令に置き換える 255
パワーオンスタート 0 はじめロボットの次に置くことで電源オンとともにプログラムが始まる 111
前進 1 前進,10 両輪を前転させた後、引数の値(0-255)x0.1秒だけ待つ 2
後退 1 後退,10 両輪を後転させた後、引数の値(0-255)x0.1秒だけ待つ 8
左前 1 左前,10 左車輪を前転させた後、引数の値(0-255)x0.1秒だけ待つ 1
右前 1 右前,10 右車輪を前転させた後、引数の値(0-255)x0.1秒だけ待つ 3
左後 1 左後,10 左車輪を後転させた後、引数の値(0-255)x0.1秒だけ待つ 7
右後 1 右後,10 右車輪を後転させた後、引数の値(0-255)x0.1秒だけ待つ 9
右回り 1 右回り,10 左車輪を前転・右車輪を後転させた後、引数の値(0-255)x0.1秒だけ待つ 10
左回り 1 左回り,10 右車輪を前転・左車輪を後転させた後、引数の値(0-255)x0.1秒だけ待つ 11
停止 1 停止,10 全モーターを停止させた後、引数の値(0-255)x0.1秒だけ待つ 0
時間 1 時間,10 引数の値(0-255)x0.1秒だけ前の状態を続ける 5
モーター左 1 モーター左,10 第3モーターを左回転させた後、引数の値(0-255)x0.1秒だけ待つ 4
モーター右 1 モーター右,10 第3モーターを右回転させた後、引数の値(0-255)x0.1秒だけ待つ 6
ブザー 1 ブザー,10 引数だけブザーを鳴らす 80
電子音 2 電子音,10,30
第1引数の値(0-255)x0.1秒だけ第2の引数のパルス幅(1-255)30で音を鳴らす
パルス幅が大きいほど音は低くなる。
105
リミットスイッチ 0 リミットスイッチが押されるまで以前の状態を続ける
左前,0 リミットスイッチ
スイッチが押されるまで左前を続ける
112
ブロックはじめ 1 ブロックはじめ,10
  前進,10 左前,10
ブロック終わり

ブロック番号(1-127)10を宣言しブロックおわりまでの間にプログラムを書く
ブロック内のプログラムは他から呼び出された時だけ実行します
81
ブロックおわり 0 ブロックの終わりを宣言する 113
ブロック実行 1 ブロック実行,10 ブロック番号10を呼び出す 82
ブロック繰り返し 2 ブロック繰り返し,10,0
ブロック番号10を回数(0-255)繰り返す。回数が0の場合は無限に繰り返す
106
ブロック脱出 0 ブロック内から強制的に抜け出し呼ばれた所に戻る 114
アンカー 1 アンカー,10
アンカー番号(1-127)10を宣言する
83
ジャンプ 1 ジャンプ,10
アンカー番号10にジャンプ
84
入力なしジャンプ 2 入力なしジャンプ,10,2
第2引数の入力ポート(1-4)2が離れていたらアンカー番号10にジャンプ
109
入力ありジャンプ 2 入力ありジャンプ,10,2
第2引数の入力ポート(1-4)2が接続されていたらアンカー番号10にジャンプ
108
サーボ 2 サーボ,190,2 停止,30
第1引数のハルス幅(30-255)190を第2引数のサーボ(1-6)2にセット
停止,30で3秒間サーボ信号を出す
107
ポート出力 2 ポート出力,10,64
第2引数のデータ(0-255)64をポートに出力した後、時間(0-255)10(1秒)だけ待つ
110
ミュウアセンブラを使うと変数演算やタイマー・ポート命令など細かい制御が出来ます。

<ミュウアセンブラで使用するレジスタ(8ビット)>
A:アキュームレーター 演算用レジスタ
IX:インデックスレジスター
IXM:インデックスメモリ IXの値(0-11)によって格納されるレジスタメモリ。12個の配列として使える。
※CPUが16F688 88の場合、IXの値(0-79)によって格納されるレジスタメモリ。80個の配列として使える。
T1L:タイマー1(8nSecサイクル)の下位8ビット
T1H:タイマー1の上位8ビット 約0.5秒周期で1周します。
PA:PIC16F630のポートAレジスタ 主に入力として使う。
PC:ポートCレジスタ モーターやサーボ制御用の出力ポート。
ARG1:CMD命令用第1引数 CMD命令によって使用される引数をセットする。CMD命令は引数にCodeをセットすることで命令を実行。
ARG2:CMD命令用第2引数
Z(ゼロ)フラグ:演算命令(ADD,SUB,CMP,AND,OR,XOR,INC,DEC)を実行して結果がゼロならセットするフラグ。
C(キャリー)フラグ:演算命令(SUB,CMP)を実行して結果が負の場合や加算命令(ADD)を実行してオーバーフローした場合セットするフラグ。RLA,RRA,CLC,STC命令でもフラグが変化します。
タイマー1はサーボ命令実行中、20msecごとにクリアされます。
ミュウアセンブラ命令一覧表(ドリトル)

※引数が省略された場合、引数は0がセットされます。

命令 引数 使用例および解説(myurobo.exe) Code
CMD 1 引数のCode命令を実行する。その際、ARG1,ARG2レジスタの値が引数となる。
ARG1,10 CMD,2 ARG1に10(1秒)をセットし、Code 2(前進)を実行。
85
A 1 A,10 Aレジスタに引数(10)をセット。 86
IX 1 IX,10 IXレジスタに引数(10)をセット。 87
IXM 1 IXM,10 IXの値(0-11)によって格納されるインデックスメモリに引数(10)をセット。 88
T1L 1 T1L,10 タイマー1の下位8ビット(0-255)に引数(10)をセット。 89
T1H 1 T1H,10 タイマー1の上位8ビット(0-255)に引数(10)をセット。 90
ARG1 1 ARG1,10 CMD命令で実行される第1引数に引数(10)をセット。 91
ARG2 1 ARG2,10 CMD命令で実行される第2引数に引数(10)をセット。 92
PA 1 PA,10 ポートAに引数(10)を出力。 93
PC 1 PC,10 ポートCに引数(10)を出力。 94
ADD 1 ADD,10 Aレジスタ = Aレジスタ + 引数(10) 95
SUB 1 SUB,10 Aレジスタ = Aレジスタ - 引数(10) 96
CMP 1 CMP,10 Aレジスタと引数(10)と比較しZ(ゼロ)フラグとC(チャリー)フラグ を変化させる。 97
AND 1 AND,10 Aレジスタ = Aレジスタ AND 引数(10) 98
OR 1 OR,10 Aレジスタ = Aレジスタ OR 引数(10) 99
XOR 1 XOR,10 Aレジスタ = Aレジスタ XOR 引数(10) 100
JZ 1 JZ,10 Z(ゼロ)フラグが真(セット)ならアンカー番号10にジャンプ。 101
JNZ 1 JNZ,10 Z(ゼロ)フラグが偽(クリア)ならアンカー番号10にジャンプ。 102
JC 1 JC,10 C(キャリー)フラグが真(セット)ならアンカー番号10にジャンプ。 103
JNC 1 JNC,10 C(キャリー)フラグが偽(クリア)ならアンカー番号10にジャンプ。 104
AIX 0 Aレジスタの値をIXレジスタにセット。 115
AIXM 0 Aレジスタの値をIXMにセット。 116
AT1L 0 Aレジスタの値をタイマー1の下位8ビットにセット。 117
AT1H 0 Aレジスタの値をタイマー1の上位8ビットにセット。 118
AARG1 0 Aレジスタの値をARG1にセット。 119
AARG2 0 Aレジスタの値をARG2にセット。 120
APA 0 Aレジスタの値をポートAに出力。 121
APC 0 Aレジスタの値をポートCに出力。 122
IXA 0 IXレジスタの値をAレジスタにセット。 123
IXMA 0 IXMの値をAレジスタにセット。 124
T1LA 0 タイマー1の下位8ビットの値をAレジスタにセット。 125
T1HA 0 タイマー1の上位8ビットの値をAレジスタにセット。 126
ARG1A 0 ARG1の値をAレジスタにセット。 127
ARG2A 0 ARG2の値をAレジスタにセット。 128
PAA 0 ポートAの値をAレジスタにセット。 129
PBA 0 ポートBの値をAレジスタにセット。(16F88用) 130
PCA 0 ポートCの値をAレジスタにセット。 130
CLA 0 Aレジスタをゼロにする。 131
CLIX 0 IXレジスタをゼロにする。 132
CLIXM 0 IXMをゼロにする。 133
CLT1L 0 タイマー1の下位8ビットをゼロにする。 134
CLT1H 0 タイマー1の上位8ビットをゼロにする。 135
CLARG1 0 ARG1をゼロにする。 136
CLARG2 0 ARG2をゼロにする。 137
CLPA 0 ポートAにゼロを出力する。 138
CLPC 0 ポートCにゼロを出力する。 139
INCA 0 Aレジスタ = Aレジスタ + 1 140
INCIX 0 IXレジスタ = IXレジスタ + 1 141
INCIXM 0 IXM = IXM + 1 142
INCARG1 0 ARG1 = ARG1 + 1 143
INCARG2 0 ARG2 = ARG2 + 1 144
DECA 0 Aレジスタ = Aレジスタ - 1 145
DECIX 0 IXレジスタ = IXレジスタ - 1 146
DECIXM 0 IXM = IXM - 1 147
DECARG1 0 ARG1 = ARG1 - 1 148
DECARG2 0 ARG2 = ARG2 - 1 149
ADDIX 0 Aレジスタ = Aレジスタ + IXレジスタ 150
ADDIXM 0 Aレジスタ = Aレジスタ + IXM 151
ADDT1L 0 Aレジスタ = Aレジスタ + タイマー1の下位8ビット 152
ADDT1H 0 Aレジスタ = Aレジスタ + タイマー1の上位8ビット 153
ADDARG1 0 Aレジスタ = Aレジスタ + ARG1 154
ADDARG2 0 Aレジスタ = Aレジスタ + ARG2 155
SUBIX 0 Aレジスタ = Aレジスタ - IXレジスタ 156
SUBIXM 0 Aレジスタ = Aレジスタ - IXM 157
SUBT1L 0 Aレジスタ = Aレジスタ - タイマー1の下位8ビット 158
SUBT1H 0 Aレジスタ = Aレジスタ - タイマー1の上位8ビット 159
SUBARG1 0 Aレジスタ = Aレジスタ - ARG1 160
SUBARG2 0 Aレジスタ = Aレジスタ - ARG2 161
CMPIX 0 AレジスタとIXレジスタと比較しZ(ゼロ)フラグとC(チャリー)フラグ を変化させる。 162
CMPIXM 0 AレジスタとIXMと比較しZ(ゼロ)フラグとC(チャリー)フラグ を変化させる。 163
CMPT1L 0 Aレジスタとタイマー1の下位8ビットと比較しZ(ゼロ)フラグとC(チャリー)フラグ を変化させる。 164
CMPT1H 0 Aレジスタとタイマー1の上位8ビットと比較しZ(ゼロ)フラグとC(チャリー)フラグ を変化させる。 165
CMPARG1 0 AレジスタとARG1と比較しZ(ゼロ)フラグとC(チャリー)フラグ を変化させる。 166
CMPARG2 0 AレジスタとARG2と比較しZ(ゼロ)フラグとC(チャリー)フラグ を変化させる。 167
ANDIXM 0 Aレジスタ = Aレジスタ AND IXM 168
ORIXM 0 Aレジスタ = Aレジスタ OR IXM 169
XORIXM 0 Aレジスタ = Aレジスタ XOR IXM 170
RLA 0 AレジスタをC(キャリー)フラグを通して1 ビット左に回転します。 171
RRA 0 AレジスタをC(キャリー)フラグを通して1 ビット右に回転します。 172
CLC 0 C(キャリー)フラグをクリア 173
STC 0 C(キャリー)フラグをセット 174

<新しいPIC16F688で追加した命令、レジスタ>
AH:アキュームレーターの上位8BIT
IXP:インデックスポインタレジスタ プロシージャや関数の位置を示すレジスタ
命令 引数 解説 Code
RS 1 引数(0-255)の値をシリアルポートに出力。(16F688/88専用) 70
AH 1 AHレジスタに引数(0-255)をセット。(16F688/88専用) 71
PUTAX 1 16ビット命令 IX = IXP - 引数(1-255)を実行後、AX(AH/A)レジスタの値をIXM2にセット(16F688/88専用) 72
GETAX 1 16ビット命令 IX = IXP - 引数(1-255)を実行後、IXM2レジスタの値をAX(AH/A)にセット(16F688/88専用) 73
AN 1 引数(入力ポート)を10ピットA/D変換して上位8ビットをAレジスタにセット(16F688/88専用) 74
TRISA 1 ポートAの入出力をビットごと(0:出力 1:入力)に設定する(16F688/88専用) 75
TRISC 1 ポートCの入出力をビットごと(0:出力 1:入力)に設定する(16F688/88専用) 76
PUTA 1 IX = IXP - 引数(1-255)を実行後、Aレジスタの値をIXMにセット(16F688/88専用) 77
GETA 1 IX = IXP - 引数(1-255)を実行後、IXMの値をAレジスタにセット(16F688/88専用) 78
IXP 1 IXPレジスタに引数(0-255)をセット(16F688/88専用) 79
PUSHA 0 スタックにAレジスタの値を保存(16F688/88専用) 176
POPA 0 スタックから値を取り出しAレジスタにセット(16F688/88専用) 177
INCIXP 0 IXPレジスタ = IXPレジスタ + 1(16F688/88専用) 178
DECIXP 0 IXPレジスタ = IXPレジスタ - 1(16F688/88専用) 179
AIXPM 0 IX = IXPを実行後、Aレジスタの値をIXMにセット。IXP = IXP + 1する(16F688/88専用) 180
IXPMA 0 IXP = IXP - 1した後、IX = IXPを実行。IXMの値をAレジスタにセット(16F688/88専用) 181
EXARG1 0 AレジスタとARG1レジスタの値交換(16F688/88専用) 182
ANDARG1 0 Aレジスタ = Aレジスタ AND ARG1(16F688/88専用) 183
ORARG1 0 Aレジスタ = Aレジスタ OR ARG1(16F688/88専用) 184
XORARG1 0 Aレジスタ = Aレジスタ XOR ARG1(16F688/88専用) 185
READRS 0 シリアルポートのデータがある場合、キャリーフラグがセットされ値がAレジスタに保存される
データがない場合、キャリーフラグとAレジスタがクリアされる(16F688/88専用)
186
INIT 0 ポートを初期化する(16F688/88専用) 187
STEPIN 0 デバッグモードとなりレジスタの値をシリアルポートに出力。任意のシリアル入力でステップ動作となる(16F688/88専用) 188
ANDA 0 Aレジスタ = Aレジスタ AND Aレジスタ(16F688/88専用) 189
ANAX 0 直前のAN命令で取得した10BITアナログ値を下位8ビットをAレジスタに、上位2ビットをAHレジスタにセットする(16F688/88専用) 190
AXIXM2 0 16ビット命令 AX(AH/A)レジスタの値をIXMにセット(16F688/88専用) 191
IXM2AX 0 16ビット命令 IXMレジスタの値をAX(AH/A)にセット(16F688/88専用) 192
AXARG 0 16ビット命令 AX(AH/A)レジスタの値をIXMにセット(16F688/88専用) 193
ARGAX 0 16ビット命令 IXMレジスタの値をAX(AH/A)にセット(16F688/88専用) 194
CLAH 0 AHレジスタをゼロにする(16F688/88専用) 195
CLAX 0 16ビット命令 AX(AH/A)レジスタをゼロにする(16F688/88専用) 196
INCAX 0 16ビット演算 AX(AH/A) = AX(AH/A) + 1(16F688/88専用) 197
INCIXM2 0 16ビット演算 IXM2 = IXM2 + 1(16F688/88専用) 198
DECAX 0 16ビット演算 AX(AH/A) = AX(AH/A) - 1(16F688/88専用) 199
DECIXM2 0 16ビット演算 IXM2 = IXM2 - 1(16F688/88専用) 200
ADDARG 0 16ビット符号付演算 AX(AH/A) = AX(AH/A) + ARG(ARG2/ARG1)(16F688/88専用) 201
SUBARG 0 16ビット符号付演算 AX(AH/A) = AX(AH/A) - ARG(ARG2/ARG1)(16F688/88専用) 202
ANDAX 0 16ビット演算 AX(AH/A) = AX(AH/A) AND AX(AH/A)(16F688/88専用) 203
ANDARG 0 16ビット演算 AX(AH/A) = AX(AH/A) AND ARG(ARG2/ARG1)(16F688/88専用) 204
ORARG 0 16ビット演算 AX(AH/A) = AX(AH/A) OR ARG(ARG2/ARG1)(16F688/88専用) 205
XORARG 0 16ビット演算 AX(AH/A) = AX(AH/A) XOR ARG(ARG2/ARG1)(16F688/88専用) 206
CMPIXM2 0 16ビット命令 AX(AH/A) - IXM2 の結果が'0'ならZ(ゼロ)フラグを、負ならC(チャリー)フラグ をセットする。各レジスタ値は変化しない(16F688/88専用) 207
CMPARG 0 16ビット命令 AX(AH/A) - ARG(ARG1/ARG2) の結果が'0'ならZ(ゼロ)フラグを、負ならC(チャリー)フラグ をセットする。各レジスタ値は変化しない(16F688/88専用) 208
RLAX 0 16ビット命令 AX(AH/A)レジスタをC(キャリー)フラグを通して1 ビット左に回転します(16F688/88専用) 209
RRAX 0 16ビット命令 AX(AH/A)レジスタをC(キャリー)フラグを通して1 ビット右に回転します(16F688/88専用) 210
MULARG 0 16ビット符号付演算 AX(AH/A) = AX(AH/A) x ARG(ARG2/ARG1)(16F688/88専用) 211
DIVARG 0 16ビット符号付演算 AX(AH/A) = AX(AH/A) ÷ ARG(ARG2/ARG1) 余りはARG(ARG2/ARG1)にセット(16F688/88専用) 212
PUSHAX 0 16ビット命令 スタックにAX(AH/A)レジスタの値を保存(16F688/88専用) 213
POPAX 0 16ビット命令 スタックから値を取り出しAX(AH/A)レジスタにセット(16F688/88専用) 214
AXIXPM2 0 16ビット命令 AX(AH/A)レジスタの値をIXM2レジスタにセット。IXP = IXP + 2する(16F688/88専用) 215
IXPM2AX 0 16ビット命令 IXM2レジスタの値をAX(AH/A)レジスタにセット(16F688/88専用) 216
EXAH 0 AレジスタとAHレジスタの値交換。(16F688/88専用) 217
EXARG 0 AX(AH/A)レジスタとARG(ARG2/ARG1)レジスタの値交換(16F688/88専用) 218
COMAX 0 AX(AH/A)レジスタの補数をセットする(16F688/88専用) 219
ARS 0 Aレジスタの値をシリアルポートに出力(16F688/88専用) 220
DECRS 0 Aレジスタの値を10進表記右詰め3文字でシリアルポートに出力(16F688/88専用) 221
HEXRS 0 Aレジスタの値を16進表記でシリアルポートに出力(16F688/88専用) 222
AXDECRS 0 16ビット命令 AX(AH/A)レジスタの値を符号付10進表記右詰め6文字でシリアルポートに出力(16F688/88専用) 223
AXHEXRS 0 16ビット命令 16進表記でAHレジスタAレジスタの順で値をシリアルポートに出力(16F688/88専用) 224
DELAYAX 0 16ビット命令 AX(AH/A)レジスタ x 1mSECの遅延(16F688/88専用) 225
BREAKP 0 プログラムポインタ:コマンドコード:AH.A.ARG2.ARG1.IXP.IX.IXM.FSR.INDFレジスタの内容をシリアルポートに出力し停止。任意のシリアル入力で次の命令から再実行(16F688/88専用) 226