【命令の構造】
PICの命令は下記4種類に大別されます。下記にそれぞれの
命令語の構造を説明します。
・ バイト処理命令
・ ビット処理命令
・ リテラル処理命令
・ ジャンプ命令
(1) バイト処理命令
「命令コード」:すべての命令を区別するためのもので
命令毎に一つのコードが対応しています。
f:file registerの略で 命令の対象となる変数レジスタ
のアドレスを指定します。このfは7ビットなのでアド
レスとしては00から7Fまでの128個まで指定出来る
ことになります。
このレジスタの指定方法には、プログラムの中で
設定した変数のラベルが使えます。
(例)
INCF COUNTER,F (COUNTERが変数名)
MOVF FLAG,W (FLAGが変数名)
d:desitination selectの略で、命令の実行結果をどこに
格納するかを指定します。
d=0の時は ワーキングレジスタ(Wreg)へ格納
d=1の時は fで指定されているfile registerに格納
このdの書式は WかFで書きます。
(例)
DECF INTERVAL,F (fをFと書くとd=1)
RLF POSITION,W (fをWと書くとd=0)
(2) ビット処理命令
f:file registerの略で上記と全く同じものです。
b:bit addressを示すもので3ビットですから0から7の
8ビットが指定出来ます。
ここの書式にもプログラムで指定したラベルを使用
することが出来ます。
(例)
BTFSS STATUS,Z (Z=2と指定されている)
BSF PORTA,RA3 (RA3=3 〃 )
(3) リテラル関連命令
k:Literalの意味で、定数を直接使うときに指定します。
8ビット(1バイト)の定数を指定することが出来ます。
従って通常の1バイト文字コードを直接扱えます。
(例)
MOVLW 'A' (文字コード(3A)をWregに)
ADDLW 0FH (16進数0FをWregに加算)
(4) ジャンプ命令
k:Address literalが入る。11ビットまでのアドレスが
直接指定できることになります。従って最大2kバイト
まで使えることになります。
普通このkにはジャンプ先のラベルを書きます。
(例)
GOTO LOOP (LOOPがラベル)
CALL INPUT (INPUTがラベル)
【STATUS REGISTER】
Status Registerとは、各命令の実行結果が反映される
フラグ類が集まっているレジスタです。
中身は下図の様になっていて、それぞれの意味は下記
となっています。
IRP
RP1
RP0
TO
PD
Z
DC
C
IRP:間接アドレス時のレジスタのBank選択制御用
0:Bank0 (00 - FF)
1:Bank1 (100 - 1FF)
(注 PIC16F84では使わない)
RP0,RP1:直接アドレス時のレジスタのBank選択制御用
00:Bank0 (00 - 7F)
01:Bank1 (80 - FF) 各Bankは128バイトづつ
10:Bank2 (100 - 17F)
11:Bank3 (180 - 1FF)
(注 PIC16F84ではRP0のみ使う)
TO:システム内部の起動タイマーの状態を表す
1:電源投入後、CLRWDT命令、SLEEP命令実行後
0:ウォッチドッグタイマがタイムアップした時
PD:電源断フラグ
1:電源投入後またはCLRWDT命令実行後
0:SLEEP命令実行後
Z:ゼロフラグ
1:算術、論理演算命令実行後がゼロのとき
0: 〃 ゼロで無い時
DC:桁のキャリフラグ
(ADDWF、ADDLW、SUBWF、SUBLW命令で使用)
1:命令実行後下位4ビットがオーバーフローした時
0: 〃 しない時
C:キャリフラグ
1:算術、論理演算命令実行後8ビットがオーバー
フローした時
0:算術、論理演算命令実行後オーバーフローして
無いとき