■ページ内リンク
1.16F84A
(1)リレー回路
2.12F683
(1)開発環境
PIC(PIC16F84A)には、35個の命令がある。
PICの命令は、メモ帳などのテキストエディタで作成します。 命令の構文は次のようになっています。
ラベル 命令 オペランド
ラベル 命令の場所(アドレス)に名前を付けたい時に記述する。 行の先頭から記述します。使用できる文字は、英数字と特殊文字のみ 命令 命令(ニーモニック)を記述 ラベルがある場合は、1つ以上スペースを空けて記述します。ラベルが無い場合は、行の先頭から1つ以上のスペースを空けて記述します。 オペランド 命令毎に決められているオペランド(命令のパラメータ)を記述します。 命令の後に1つ以上のスペースを空けて記述します。
; コメント セミコロン(;)より右は、行の最後までコメントを記述できる。
《例》 ラベル 命令 オペランド ; コメント LOOP ; ラベルだけの行があっても良い 〜 ; COUNTが0になるまで繰り返す処理を記述 DECFSZ COUNT,F ; COUNT - 1 が0なら次の命令をスキップ(NEXTへ) GOTO LOOP ; LOOPに戻る NEXT
PICの命令
PICの命令は、以下の3種類。
・バイト対応のファイルレジスタ命令(18命令) ・ビット対応のファイルレジスタ命令(4命令) ・リテラルおよびコントロール命令(13命令)
・ アセンブラ命令
アセンブラ命令は、PICの命令では無く、アセンブラ(MPLAB IDE)に対する命令です。
アセンブラがソースプログラムを翻訳する時に、アセンブラ命令に従って翻訳し、PICの命令(機械語)を作成(ビルド)します。
〜代表的なアセンブラ命令〜 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命令
LIST命令では、使用するPICの種類を定義する。
LIST P=PIC16F84A (PIC16F84Aを使用する場合)
INCLUDE命令
INCLUDE命令では、設定ファイルを指定する。
設定ファイルは、PICの種類毎にアセンブラ(MPLAB IDE)が提供されている。
INCLUDE P16F84A.INC (PIC16F84Aを使用する場合)
__CONFIG命令<PIC16F84A>
__CONFIG命令では、PICの動作モードを指定する。
設定できる値 それぞれの設定値は、「&」でつなげて記述します。 動作モード 設定値と意味
・コードプロテクト有無 _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 ウォッチドックタイマ無効
記述例
__CONFIG _HS_OSC & _WDT_OFF & _PWRTE_ON & _CP_OFF
EQU命令
EQU命令は、オペランドで指定した値を使う代わりに、ラベルで指定した名前を使用できる。 例えば、データメモリの0Ch番地(汎用RAMの先頭)をカウンタで使用するケースでは、以下のどちらの方法でも同じ結果になりますが、名前が付いていた方が分かりやすいと思います。 0Ch番地を値で参照 0Ch番地を名前で参照
DECFSZ 0Ch,F COUNTER EQU 0Ch
DECFSZ COUNTER,F
また、汎用レジスタの先頭アドレスは、PICの種類により異なりますので、名前を付けて使っていれば別の機種に移行する時も楽になります。(EQU命令のアドレスを変えるだけで良い)
CBLOCK,ENDC命令
CBLOCKとENDC命令は、EQU命令と同じで、値に名前を付ける命令です。
EQU命令との違いは、連続した値に名前を付ける時、個々の名前に値を指定せずにCBLOCK命令のオペランドで値を指定すれば、ENDCまでの名前に+1した値が自動的に割り当てられます。 CBLOCK〜ENDC命令の例を、EQU命令と対比して載せます。
CBLOCK〜ENDCの例 同じ事をEQU命令で書くと
CBLOCK 0Ch SAVE_ST SAVE_W COUNTER ENDC SAVE_ST EQU 0Ch SAVE_W EQU 0Dh COUNTER EQU 0Eh
ORG命令
ORG命令は、以降に続く命令をプログラムメモリの何番地から格納するかを指定します。 プログラムの先頭では、通常以下のように記述します。 ORG 0 ; リセットベクタ(0番地)を指定 GOTO START ; STARTに行く ORG 4 ; 割込みベクタ(4番地)を指定 ; ここに割込み処理を記述
START ; ここから通常処理開始
割込みについては、(5)TMR0割込みを使うの「割込みとは」を参照下さい。
END命令
END命令は、ソースプログラムの最後を宣言する命令で、最終行に記述します。 END
PICの開発環境を整備する。PICの開発には大まかに下記が必要である。
1.統合開発環境(MPLAB)
2.デバッガダウンロードケーブル(マイコンデバッグ、書き込みを行う。)
3.CコンパイラMPLAB XC8
今回C言語にてプログラミングを行う前提なので3が必要ですが、アセンブラでプログラミングする場合は不要です。
MPLAB XC8は純正コンパイラで、統合開発環境をインストールするとき、一緒に組み込むことができます。
1.統合環境インストール
下記PICマイコンメーカーからダウンロードします。
・microchip_DL
MPLABダウンロードリンク
2017/7/14時点でWindows x64版はv1.00aでした。
ダウンロード後解凍したファイルは下記の通り。
MPLABX-v1_00-a-windows-installer.exe
exeファイルをダブルクリックすると始まるが、javaのインストールを要求されることがある。
要求された場合は、それに合うものをインストールすること。
このときJRE1.6.nがないといわれるので、Javaのサイトより下記をインストールする。
このとき最新は1.8.n Java SE 8とよばれるものでこれではVerが合わない。
Javaのアーカイブから古いVerをインストールする必要がある。
JRE 1.6.nは Java SE 6に相当する。下記のものをダウンロードする。
・Java JRE1.6.n
JAVAダウンロードリンク
ファイル名:jdk-6u45-windows-x64.exe
JRE 1.6.nをダウンロードした後に、MPLABX-v1_00-a-windows-installer.exeをダブルクリックすると下記画面となる。
インストールには"同意"し、基本的に"Next"をクリックしていけばダウンロードができる。
3.コンパイラ
・microchip_DL
コンパイラダウンロードリンク
2017/7/14時点:HITECH CではなくこちらのMPLAB XC8が現行のコンパイラ
使用しているOSなどから適したものをダウンロードする。
Win7 x64の場合は下記。
MPLAB® XC8 Compiler v1.42
xc8-v1.42-full-install-windows-installer.exeをダブルクリックしてインストール開始。
下記は"Program Files (x86)"の(x86)を削除してつぎへ進む。
下記は、すべてチェックしてから次へ進む。
下記は、そのまま次へ進む。free版で使用する場合。
2.デバッガダウンロードケーブルのセットアップ
PICkit3をUSBポートに指すと自動的に認識し、ドライバがインストールされる。