ミュウアセンブラ命令一覧表(myurobo.exe)
メロディのプログラム | センサープログラム | RCサーボの制御 | 入出力プログラム | モーターのPWM制御 | LEDの制御 | 計測と制御
MYU-USB転送ソフト | MYU BASIC | MYUROBO転送ソフト | 構造化ドリトル | エクセルで制御 | エクセルで計測 | ミュウアセンブラ
MYUUSB-1基板 | MYUROBO-1A基板 | ミュウロボ命令一覧 | ミュウアセンブラ一覧 | 構造化ドリトル制御命令一覧

ミュウアセンブラを使うと変数演算やタイマー・ポート命令など細かい制御が出来ます。

<ミュウアセンブラで使用するレジスタ(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