PICマイコンのインストラクション(命令一覧)
クリックすると詳細説明がでます。

PIC16CXXインストラクションセット
命令 概要
addwf 加算命令
subwf 減算命令
andwf 論理演算命令(AND)
iorwf 論理演算命令(OR)
xorwf 論理演算命令(XOR)
comf 全ビット反転命令(NOT)
clrf ファイルレジスタのクリア
clrw Wレジスタのクリア
decf デクリメント(-1)命令
decfsz デクリメント+スキップ命令
incf インクリメント(+1)命令
incfsz インクリメント+スキップ命令
movf ファイルレジスタからのMOV命令
movwf ファイルレジスタへのMOV命令
swapf 上位(4bit)・下位(4bit)入れ替え
nop ノーオペレーション命令
rlf ビットシフト命令(<<左へ)
rrf ビットシフト命令(>>右へ)
命令 概要
bcf ビットクリア
bsf ビットセット
btfsc ビットクリアならスキップ
btfss ビットセットならスキップ
addlw 即値とWレジスタの加算
sublw 即値とWレジスタの減算
andlw 即値とWレジスタのAND演算
iorlw 即値とWレジスタのOR演算
xorlw 即値とWレジスタのXOR演算
call サブルーチンコール
clrwdt ウォッチドッグタイマのクリア
goto 無条件ジャンプ
movlw Wレジスタへの即値代入
retfie 割り込みルーチンからのリターン
return サブルーチンからのリターン
retlw サブルーチンからのリターン(その2)
sleep スリープ命令


addwf f,d 加算命令

Wレジスタをファイルレジスタfを加算して d が0と場合はWレジスタへ1の場合はファイルレジスタfに格納します。
この命令の実行でC,DC,Zフラグが結果に応じて変化します。
dが0の時
(f)+(W)→(W)
dが1の時
(f)+(W)→(f)

subwf f,d 減算命令

ファイルレジスタfからWレジスタの内容を減算して d が0と場合はWレジスタへ1の場合はファイルレジスタfに格納します。
この命令の実行でC,DC,Zフラグが結果に応じて変化します。
dが0の時
(f)−(W)→(W)
dが1の時
(f)−(W)→(f)

andwf f,d 論理演算命令(AND)

Wレジスタとファイルレジスタfとの論理積をとりその結果をdの値に応じて格納します。
この命令の実行でZフラグが結果に応じて変化します。
論理積
dが0の時
(f)AND(W)→(W)
dが1の時
(f)AND(W)→(f)

iorwf f,d 論理演算命令(OR)

論理和
Wレジスタとファイルレジスタfとの論理和をとりその結果をdの値に応じて格納します。
この命令の実行でZフラグが結果に応じて変化します。
dが0の時
(f)OR(W)→(W)
dが1の時
(f)OR(W)→(f)

xorwf f,d 論理演算命令(XOR)

排他的論理和
Wレジスタとファイルレジスタfとの排他的論理和をとりその結果をdの値に応じて格納します。
この命令の実行でZフラグが結果に応じて変化します。
dが0の時
(f)XOR(W)→(W)
dが1の時
(f)XOR(W)→(f)

comf f,d 全ビット反転命令(NOT)

ファイルレジスタfの内容を全ビット反転してdが0の場合はWレジスタに1の場合は元のファイルレジスタfに結果を格納します。
いわゆるNOT命令です。算術演算で使う2の補数を計算する場合はこの命令で全ビット反転し、1加算することで実現します。
この命令の実行でZフラグが結果に応じて変化します。
COMF reg,1
INCF reg,1

clrf f ファイルレジスタのクリア

ファイルレジスタfを0クリアします。 この命令でZフラグがセット(1がセット)されます。

clrw Wレジスタのクリア

Wレジスタに0をセットします。この命令でZフラグがセットされます。

decf f,d

ファイルレジスタfから1を減算します。尚始めの値が0の場合は255(0FFh)になります。
結果はdが0の時Wレジスタへ1の時、元のファイルレジスタfに入ります。
この命令ではZフラグのみ結果に応じて変化します。

decfsz f,d

ファイルレジスタfから1を減算します。尚始めの値が0の場合は255(0FFh)になります。
結果はdが0の時Wレジスタへ1の時、元のファイルレジスタfに入ります。
そして、結果が0になった場合のみ次の命令をスキップします。スキップした場合は2サイクルの実行時間を必要とします。
この命令はフラグが変化しません。

incf

ファイルレジスタfから1を加算します。尚始めの値が255(0FFh)の場合は0になります。
結果はdが0の時Wレジスタへ1の時、元のファイルレジスタfに入ります。
この命令ではZフラグのみ結果に応じて変化します。

incfsz f,d

ファイルレジスタfから1を加算します。尚始めの値が0の場合は255(0FFh)になります。
結果はdが0の時Wレジスタへ1の時、元のファイルレジスタfに入ります。
そして、結果が0になった場合のみ次の命令をスキップします。スキップした場合は2サイクルの実行時間を必要とします。
この命令はフラグが変化しません。

movf

ファイルレジスタfの内容をWレジスタに格納します。d=0の場合
d=1の場合は何も起こりませんが、Zフラグのみfレジスタに応じて変化します。(0チェックができる)
結果に応じてZフラグがセットされます。
この命令の逆をするのはmovwf命令です。

movwf f

Wレジスタの内容をファイルレジスタfに格納します。
この命令でフラグは変化しません。
この命令の逆をするのはmovf命令です。

swapf f,d

ファイルレジスタfの内容の上位4ビットと下位4ビットを入れ替えdの値に応じて結果を格納します。

nop

この命令は1サイクルのCPU時間を浪費します。
4MHzのクロックでの動作の場合、この命令で1μsの時間を稼げます。
ちなみに2サイクルの場合は
NOP
NOP
と書くより
GOTO $+1
と書いた方がプログラム領域を1ワード節約できます。
(GOTO命令で次の命令にジャンプすると2サイクルの時間を消費します)

rlf

ファイルレジスタfの内容を1ビット左シフトし、結果をdの値に応じて格納します。
はみ出た1ビットはCフラグ(キャリーフラグ)にセットされ、一番右に挿入されたビットは その直前のCフラグの値です。
ですからこの命令の前にCレジスタを設定しておかないとシフト結果が特定できませんので注意してください。

rrf

ファイルレジスタfの内容を1ビット右シフトし、結果をdの値に応じて格納します。
はみ出た1ビットはCフラグ(キャリーフラグ)にセットされ、一番左に挿入されたビットは その直前のCフラグの値です。
ですからこの命令の前にCレジスタを設定しておかないとシフト結果が特定できませんので注意してください。

bcf f,b

ファイルレジスタfの特定のビットをクリア(0を設定)することができます。
クリアするビットはbで指定し、0〜7までの値が有効です。

bsf f,b

ファイルレジスタfの特定のビットをセット(1を設定)することができます。
クリアするビットはbで指定し、0〜7までの値が有効です。

btfsc f,d

条件分岐する命令です。この命令はファイルレジスタfのビットbが0のとき次の命令をスキップしてその次からの 命令から実行を再開します。
スキップした場合は2サイクル、スキップしない場合は1サイクルの時間を消費します。
その命令は非常に低レベルな命令で通常は以下のようにして使う場合が多いでしょう。
ファイルregが0の場合exitへジャンプする。
MOVF reg,1		; regの0チェックをする
btfsc STATUS,2		; STATUSレジスタのビット2(Zフラグ)のチェックをする
goto exit		; Zが1の場合の処理(exitにジャンプする)
nop			; Zが0の場合の処理(regが0でない場合)

btfss f,d

条件分岐する命令です。この命令はファイルレジスタfのビットbが1のとき次の命令をスキップしてその次からの 命令から実行を再開します。
スキップした場合は2サイクル、スキップしない場合は1サイクルの時間を消費します。

addlw k

Wレジスタに数値定数kの値を加算して結果をWレジスタに格納します。
この命令の実行でC,DC,Zフラグが結果に応じて変化します。

sublw k

数値定数kの値からWレジスタの内容を減算して結果をWレジスタに格納します。
この命令の実行でC,DC,Zフラグが結果に応じて変化します。
注:この命令は定数からWレジスタの内容を減算するのでプログラムする際に注意してください

andlw

Wレジスタを定数kとの論理積をとり結果がWレジスタに格納されます。 この命令の実行でZフラグが結果に応じて変化します。

iorlw k

Wレジスタを定数kとの論理和をとり結果がWレジスタに格納されます。 この命令の実行でZフラグが結果に応じて変化します。

xorlw k

Wレジスタを定数kとの排他的論理和をとり結果がWレジスタに格納されます。 この命令の実行でZフラグが結果に応じて変化します。

call addr.

サブルーチンコールを行います。この命令は2サイクルの実行時間を消費します。

clrwdt

ウォッチドッグタイマのカウンタをクリアします。

goto

無条件ジャンプをします。この命令は2サイクルの実行時間を消費します。

movlw

定数kの値をWレジスタに格納します。フラグは変化しません。

retfie

割り込み処理ルーチンからリターンします。この命令は2サイクルの実行時間を消費します。

return

サブルーチンからリターンします。この命令は2サイクルの実行時間を消費します。

retlw k

サブルーチンからリターンし、定数kをWレジスタにセットします。
この命令は2サイクルの実行時間を消費します。

sleep

CPUが低消費電流モードに入ります。スタンバイモードになります。

前に戻る