LIST | 使用するPICの種類などを定義する |
INCLUDE | 設定ファイルを指定する |
__CONFIG | PICの動作モードなどを指定する |
EQU | 定数をラベル名で定義する |
CBLOCK | 連続した定数をラベル名で定義する |
ENDC | |
ORG | 以降の命令の先頭アドレスを指定する |
END | ソースの最後である事を定義する |
LIST P=PIC16F84A ; LIST宣言で使用するPICを16F84Aと定義する~ INCLUDE P16F84A.INC ; 設定ファイルp16f84a.incを読み込む __CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF ORG 0 ; リセットベクタ(0番地)を指定する。
LIST命令では、使用するPICの種類を定義します。
LIST P=PIC16F84A
INCLUDE命令では、設定ファイルを指定します。
設定ファイルは、PICの種類毎にアセンブラ(MPLAB IDE)により提供されています。
INCLUDE P16F84A.INC
__CONFIG命令では、PICの動作モードを指定します。
設定できる値は以下の通りです。(PIC16F84の場合)
それぞれの設定値は、「&」でつなげて記述します。
動作モード | 設定値と意味 | > |
コードプロテクト有無 | _CP_ON | コードプロテクトする |
_CP_OFF | コードプロテクトしない | |
オシレータの種類 | _LP_OSC | 100KHz以下(水晶振動子,省電力モード) |
_XT_OSC | 4MHz以下(水晶振動子orセラミック振動子) | |
_HS_OSC | 4MHz〜20MHz(水晶振動子orセラミック振動子) | |
_RC_OSC | 4MHz以下(R/C発振) | |
パワーアップタイマ有効・無効 | _PWRTE_ON | パワーアップタイマ有効 |
_PWRTE_OFF | パワーアップタイマ無効 | |
ウォッチドックタイマ使用有無 | _WDT_ON | ウォッチドックタイマ有効 |
_WDT_OFF | ウォッチドックタイマ無効 |
EQU命令は、オペランドで指定した値を使う代わりにラベルで指定した名前を使用できるようにします。
例えば、データメモリの0Ch番地(汎用RAMの先頭)をカウンタで使用するケースでは、以下のどちらの方法でも同じ結果になりますが、名前が付いていた方が分かりやすいです。
0Ch番地を値で参照
DECFSZ 0Ch,F
0Ch番地を名前で参照
COUNTER EQU 0Ch DECFSZ COUNTER,F
また、汎用レジスタの先頭アドレスは、PICの種類により異なりますので、名前を付けて使っていれば別の機種に移行する時も楽になります。(EQU命令のアドレスを変えるだけで良い)
CBLOCKとENDC命令は、EQU命令と同じで、値に名前を付ける命令です。
EQU命令との違いは、連続した値に名前を付ける時、個々の名前に値を指定せずにCBLOCK命令のオペランドで値を指定すれば、ENDCまでの名前に+1した値が自動的に割り当てられます。
CBLOCK〜ENDC命令の例を、EQU命令と対比して載せます。
CBLOCK〜ENDCの例
CBLOCK 0Ch SAVE_ST SAVE_W COUNTER ENDC
同じ事をEQU命令で書くと
SAVE_ST EQU 0Ch SAVE_W EQU 0Dh COUNTER EQU 0Eh
ORG命令は、以降に続く命令をプログラムメモリの何番地から格納するかを指定します。
プログラムの先頭では、通常以下のように記述します。
ORG 0 ; リセットベクタ(0番地)を指定 GOTO START ; STARTに行く ORG 4 ; 割込みベクタ(4番地)を指定 ; ここに割込み処理を記述 START ; ここから通常処理開始
割込みについては、(5)TMR0割込みを使うの「割込みとは」を参照。
END命令は、ソースプログラムの最後を宣言する命令で、最終行に記述します。
END