PICの命令の書き方

【PICの命令の書き方】

命令を書くときの基本フォーマットは下記とします。

Label  Mnemonic  Operand  Comment

(1) Label
 Labelは行の先頭から始まる記号で、ジャンプ命令の飛び先指定
 などに使います。必要無いときには、無くて構いません。
    
    Labelは各行の先頭から始まっていなければなりません。
    また含まれる文字は、アルファベットかアンダーバー(_)
    で始まる英数字でなければならない。
    Labelは32文字以下の長さまでで、大文字、小文字の
    区別があります。ただし、大小文字の区別は環境設定
    で無くすこともできます。


(2) Mnemonic
 Mnemonicは命令の記号そのもの。Commentはセミコロン( ; )を頭
 につけあとは何でも書けます。

    アセンブラー命令と指示命令(擬似命令)は、行の先頭
    から1個以上のスペースが無ければならない。Labelが
    ある場合は、Labelの次に1個以上のスペースかコロン(:)
    が必要。


(3)Operand

 Operandには下記があります。
 
  d: 実行結果の格納をWreg(0の時)にするか、レジスタファイル
      (1の時)にするかを指定します。
  f: レジスタファイル内のf番地のレジスタを指す。
  k: 定数で0〜255の値。(1バイト)
  b: ビット位置を示し、最下位を0、最上位を7とする。

    OperandはMnemonicの次に1個以上のスペースかタブ
    で分離される。また複数のOperandが必要な場合には
    「,」で分離する。

(4) Comment
  セミコロン(;)に続く文節は全てコメントとされる。
  そしてアセンブルでは無視されオブジェクトには何も関係が無い。
  文字定数としてセミコロンを使うことは問題無い。


【見やすい書き方】

 普通はプログラムを見やすくするために、アドレスなど数値で表現
しなければならないところを記号で表現します。

この変換を行うのは、アセンブラというプログラムの役割で、他にも
見易くするための多くの機能を持っています。

 これらの中に記号に数値を割り振る、EQUとかSETとかいう擬似命令
が用意されていますので、これを使って記号で数値が表せる様に
最初に定義しておきます。
これら擬似命令の詳細は、MPASMの使い方を参照して下さい。


特に、Openrandの中に書く記号には特別の記号が用意されています。

  d:
    判りやすく W か F で書きます。

  f:
    あらかじめ定義されていたり、自分でEQU擬似命令で定義します。
     例
       MOVWF  DATA1,W
       GOTO   INPUT 

  k:
    定数も数字では判り難いので、記号を割り当てます。
     例
      BCF     PORTA,LED1
      MOVWF  PORTA

  b:
    これも判りやすくするため記号で書きます。
     例
      BTFSS  STATUS,C
      BSF    STATUS,RP0 

さらに詳細は、PICの命令の書き方を参照して下さい。

【システム定義ラベル】

これらの記号の中には、あらかじめアセンブラで定められているものが
あります。それをシステム定義ラベルと呼びますが、それらを使うのが
早道です。

これを知るには、MPLABなどの中に含まれているインクルードファイル
と呼ばれるファイルを印刷してみるのが手っ取り早い方法です。

例えば「P16f84.inc」などのファイルをメモ帳などで印刷します。
下記はこのインクルードファイルの一部ですが、レジスタの定義が色々
されています。
プログラムを書くときに、最初にこのファイルを使うことを宣言しておけば、
下記で指定されているラベルは、敢えて宣言しなくても使うことができます。



;===============================================
;
; Register Definitions
;
;===============================================

W      EQU  H'0000'
F      EQU  H'0001'

;----- Register Files-------------------------

INDF     EQU  H'0000'
TMR0     EQU  H'0001'
PCL     EQU  H'0002'
STATUS    EQU  H'0003'
FSR     EQU  H'0004'
PORTA    EQU  H'0005'
PORTB    EQU  H'0006'
EEDATA    EQU  H'0008'
EEADR    EQU  H'0009'
PCLATH    EQU  H'000A'
INTCON    EQU  H'000B'

OPTION_REG  EQU  H'0081'
TRISA    EQU  H'0085'
TRISB    EQU  H'0086'
EECON1    EQU  H'0088'
EECON2    EQU  H'0089'

;----- STATUS Bits --------------------------

IRP     EQU  H'0007'
RP1     EQU  H'0006'
RP0     EQU  H'0005'
NOT_TO    EQU  H'0004'
NOT_PD    EQU  H'0003'
Z      EQU  H'0002'
DC      EQU  H'0001'
C      EQU  H'0000'

;----- INTCON Bits --------------------------

GIE     EQU  H'0007'
EEIE     EQU  H'0006'
T0IE     EQU  H'0005'
INTE     EQU  H'0004'
RBIE     EQU  H'0003'
T0IF     EQU  H'0002'
INTF     EQU  H'0001'
RBIF     EQU  H'0000'

;----- OPTION Bits --------------------------

NOT_RBPU   EQU  H'0007'
INTEDG    EQU  H'0006'
T0CS     EQU  H'0005'
T0SE     EQU  H'0004'
PSA     EQU  H'0003'
PS2     EQU  H'0002'
PS1     EQU  H'0001'
PS0     EQU  H'0000'


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