PICの命令の書き方


【ソースコードの書式】

PICシリーズのアセンブラで使われる命令の書式は下記となって
います。
ソースコードの各行は下記の基本フォーマットで書きます。

  Label  Mnemonic  Operand  Comment

注1 Labelは行の先頭から始めること
注2 MnemonicでLabelが無い時は先頭に1個以上の
   スペースが必要
注3 Commentはどこから始まっても良い
注4 1行は255文字以下
注5 それぞれの項は1個以上のスペースで分離する
注6 1行に複数のフォーマットを「,」で区切って書ける

Label

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

Mnemonic

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

Operand

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

Comment

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


【命令の書式】

ソースコードの中でも特に命令を書くときの書き方を説明し
ます。命令の中のOpernadには、下記のデータを書く必要
があります。
  ・ f: register file address
  ・ d: destination select(destとも書く)
  ・ b: bit address
  ・ k: literal

各々の書き方の詳細を説明します。

 (1) f : register file address

register file addressとしては、7ビットの幅があるので00から
7Fまで、最大128個のレジスタが指定できます。
しかし、実際に存在するレジスタは、PICの種類によって異な
っています。
 (例) PIC16F84の場合
     address 00〜0C :システムレジスタ
     address 0C〜4F :汎用レジスタ(68個)

このレジスタアドレスの指定には、アドレス数値を直接指定
するのでは、間違いも多く分かり難くなってしまうので、普通
は、EQU命令などでラベルを設定してラベルで指定します。
 (例)
  COUNTER EQU  0DH     ;ラベル設定定義
     −−−−−  
       INCR  COUNTER, F ;ラベル使用

 (2) d : destination select

これは命令を実行した結果をどこに格納するかを指定する
のですが、0か1の2通りだけの指定しかありません。
そして標準インクルードファイルでWとFとが定義されていて
下記となります。

   W : d=0 でWregに結果を格納する
   F : d=1 でfで指定しているレジスタに格納します。

 (例)
    DECF  COUNTER, W  COUNTER-1をWregに格納

 (3) b : bit address

ビット位置を指定する3ビットのアドレスで1バイトのデータの
何ビット目かを指定できます。
このbの書き方には、直接数値を使って指定する方法と、別
に設定されたラベルを使って指定する方法の2通りが使われ
ています。
 (例)

        BSF  PORTA,3  ポートAの4ビット目(0から数える)
     RA3  EQU  3     ラベル設定定義
        BCF  PORTA,RA3 ラベルの使用

 (4) k : Literal

直接固定の値を使用する場合に使います。1バイト(8ビット)
の幅があるので、
  数値なら 0 〜 256
  文字なら ASCIIコードが使用できます。
 (例)
     ADDLW  15  15を加算
     MOVLW  'C' ASCII文字コード(3C)をWregへ


【標準インクルードファイルの内容】

file registerの中でも、システムで使用しているアドレス00から
0Cまでの範囲は毎回同じラベル設定になります。
そこでこれを出来るだけ便利に出来るように、MPLABなどの
アセンブラにはシステムの「標準インクルードファイル」として
あらかじめ定義ファイルが用意されています。
そこで、システムのレジスタを指定するときには、この標準で
設定されているラベルを書式で指定するのが楽です。
以下のリストが、この標準インクルードファイルで設定されて
いるラベルの一覧です。

;===============================================
;
; 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'

;----- EECON1 Bits --------------------------

EEIF     EQU  H'0004'
WRERR    EQU  H'0003'
WREN     EQU  H'0002'
WR      EQU  H'0001'
RD      EQU  H'0000'

;===============================================
;
;  RAM Definition
;
;===============================================

     __MAXRAM H'CF'
     __BADRAM H'07', H'50'-H'7F', H'87'

;===============================================
;
;  Configuration Bits
;
;===============================================

_CP_ON    EQU  H'000F'
_CP_OFF   EQU  H'3FFF'
_PWRTE_ON  EQU  H'3FF7'
_PWRTE_OFF  EQU  H'3FFF'
_WDT_ON   EQU  H'3FFF'
_WDT_OFF   EQU  H'3FFB'
_LP_OSC   EQU  H'3FFC'
_XT_OSC   EQU  H'3FFD'
_HS_OSC   EQU  H'3FFE'
_RC_OSC   EQU  H'3FFF'


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