PIC [MPLAB IDE]

PIC の製造元のMicrochip 社が無償提供しているPIC 用ソフトウェア統合開発環境 MPLAB IDE を使ってみます。Microchip XC8 コンパイラー(旧 HI-TECH C) を使ったC 言語による開発もできます。
更新日 2016-02-13

インストール

MPLAB IDE とMicrochip XC8 コンパイラー をインストールします。

MPLAB IDE v8.88

コチラのページを参考に、Microchip 社のMPLAB IDE 紹介ページ よりダウンロードします。Ver 8.88 の最新版が落とせます。

Microchip XC8 コンパイラー

Microchip XC8 コンパイラー のDownload よりXC8 をダウンロードします。

MPLAB IDE を使う

インストールしたMPLAB IDE を使い、テスト用のプロジェクトを作成します。

プロジェクトウィザードを使う

ツールバーのProject → Project Wizard を使って作ります。Device には今回使う予定のPIC16F84A を選びます。続いてコンパイラを選びます。C言語を使う為に Microchip XC8 ToolSuite を選び、Microchip MPLAB XC8 Compiler を利用します。 次に進むとCreate New Project File にてプロジェクトファイルを指定します。 この時プロジェクト用にフォルダを作ってそこに保存するようにすると良いでしょう。次にファイルの追加ですが、ここは何も無いのでスキップし完了です。

C言語でソースコードを書く

新規テキストを開き、下記のシンプルなC言語テストソースを作成し、プロジェクトに追加します。
#define _XTAL_FREQ 10000000		// (10MHz)

#include <pic.h>

// 初期設定 (今回はpic1684.h に定義されているものが使える)

__CONFIG(
		HS &		// 外部の4MHz 以上の発振子を使う
		WDTDIS &	// ウォッチドッグタイマは無効
		PWRTEN &	// パワーアップタイマは有効(安定動作の為)
		UNPROTECT		// プロテクトは無効(不要)
);

void main()
{
	TRISA = 0b11111111;	// PORT A は全て入力モードとする
	TRISB = 0b00000000;	// PORT B は全て出力モードとする

	PORTB = 0b00000101; // RB0 とRB2 はプルアップ(電圧あり)とする

	while(1)
	{
		// ビットを0 と1 に交互に設定(出力をオンオフする)
		RB0 = RB0^1;

		// 1秒待つ
		char c = 100;
		while (c--)
		{
			__delay_ms(10);
		}
	}
}
__delay_ms() はpic.h に以下のように定義されています。従って引数の値がマクロ展開後にunsigned long を 超えないようにしないといけません。コンパイルエラーにならないので見落としがちです。
#define __delay_ms(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000.0)))
コンパイルが通れば、もうHEX ファイルが出来上がっています。ちなみに拡張子がas というファイルも出来ています。これはアセンブラファイルです。 Cソースのコメント付きなので読みやすく勉強にもなります。

デバッグ(シュミレーション)

PIC ライタで書き込む前にシュミレーションを試してみます。

シュミレータを選ぶ

ツールバーの「Debugger」→「Select Tool」→「MPLAB SIM」を選択します。

シュミレーションを開始する

ツールバーの「Debugger」→「Run」で実行できます。非常に高速にバックグラウンドで動作するため、ブレークポイントを置いてステップ実行しなければ いけないでしょう。「Animate」ならゆっくり実行されます。Watch ウィンドウでポートや変数の変化を捉える事もできます。
「Debugger」→「Stimulus」→「New Workbook」でシュミレーション用のイベントを設定できます。例えばAsynch ページにてRA0 ポートに50ms だけ電圧を加えるとしたら 下記のようにします。
Pin/SFR	RA0
Action	Pulse High
Width	50
Units	ms 
一番左のFire 列をクリックすると、イベントを発生させる事ができます。

PIC への書き込み

PIC ライタを使って書き込みます。