PICの命令構造


【命令の構造】

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命令実行後
:ゼロフラグ
    1:算術、論理演算命令実行後がゼロのとき
    0:  〃          ゼロで無い時
DC:桁のキャリフラグ
   (ADDWF、ADDLW、SUBWF、SUBLW命令で使用)
    1:命令実行後下位4ビットがオーバーフローした時
    0:   〃                     しない時
C:キャリフラグ
    1:算術、論理演算命令実行後8ビットがオーバー
      フローした時
    0:算術、論理演算命令実行後オーバーフローして
      無いとき



   次のページへ      目次ページへ