• 検索結果がありません。

XC8 quick start guide.fm

N/A
N/A
Protected

Academic year: 2021

シェア "XC8 quick start guide.fm"

Copied!
30
0
0

読み込み中.... (全文を見る)

全文

(1)

MPLAB XC8 入門ガイド

 2014 Microchip Technology Inc. DS50002173A_JP - p. 1

MPLAB

®

XC8 入門ガイド

本書は、MPLAB® XC8 C コンパイラをこれから使い始めるプログラマー向けの入門 書であり、特に組み込みプログラミングまたは Microchip 社製デバイスに慣れていな い読者に配慮しています。 本書の主な内容は以下の通りです ( 各項目には本文へのリンクが貼られています )。 MPLAB X IDE 内でプロジェクトを作成する 基本的なコード コンパイル デバイス コンフィグレーション ビットの指定 デバイスレジスタへのアクセス ポートピンを共有する周辺モジュールを無効にする ユーザコードをダウンロードして実行する メインループを実装する 割り込みを使う まとめ

MPLAB XC8 C Compiler は何百種もの Microchip 社製 8 ビット PIC デバイス向けにお 使い頂けますが、本書では PIC18F87J11 マイクロコントローラ (MCU) と PICDEM PIC18 Explorer ボードの組み合わせを使って説明を進めます。しかし本書をお読みに なれば、ほとんど全ての 8 ビット マイクロコントローラおよびハードウェア向けに、 XC8 C コンパイラを使って等価な機能を有するコードを作成およびコンパイルでき ます。 本書では MPLAB X 統合開発環境 (IDE) から XC8 C コンパイラを使いますが、本コン パイラはコマンドラインから使う事もできます。開発ボードをお持ちであれば、コー ドをデバイスにダウンロードして実行できます。また、MPLAB X IDE が内蔵するシ ミュレータを使ってコードの動作を確認する事もできます。 本書では、MPLAB XC8 C コンパイラを使い始める読者のために、簡単なサンプル プ ロジェクトをビルドして実行するための手順を紹介します。このプロジェクトはポー トピンに接続した LED を点滅させます。このプロジェクトを作成するために必要な 作業は以下の通りです。本書では、これらの各作業について順番に詳しく説明します。 • ソースファイルに <xc.h> をインクルードする • config プラグマを使ってデバイス コンフィグレーション ビットを設定する • ポートを共有している全ての周辺モジュールを無効にする • ポートのデータ方向レジスタを初期化し、ポートラッチに値を書き込む • LED の点灯 / 消灯を目視できるよう遅延を適用する

本書に従って作業を始める前に、MPLAB X IDE と MPLAB XC8 C コンパイラをイン ストールしてアクティベートしておく必要があります。評価バージョンのコンパイラ ( または Free モードで動作するコンパイラ ) を使う事もできます。

コンパイラのインストールおよびアクティベートの方法については、『Installing and Licensing MPLAB XC C Compilers』(DS50002059) を参照してください。この文書は Microchip 社のウェブサイト (wwww.microchip.com) からダウンロードできます。

(2)

MPLAB X IDE 内でプロジェクトを作成する

以下では、MPLAB X IDE 内で MPLAB XC8 C コンパイラ向けのプロジェクトを作成 する方法について説明します。 この手順は以下の通りです。 ステップ 1 - プロジェクトのタイプを設定する ステップ 2 - ターゲット デバイスを選択する ステップ 3 - デバイスヘッダを選択する ステップ 4 - プロジェクト コードを実行するためのツールを選択する ステップ 5 - プラグインボードを選択する ( 一部のデバッガツールを選択した場合 にのみ適用 ) ステップ 6 - ソースコードをコンパイルするためのツールを選択する ステップ 7 - プロジェクトの名前とパスを指定する ステップ 8 - プロジェクトの作成を完了する MPLAB X IDE を使わない読者またはプロジェクトの作成方法を既に熟知している読 者は、次の 「基本的なコード」へ進んでください。MPLAB X IDE に関する詳細は、 『MPLAB X IDE ユーザガイド』 (DS52027) を参照してください。この文書は Microchip

(3)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 3

ステップ 1 - プロジェクトのタイプを設定する

MPLAB X IDE で File>New Project... を選択します。ウィンドウ ( 図 1-1) が開いたら、 「Categories」フィールドで [Microchip Embedded] を選択し、「Projects」フィールド

で [Standalone Project] を選択します。 [Next>] をクリックして次へ進みます。

(4)

ステップ 2 - ターゲット デバイスを選択する ターゲット ハードウェア上のデバイスに正しく一致するデバイスを選択する必要が あります。ハードウェアの代わりにシミュレータを使う場合、どのデバイスでも選択 できます。 選択を容易にするため、デバイスはファミリごとにグループ化されています。MPLAB XC8 は、8 ビット マイクロコントローラ ファミリの全てのデバイス向けにコンパイ ル可能です。図 1-2 では、PIC18 ファミリから PIC18F87J11 を選択しています。 [Next>] をクリックして次へ進みます。 図 1-2: デバイスを選択する

(5)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 5

ステップ 3 - デバイスヘッダを選択する

本書ではデバッグ機能を使わないため、「Supported Debug Header」フィールドでは [None] を選択します ( 図 1-3 参照 )。

図 1-3: ヘッダを選択する

ステップ 4 - プロジェクト コードを実行するためのツールを選択する

ターゲット ハードウェアを使う場合、使用するデバッガをリストから選択します。 ハードウェアを使わない場合は [Simulator] を選択します。図 1-4 では、生成したコー ドを実行するためのプログラマ / デバッガとして MPLAB REAL ICE を選択していま す。

(6)

ステップ 5 - プラグインボードを選択する ( 一部のデバッガツールを選択した場合に のみ適用 ) 図 1-5 に示すダイアログが表示された場合、プラグインボードを使う必要がなければ [None] を選択します。 図 1-5: プラグインを選択する ステップ 6 - ソースコードをコンパイルするためのツールを選択する

[Select Compiler] ウィンドウ ( 図 1-6) 内で [XC8] の下に複数の MPLAB XC8 コンパイ ラ バージョンが表示される場合、最新バージョンを選択します。この選択は後で変更 できます。

(7)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 7

ステップ 7 - プロジェクトの名前とパスを指定する

「Project Name] フィールドにプロジェクトの名前を入力します。「Project Location」 フィールドに表示される既定値のプロジェクトパスが適さない場合、[Browse...] を クリックします。図 1-7 の例では、プロジェクト名として「quick_start_XC8」を 指定しています。

MPLAB X IDE 内に複数のプロジェクトが存在する場合、[Set as main project] にチェッ クを入れる事で、このプロジェクトをメイン プロジェクトとして他のプロジェクトか ら区別できます。

(8)

ステップ 8 - プロジェクトの作成を完了する [Finish] をクリックするとプロジェクトが作成されます。[Projects] ウィンドウ1 ( 図 1-8 の左上のタブ ) に、このプロジェクトに対応するアイコンが表示されます。 [Projects] ウィンドウの下の [( プロジェクト名 ) - Dashboard] タブには、このプロジェ クトに関する詳細な情報が表示されます。 図 1-8: [PROJECTS] ウィンドウ 1. このタブが既定値で表示されない場合、Windows>Projects を選択して表示する必要があります。

(9)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 9

基本的なコード

ここで使うコードは、ユーザが作成する MPLAB XC8 プロジェクトの基本として使え る小さなプログラムです。これは最小限のコードですが、正常にコンパイルおよび実 行できます。 コードの作成手順は以下の通りです。 ステップ 1 - ソースファイルを新規作成する ステップ 2 - ソースファイルの名前を指定する ステップ 3 - 新しいファイルにスケルトンコードを追加する ステップ 4 - ファイルを保存する

(10)

ステップ 1 - ソースファイルを新規作成する MPLAB X IDE では、各種の方法でソースファイルを作成できますが、ここでは最も 基本的な方法に沿って、ソースファイルを作成する手順を詳細に説明します。 [Projects] ウィンドウ ( 図 1-9) 内で、作成した「quick_start_XC8」プロジェクト のアイコン ( 橙色で反転表示 ) を右クリックし、ポップアップ メニューから New>C Source File... を選択します。 図 1-9: ポップアップ メニューから新規作成するファイルを選択する

すると、[New C Source File] ウィンドウ ( 図 1-10) が開きます。

(11)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 11 ステップ 2 - ソースファイルの名前を指定する 「Project」フィールドに表示されているプロジェクト名が正しい事を確認します。 「File Name」フィールドに、作成するソースファイルの名前として「main.c」を入 力します ( 図 1-10 参照 )。[Finish] をクリックすると、作成されたファイルに対応す るアイコンが [Projects] ウィンドウに表示されます。このファイルはテキストエディ タで開く事ができます。この時点ではファイルは空白です。 ステップ 3 - 新しいファイルにスケルトンコードを追加する 作成したソースファイル「main.c」に以下のテキストをコピーするか直接書き込み ます。 #include <xc.h> int main(void) { return 0; } このコードは、MPLAB XC8 でビルドする全てのプロジェクトの初期コードとして使 えます。 全ての C プログラムには、「main()」の名前を持つ関数が 1 つだけ必要です。しか し、この関数のプロトタイプはコンパイラごとに多少異なります。上記のプロトタイ プは全ての MPLAB XC コンパイラで使えます。main() は int 値を返すため、戻り 値を指定した return 命令が必要です。戻り値「0」は、main() が正常に実行され た事を意味します。 このソースファイル内のコードからコンパイラまたはデバイスに固有の機能へアク セスできるようにするため、ヘッダファイル <xc.h> をインクルードします。このア クセスは常に必要であるため、実質的に全てのソースファイルに <xc.h> をインク ルードする必要があります。 ステップ 4 - ファイルを保存する File>Save を選択する事で、編集後のファイルを確実に保存します。 MPLAB X IDE を使わない場合、任意のエディタを使って上記のコードをファイルに 書き込み、拡張子「.c」を付けてプレーン テキストとして保存します。

(12)

コンパイル

前記の初期プログラムは有効な C プログラムです。つまり、コンパイルが可能だとい う事です。以下では、コードをビルドする方法について説明します。 MPLAB X IDE には、ソースコードのビルドに使うコンパイラを既に指定済みです。し かし、オプションを指定する事でコンパイラの動作を変更する事ができます。既定値 のオプションは、ほとんどのプロジェクトで使えます。コンパイラ オプションは [Project Properties] ダイアログを使って変更できます。このダイアログは、[( プロジェ クト名 ) - Dashboard] タブの左端列にある一番上のボタン ( 図 1-11 参照 ) を使って開 きます。このダイアログでは、コンパイラ オプション以外のプロジェクト属性 ( プロ ジェクトで使うデバイスやコンパイラ等 ) も変更できます。 図 1-11: [PROJECT PROPERTIES] ボタン コンパイルは各種の方法で実行できます。ツールバー上のボタンを使うと各種のビル ド動作を素早く選択できますが、Run または Debug メニューから選択する事もでき ます。コードをビルドするだけの動作もあれば、ビルド後にコードを実行する動作も あります。ビルドと実行は、どちらもリリースモードまたはデバッグモードで行えま す。 デバッグモードでは、ターゲット デバイス上のデバッグ エグゼクティブを使います。 これにより、ブレークポイント等のデバッグ機能が使えます。デバッグ エグゼクティ ブは、デバイスメモリの一部の領域 ( 通常はコード用に使えるメモリ領域 ) を占有し ます。デバッグビルドは、このメモリ領域をデバッグ エグゼクティブ用に予約します。 リリースモードの場合、デバッグ機能は一切使えません。しかし、デバイスメモリの 全領域がプロジェクト用に使えます。このビルドモードは、最終製品向けの量産イ メージを作成する場合に適します。

Project properties

(13)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 13 図 1-12 に、コードをビルドする際によく使うツールバーボタンを示します。 図 1-12: ビルド用のボタン 各ボタンの機能は以下の通りです ( 左から右に向かって記載 )。 • 直近のビルド後に変更されたプロジェクト ソースファイルだけをリリースモー ドでビルド / リンクします。 • 変更の有無に関係なく全てのプロジェクト ソースファイルをリリースモードで ビルド / リンクします。 • 直近のビルド後に変更されたプロジェクト ソースファイルだけをリリースモー ドでビルド / リンクした後に、コードを実行します。 • 直近のビルド後に変更されたプロジェクト ソースファイルだけをデバッグモー ドでビルド / リンクした後に、コードをダウンロードして実行します ( デバッグ エグゼクティブを使用 )。

本書の手順では [Build project] または [Clean and Build project] ボタンを使います。

Build project

Clean & Build project

Build & Debug project

Build & Run project

(14)

これらのボタンをクリックすると、プロジェクト用に選択したコンパイラがプロジェ クト内の各ソースファイル ( 本書の例では 1 つだけ ) をビルドし、1 つのバイナリイ メージにリンクします。ビルドプロセスに関する情報は [Output] ウィンドウに表示さ れます。このウィンドウがワークスペース内で既に開かれていない場合は自動的に開 きます。このウィンドウの表示例を図 1-13 に示します。 図 1-13: [OUTPUT] ウィンドウ コンフィグレーション設定が見つからないといった内容の警告が表示されてもコン パイル処理は停止せず、ウィンドウの下部にはコードが無事ビルドされた事を示す 「BUILD SUCCESSFUL」メッセージが表示されます。1[Output] ウィンドウの最後に表

示される赤字のエラーメッセージは、コンパイルしたコードとターゲット デバイス間 の不整合を示します。これに続いて、これらの警告とエラーを解決するためのデバイ スの設定方法が示されます。 ターミナルからビルドする場合、以下のコマンドラインを使います。 xc8 --chip=18f87j11 main.c デバイス名 (18f87j11) とソースファイル名 (main.c) は、実際の名前に変更してくださ い。コンパイラのパスが検索パス外である場合、アプリケーション名「xc8」に完全 なパスを追加する必要があります。 1. PIC18F87J11 以外のデバイスをコンパイルした場合、表示される警告の数は異なります。

(15)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 15

デバイス コンフィグレーション ビットの指定

作成したプログラムが有効な C プログラムであっても、それだけではデバイス上で正 しく動作しません。全ての Microchip 社製 8 ビット PIC デバイスには、正しく動作さ せるための設定が必要です。命令クロックの設定等、一部の設定はデバイスの基本的 動作に影響します。この設定が正しくないと、クロックが動作しない可能性がありま す。 前述のように、[Output] ウィンドウにはデバイス コンフィグレーションの問題を示唆 する警告が表示されますが、警告が全く表示されない場合でも、これらのコンフィグ レーションを設定する必要があるという事に注意してください。 コンフィグレーションは、デバイス内の特定のビットを使って設定します。MPLAB XC8 C Compiler はプラグマを使う事で、コード内でのコンフィグレーション ビット の設定を可能にします。これらのプラグマが提供する値は、プロジェクトのコンパイ ル済みバイナリイメージとマージされてデバイスにダウンロードされます。 設定可能なコンフィグレーションの数とタイプはデバイスごとに異なります。各設定 の制御内容については、デバイスのデータシートを参照してください。本書で使う PIC18F87J1 の デ ー タ シ ー ト『PIC18F87J11 Family Data Sheet』(DS39778) は、 Microchip 社のウェブサイト (www.microchip.com) からダウンロードできます。 デバイスを設定するためのプラグマは、MPLAB X IDE 内の [Configuration Bits] ウィ ンドウを使うと最も容易に作成できます。このウィンドウを使ってプラグマの作成に 必要な情報を取得する手順は、以下の通りです。

ステップ 1 - [Configuration Bits] ウィンドウを開く ステップ 2 - 各設定を確認する

ステップ 3 - 選択した設定を適用するためのプラグマを生成する

ステップ 4 - [Config Bits Source] ウィンドウからソースファイルへコードをコピー する

(16)

ステップ 1 - [Configuration Bits] ウィンドウを開く

メ ニ ュ ー か ら Window>PIC Memory Views>Configuration Bits を選択 すると [Configuration Bits] ウィンドウが開きます。このウィンドウは、コンフィグレーショ ン ビットに関連する情報 ( アドレス、値等 ) の一覧を表示します。図 1-14 に表示例 を示します。 図 1-14: [CONFIGURATION BITS] ウィンドウ [Name] および [Field] 列は、デバイス データシート内の対応する設定を見付けるため に役立ちます。 [Category] 列は、その設定の制御内容を表示します。 [Setting] 列は、その設定の現在の状態を示します。 ステップ 2 - 各設定を確認する 以下の設定には特に注意を払ってください。これらを正しく設定しないと、ほぼ確実 にランタイムエラーが発生します。 オシレータの選択 この設定は、ターゲット ハードウェアのオシレータ回路に適合している必要 があります。この設定が正しくないと、デバイスクロックは動作できません。 デバッグツールとしてシミュレータを使う場合、この設定は無視可能です。一 般的に、開発ボードは高速水晶振動子を使います。 ウォッチドッグ タイマ ウォッチドッグ タイマは、必要になるまで無効にしておく事を推奨します。 これにより、予期せぬリセットを防ぎます。 コード保護 コード保護は、必要になるまで無効にしておきます。これにより、デバイスへ の完全なアクセスを確保します。 拡張命令セット

この PIC18 設定は、必ず無効にします。MPLAB XC8 C Compiler は、この命 令セットをサポートしません。

設定を変更するには、該当する行の [Settings] 列をクリックし、プルダウンリストか ら適切な設定を選択します。

ステップ 3 - 選択した設定を適用するためのプラグマを生成する

[Generate Source Code to Output] ボタンをクリックします。生成されたコードは

(17)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 17

図 1-15: [CONFIGURATION BITS SOURCE] ウィンドウ

ステップ 4 - [Config Bits Source] ウィンドウからソースファイルへコードをコピーす る このコードは実行可能コードではなく、関数定義の外側に置く必要があります。この コードを追加した main.c コードを 以下に示します ( 見やすくするためコメントは省 略しています )。1 #include <xc.h> // CONFIG1

#pragma config WDTEN = OFF #pragma config STVREN = ON #pragma config XINST = OFF #pragma config CP0 = OFF // CONFIG2

#pragma config FOSC = HSPLL #pragma config FCMEN = ON #pragma config IESO = ON #pragma config WDTPS = 32768 // CONFIG3

#pragma config EASHFT = ON #pragma config MODE = XM16 #pragma config BW = 16 #pragma config WAIT = OFF #pragma config CCP2MX = DEFAULT #pragma config ECCPMX = DEFAULT #pragma config PMPMX = DEFAULT #pragma config MSSPMSK = MSK7 int main(void)

{

return 0; }

1. これは、PIC18F87J11 と PICDEM PIC18 Explorer ボードを使う場合のコードです。実際のデバ イスとハードウェアに対応したコンフィグレーション設定を使う必要があります。

(18)

ソースコード内のコンフィグレーション プラグマと [Configuration Bits] ウィンドウの 内容はリンクしていません。コンフィグレーション設定を変更する場合、ソースコー ド内のプラグマを手動で編集する必要があります。または、[Configuration Bits] ウィ ンドウ内で設定を変更した後にプラグマを再生成し、これを使ってソースコード内の 既存のプラグマを置換します。

MPLAB X IDE を使わずに Microchip 社製デバイスに対応する設定と値を調べる事も できます。ダウンロードしたコンパイラには HTML ガイドが含まれています。コンパ イラのインストール ディレクトリ内の DOCS ディレクトリに保存されている pic_chipinfo.html または pic18_chipinfo.html を開きます。使用するター ゲット デバイスへのリンクをクリックすると、config プラグマ向けの適切な設定と 値が表示されます。 ソースコードにコンフィグレーション プラグマを含めた後に前記と同じ方法でビル ドすると、警告やエラーは表示されません。ビルドに成功した場合の [Output] ウィン ドウを図 1-16 に示します。 図 1-16: ビルドに成功した場合の [OUTPUT] ウィンドウ

(19)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 19

デバイスレジスタへのアクセス

これまでにコンパイルしたコードには、まだランタイム機能がありません。これから、 デバイスに実行させるタスクをセットアップします。以下では、デバイスの特殊機能 レジスタ (SFR) にアクセスし、ポートに接続した LED を点灯させる方法について説 明します。 以下のコードは、ポート D のデータ方向を設定した後に、このポートのラッチに値を 書き込みます。1 #include <xc.h>

// your configuration bit settings go here

// configuration code (indicated earlier) omitted for brevity int main(void)

{

// code to access your port replaces the following TRISD = 0x0; // set all port D bits to be output LATD = 0x55; // write a value to the port D latch return 0; } このコードでは、ID を使って SFR を表します。これらの ID は、<xc.h> のインク ルードによって定義される変数に対応付けられています。これらの変数は他の C 変数 と同様に使う事ができます。しかし、これらの各変数には SFR に対応付けるための アドレスが割り当てられています。これらの変数に書き込むとレジスタが書き込ま れ、結果としてデバイスの状態が変化する可能性があります。場合によっては、これ らの変数を単純に読み出すだけでもデバイスの動作に影響します。 上記の ID は、対応するレジスタの名前 ( デバイス データシートで指定されている名 前 ) と同じです。しかし、SFR 内のビットを表す ID 等では、名前が一致しない場合 もあります。 デバイスの SFR へのアクセスに使う名前は、以下の手順で調べる事ができます。 ステップ 1 - <xc.h> をインクルードしたソースファイルを作成する ステップ 2 - デバイスの妥当性を確認し、コードをビルドし、エラーがないか確認 する ステップ 3 - ステップ 2 でコンパイラが生成した前処理ファイルを検証する 1. デバイスによっては、ポートにラッチレジスタが割り当てられていない場合があります。その場 合、ポート ( 例 : PORTD レジスタ ) に直接書き込む必要があります。詳細はデバイスのデータ シートを参照してください。

(20)

ファイルの内容はほとんど無関係です。本書で最初に使ったスケルトンコード ( 空白 の main() 関数 ) が理想的です。p. 17 のソースファイルは使う事ができます。 ステップ 2 - デバイスの妥当性を確認し、コードをビルドし、エラーがないか確認すステップ 3 - ステップ 2 でコンパイラが生成した前処理ファイルを検証する 通常この前処理ファイルは、コンパイル後も残されます。ソースファイル名が main.c である場合、前処理ファイル名は main.pre です。コマンドラインでコンパイルする 場合、前処理ファイルはソースファイルと同じディレクトリに残されます。MPLAB X IDE を使う場合、前処理ファイルは [Files] ウィンドウ ( 図 1-17 の左上 ) 内のプロ ジ ェ ク ト フ ォ ル ダ ( 本 書の例 では「quick_start_XC8」フォ ルダ ) の 下 の 「build/default/production」フォルダに表示されます。1 図 1-17: レジスタ名が書かれた前処理ファイル 図 1-17 は、PIC18F87J11 向けの前処理ファイルの内容も示しています ( 図の右側の エディタ画面参照)。このファイルは、SFRに対応する全ての変数のC定義を含みます。 図 1-17 では、変数 TRISD が unsigned char として定義され、アドレス 0xF95 に 配置されています。PIC18F87J11 のデータシートを見ると、TRISD レジスタのアド レスが実際に 0xF95 である事を確認できます。この変数にはエイリアス (DDRD) が存 在する事にも注意してください。また、このファイルはレジスタ内のビットも定義し ています。これにより、例えば構造体ビットフィールド TRISDbits.TRISD7 または そのエイリアスである TRISDbits.RD7 を使って、ポート方向レジスタ TRISD の最 上位ビット (MSb) にアクセスできる事が分かります。レジスタの名前が見つからない 場合、レジスタのアドレスを使って見付ける事ができます。この前処理ファイルは中 間生成ファイルであり、このファイルを変更しても次のビルド時に内容が失われる事 に注意してください。 1. 「production」フォルダは、リリース ( 量産 ) ビルド用の中間生成ファイルを保持するために使 います。「debug」フォルダは、デバッグビルド用と同じファイルを保持します ( 「コンパイル」 参照 )。

(21)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 21 p. 19 のソースコードは、値をポート D ラッチに書き込みます。このコードを実行し て、シミュレータまたはエミュレータでポート D ラッチの内容を確認すると、TRISD レジスタに値 0x55 が格納されている事が分かります。しかし、ポートラッチ内の値 が必ずデバイスピンに出力されるとは限りません。実際、PIC18F87J11 でコンフィグ レーション ビットを上記のように指定した場合、このポートはピンに割り当てられま せん。このため、ポート D に対応するピンに電圧は出力されず、それらのピンに LED を接続しても期待通りに点灯しません。つまり、ポート D をデバイスピンに接続する ための手順が必要だという事です。

(22)

ポートピンを共有する周辺モジュールを無効にする

以下では、ポートラッチに書き込んだ値をデバイスピンに出力するためにサンプル プ ロジェクトに追加する必要があるコードについて説明します。このコードを正しく追 加しなかった事が原因で入門用プログラムが期待通りに動作しないという事がよく あります。 Microchip 社製 8 ビット PIC デバイスは、限られたピン数で周辺モジュールを豊富に 内蔵しています。このため、複数の周辺モジュールからの IO ラインが同じピンを共 有している場合があります。しかし、そのピンを使用できるのは、常に 1 つの周辺モ ジュールだけです。 デジタル IO ポートは全ての周辺モジュールと同様に扱われます。ポートにピンの使 用権を割り当てない限り、そのポートをデバイスの外部に接続する事はできません。 多くの場合、既定値ではポートはピンに接続されません。 周辺モジュール間のピンの共有については、デバイス データシートを参照してくださ い。多くの PIC デバイス データシートは、素早く参照できるピン配置図に加えて、各 ピンの使用方法に関する詳細な説明を記載しています。 以下では、ポートをポートピンに接続するにはどの周辺モジュールを初期化する必要 があるのかを見極めるための手順について説明します。 ステップ 1 - デバイス データシート内の「ピンの説明」または関連するテーブルを 参照する ステップ 2 - テーブル内で一番上に記載されている他の周辺モジュールに対応する SFR を見付ける ステップ 3 - その周辺モジュールを無効にするために SFR に書き込むべき値を調 べる ステップ 4 - ステップ 1 のテーブル ( 図 1-18) 内の他の全ての周辺モジュールに対 しても以上の手順を繰り返す

(23)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 23 ステップ 1 - デバイス データシート内の「ピンの説明」または関連するテーブルを 参照する PIC18F87J11(80 ピンパッケージ ) 向けのピン配置テーブルの一部を図 1-18 に示しま す。 図 1-18: PIC18F87J11 向けピン配置テーブルの抜粋

本書の例で使う PICDEM PIC18 Explorer ボードの場合、LED はポート D に接続しま す ( 必要に応じ、使用する開発ボードのユーザガイドを参照してください )。ポート D が使うピンには RD0、RD1、RD2、... の名称が付けられています。図 1-18 のテー ブルでは、これらのピンに別の名称も付けられている事が分かります ( 例 : RD0 に対 して AD0 と PMD0)。このテーブルはポート D、外部メモリバス、パラレル マスタ ポートが全て同じピンを共有する事を示しています。ポート D が使用するその他のピ ン ( 図 1-18 には示していません ) も、SPI モジュールが共有しています。 ステップ 2 - テーブル内で一番上に記載されている他の周辺モジュールに対応する SFR を見付ける デバイス データシートで、その周辺モジュールに関連する項目を参照し、その周辺モ ジュールを制御する SFR を見付けます。

(24)

ステップ 3 - その周辺モジュールを無効にするために SFR に書き込むべき値を調べ る 例えば、データシート内の外部メモリバスに関する説明には、外部メモリモジュール は MEMCON SFR 内の EBDIS ビットによって制御されると書いてあります。デバイ ス データシートから抜粋した MEMCON レジスタの説明 ( 図 1-19) が示すように、 EBDIS ビットの POR ( パワーオン リセット ) 時の値は「0」( バスはアクティブ ) で す。このモジュールは、EBDIS ビットを「1」にセットする事によって無効にする必 要があります。 図 1-19: 外部バスレジスタの説明 ( データシートからの抜粋 ) 上記と同様の手順により、パラレル マスタポートは PMPEN ビットによって制御さ れる事が分かります。このビットの POR 時の値は「0」( 無効 ) です。つまり、POR が発生した後は既に無効にされているという事です。従って、本書のサンプル プログ ラムには、このモジュールを無効にするためのコードを追加する必要はありません。1 ステップ 4 - ステップ 1 のテーブル ( 図 1-18) 内の他の全ての周辺モジュールに対し ても以上の手順を繰り返す これらの手順を繰り返す事で、PIC18F87J11 向けのサンプル プログラムは以下のよ うに拡張されます。2 #include <xc.h>

// your configuration bit settings go here

// configuration code (indicated earlier) omitted for brevity int main(void)

{

// intialization code for your device replaces the following WDTCONbits.ADSHR = 1; // enable alternate access to MEMCON MEMCONbits.EBDIS = 1; // turn off external memory bus // code to access your port replaces the following TRISD = 0x0; // set all port D bits to be output LATD = 0x55; // write a value to the port latch return 0; } 1. この周辺モジュールを明示的に無効にしても害はありません。プログラムがソフトリセットを実 行した後のこのビットの値は、「0」ではない可能性があります。 2. このデバイスの MEMCON レジスタにアクセスするには、ADSHR ビットをセットする必要がありま す。

(25)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 25

ユーザコードをダウンロードして実行する

前ページのソースコードは PIC18F87J11 用です。使用デバイス向けに書いたコード が期待通りに動作するかどうか確認してください。以下では、バイナリイメージをビ ルド、ダウンロード、実行する方法について説明します。

図 1-12 に示した [Build & Run project] ボタンをクリックします。ハードウェア デバッ ガの機能を試したい場合は [Build & Debug project] ボタンをクリックしてください。 どちらのボタンも、ソースコードのコンパイル済みバイナリイメージが最新バージョ ンである事を確認した後に、コードをダウンロードして実行します。[Build and Debug project] ボタンをクリックした場合、ターゲット デバイス内のデバッグ エグゼクティ ブが実行されます。ビルドの進捗状況は [Output] ウィンドウに表示されます ( 図 1-20 に類似 )。 図 1-20: コードの実行 コードを実行すると、コード内で指定した通りに LED が点灯する ( または、ポートに 割り当てたピンに電圧が出力される ) 必要があります。ポートに割り当てた値 0x55 は、ポートのピンに接続した LED を 1 秒周期で点灯します。 しかし、シミュレータを使う場合、コードの実行を停止した後に、ポートに格納され ている値を確認する必要があります。この場合、ポートに正しい値が書き込まれる事 は確認できますが、ポートが実際のデバイスのピンに接続されるかどうかは確認でき ません。 コ ー ド の ス テ ッ プ 実 行 や ブ レ ー ク ポ イ ン ト 等 の デ バ ッ グ 機 能 を 試 し た い 場 合、 MPLAB X IDE 関連の文書を参照してください。

(26)

メインループを実装する

p. 24 のサンプル コードは 2 つの命令を実行した後に停止します。main() の最後ま で実行すると、コンパイラによって追加されたコードはリセットベクタへ戻ります。 次いで、デバイスはランタイム起動コードと main() 関数を再度実行します。これら のソフトリセットは望ましくありません。以下では、コンパイラのその他の機能を 使って、ポートに書き込む値を自動的に変化させる方法と、main() を終了せずに繰 り返し実行する方法について説明します。 下のコードでは、main() が終了しないよう無限ループを追加しています。また、こ のループ内でポートラッチにカウンタ値 (portValue) を割り当て、このカウンタを インクリメントする事でポート値を変化させます。さらに遅延ルーチンを追加する事 で、LED の点灯 / 消灯を目視できるようにします。 #include <xc.h>

// your configuration bit settings go here

// configuration code (indicated earlier) omitted for brevity unsigned char portValue;

int main(void) {

// intialization code for your device replaces the following WDTCONbits.ADSHR = 1; // enable alternate access to MEMCON MEMCONbits.EBDIS = 1; // turn off external memory bus // code to access your port replaces the following TRISD = 0x0; // set all port D bits to be output while(1) {

LATD = portValue++; _delay(40000); }

return 0; // we should never reach this } このコードをビルドして実行します。ハードウェアを使う場合、ポートに接続した LED が示すバイナリ値が 0 から 0xFF へカウントアップする事を確認します。 ポート自体をインクリメントするのではないという事に注意してください。ポートレ ジスタをそのような表現で使うと、読み出し - 変更 - 書き込み問題が発生する可能性 があります。ポートに出力する値は、必ず変数を使って保持する必要があります。つ まり、変数をポートまたはポートラッチに割り当てて、その変数を変更する必要があ るという事です。 このコードの遅延ルーチン (_delay: アンダースコアで始まる事に注意 ) は、実際には コンパイラのビルトイン関数です。この関数とコンパイラ ライブラリ関数に関するヘ ルプは『MPLAB XC8 C Compiler User’s Guide』の補遺に記載されています。遅延な しでは LED が高速に点滅するため、暗く常時点灯しているようにしか見えません。使 用デバイスのクロック周波数によっては、遅延長を調整する必要があります。

(27)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 27

割り込みを使う

以下では、割り込みを使うために前記 (p. 26) のコードを変更します。これは C 言語 だけで完全に行えます。8 ビットデバイスの場合、コンパイラはコンテクストを切り 換えるコードを生成し、これを自動的に割り込みベクタへリンクします。 下のコードの機能は前記のコードと同じです。しかし、遅延を使う代わりに timer 0 を使って割り込みを生成します。割り込みに対応するコードはカウンタ変数をインク リメントします。main() 内の while() ループは、p. 26 のコードと同様にカウンタ 値をポート (LED) に書き込みます。 #include <xc.h>

// your configuration bit settings go here

// configuration code (indicated earlier) omitted for brevity unsigned char portValue; // our counter variable

void interrupt myIsr(void) {

// only process timer-triggered interrupts if(INTCONbits.TMR0IE && INTCONbits.TMR0IF) { portValue++;

INTCONbits.TMR0IF = 0; // clear this interrupt condition }

}

int main(void) {

WDTCONbits.ADSHR = 1; // enable alternate access to MEMCON MEMCONbits.EBDIS = 1; // turn off external memory bus TRISD = 0x0;

T0CON = 0b10001000; // enable the timer as 16 bit... // internal clock, no prescaler INTCONbits.TMR0IE = 1; // enable interrupts for timer 0 ei(); // enable all interrupts

while(1) { LATD = portValue; } return 0; } このコードをビルドして実行すると、LED は前記のコードと同様に点滅します。LED の点滅速度は、例えばタイマのプリスケーラを有効にしてクロックを低速にする事に よって調整できます。 interrupt指定子を使って関数myIsr()を割り込み関数として指定している事に注 意してください。この割り込み関数には複数の割り込み要因に対応する事が求められ る可能性があるため、割り込み要因がタイマであった場合にのみカウンタをインクリ メントするためのコードを追加しています。割り込み関数に含めるコードは最小限に する事を推奨します。 main() では、T0CON 内の各ビットの値を分かりやすくするために、0b 接頭辞を付け たバイナリ定数を使っています。異なるデバイスを使う場合、データシートを参照し てレジスタ名を調べ、正しいタイマ動作が得られるようにそれらのレジスタ内のビッ トを設定する必要があります。 このコードでは、コンパイラマクロ ei() を使って割り込みを有効にしていますが、 INTCON レジスタ内の GIE ビットを明示的にセットする事で割り込みを有効にする 事もできます。

(28)

まとめ

本書で示した基本的コンセプトと手法を応用すれば、8 ビット PIC デバイス向けに非 常に複雑なプログラムを書く事ができます。本書を読めば、デバイスが使う全ての SFR と SFR ビットの名前を調べて、デバイスを正しく設定する事ができます。さら に、デバイスの内蔵周辺モジュールに割り込みを生成させ、それらの割り込みにコー ドを応答させる事ができます。 MPLAB XC8 C コンパイラが実装する C89 ANSI 標準 C 言語を熟知する事が重要で す。このコンパイラの動作と非標準構文に関するより詳細な情報は、『MPLAB XC8 C Compiler User’s Guide』(DS50002053) に記載されています。この文書は、コンパイ ラ インストール ディレクトリ内の「DOCS」ディレクトリに保存されています。こ の文書は、[プロジェクト名 - Dashboard] タブ ( 図 1-11 参照 ) 内の [Compiler Help] ボ タン ( 左端列にある青の「?」ボタン ) をクリックして開く事もできます。

(29)

 2014 Microchip Technology Inc. DS50002173A_JP - p. 29 本書に記載されているデバイス アプリケーション等に関する 情報は、ユーザの便宜のためにのみ提供されているものであ り、更新によって無効とされる事があります。お客様のアプ リケーションが仕様を満たす事を保証する責任は、お客様に あります。Microchip 社は、明示的、暗黙的、書面、口頭、法 定のいずれであるかを問わず、本書に記載されている情報に 関して、状態、品質、性能、商品性、特定目的への適合性を は じ め と す る、い か な る 類 の 表 明 も 保 証 も 行 い ま せ ん。 Microchip 社は、本書の情報およびその使用に起因する一切の 責任を否認します。Microchip 社の明示的な書面による承認な しに、生命維持装置あるいは生命安全用途に Microchip 社の製 品を使用する事は全て購入者のリスクとし、また購入者はこ れによって発生したあらゆる損害、クレーム、訴訟、費用に 関して、Microchip 社は擁護され、免責され、損害をうけない 事に同意するものとします。暗黙的あるいは明示的を問わず、 Microchip社が知的財産権を保有しているライセンスは一切譲 渡されません。 商標

Microchip 社の名称と Microchip ロゴ、dsPIC、FlashFlex、 KEELOQ、KEELOQロゴ、MPLAB、PIC、PICmicro、PICSTART、

PIC32ロゴ、rfPIC、SST、SST ロゴ、SuperFlash、UNI/O は、 米 国お よ びそ の 他の 国 にお け る Microchip Technology Incorporated の登録商標です。

FilterLab、Hampshire、HI-TECH C、Linear Active Thermistor、 MTP、SEEVAL、Embedded Control Solutions Company は、 米国における Microchip Technology Incorporated の登録商標 です。

Silicon Storage Technology は、その他の国における Microchip Technology Incorporated の登録商標です。

Analog-for-the-Digital Age、Application Maestro、BodyCom、 chipKIT、chipKIT ロゴ、CodeGuard、dsPICDEM、dsPICDEM.net、 dsPICworks、dsSPEAK、ECAN、ECONOMONITOR、FanSense、 HI-TIDE、In-Circuit Serial Programming、ICSP、Mindi、MiWi、 MPASM、MPF、MPLAB 認証ロゴ、MPLIB、MPLINK、mTouch、 Omniscient Code Generation、PICC、PICC-18、PICDEM、 PICDEM.net、PICkit、PICtail、REAL ICE、rfLAB、Select Mode、 SQI、Serial Quad I/O、Total Endurance、TSHARC、UniWinDriver、 WiperLock、ZENA、Z-Scale は、米国およびその他の国におけ る Microchip Technology Incorporated の登録商標です。 SQTP は、米国における Microchip Technology Incorporated のサービスマークです。

GestICとULPPは、その他の国におけるMicrochip Technology Germany II GmbH & Co. & KG (Microchip Technology Incorporated の子会社 ) の登録商標です。

その他、本書に記載されている商標は各社に帰属します。 ©2013, Microchip Technology Incorporated, Printed in the U.S.A., All Rights Reserved.

ISBN: 978-1-63276-662-5 • Microchip 社では、通常の条件ならびに仕様に従って使用した場合、Microchip 社製品のセキュリティ レベルは、現在市場に流 通している同種製品の中でも最も高度であると考えています。 • しかし、コード保護機能を解除するための不正かつ違法な方法が存在する事もまた事実です。弊社の理解ではこうした手法は、 Microchip 社データシートにある動作仕様書以外の方法で Microchip 社製品を使用する事になります。このような行為は知的所 有権の侵害に該当する可能性が非常に高いと言えます。 • Microchip 社は、コードの保全性に懸念を抱くお客様と連携し、対応策に取り組んでいきます。 • Microchip 社を含む全ての半導体メーカーで、自社のコードのセキュリティを完全に保証できる企業はありません。コード保護 機能とは、Microchip 社が製品を「解読不能」として保証するものではありません。 コード保護機能は常に進歩しています。Microchip 社では、常に製品のコード保護機能の改善に取り組んでいます。Microchip 社 のコード保護機能の侵害は、デジタル ミレニアム著作権法に違反します。そのような行為によってソフトウェアまたはその他の著

Microchip 社では、Chandler および Tempe ( アリゾナ州 )、Gresham ( オレゴン州 ) の本部、設計部およびウェハー製造工場そしてカリフォ ルニア州とインドのデザインセンターが ISO/TS-16949:2009 認証を 取得しています。Microchip 社の品質システム プロセスおよび手順は、 PIC® MCU および dsPIC® DSC、KEELOQ® コード ホッピング デバイ ス、シリアル EEPROM、マイクロペリフェラル、不揮発性メモリ、ア ナログ製品に採用されています。さらに、開発システムの設計と製造 に関する Microchip 社の品質システムは ISO 9001:2000 認証を取得し ています。

QUALITY MANAGEMENT SYSTEM

CERTIFIED BY DNV

(30)

北米 本社 2355 West Chandler Blvd. Chandler, AZ 85224-6199 Tel:480-792-7200 Fax:480-792-7277 技術サポート : http://www.microchip.com/ support URL: www.microchip.com アトランタ Duluth, GA Tel:678-957-9614 Fax:678-957-1455 オースティン (TX) Tel:512-257-3370 ボストン Westborough, MA Tel:774-760-0087 Fax:774-760-0088 シカゴ Itasca, IL Tel:630-285-0071 Fax:630-285-0075 クリーブランド Independence, OH Tel:216-447-0464 Fax:216-447-0643 ダラス Addison, TX Tel:972-818-7423 Fax:972-818-2924 デトロイト Novi, MI Tel:248-848-4000 ヒューストン (TX) Tel:281-894-5983 インディアナポリス Noblesville, IN Tel:317-773-8323 Fax:317-773-5453 ロサンゼルス Mission Viejo, CA Tel:949-462-9523 Fax:949-462-9608 ニューヨーク (NY) Tel:631-435-6000 サンノゼ (CA) Tel:408-735-9110 カナダ - トロント Tel:905-673-0699 Fax:905-673-6509 アジア / 太平洋 アジア太平洋支社 Suites 3707-14, 37th Floor Tower 6, The Gateway Harbour City, Kowloon Hong Kong Tel:852-2943-5100 Fax:852-2401-3431 オーストラリア - シドニー Tel:61-2-9868-6733 Fax:61-2-9868-6755 中国 - 北京 Tel:86-10-8569-7000 Fax:86-10-8528-2104 中国 - 成都 Tel:86-28-8665-5511 Fax:86-28-8665-7889 中国 - 重慶 Tel:86-23-8980-9588 Fax:86-23-8980-9500 中国 - 杭州 Tel:86-571-8792-8115 Fax:86-571-8792-8116 中国 - 香港 SAR Tel:852-2943-5100 Fax:852-2401-3431 中国 - 南京 Tel:86-25-8473-2460 Fax:86-25-8473-2470 中国 - 青島 Tel:86-532-8502-7355 Fax:86-532-8502-7205 中国 - 上海 Tel:86-21-5407-5533 Fax:86-21-5407-5066 中国 - 瀋陽 Tel:86-24-2334-2829 Fax:86-24-2334-2393 中国 - 深圳 Tel:86-755-8864-2200 Fax:86-755-8203-1760 中国 - 武漢 Tel:86-27-5980-5300 Fax:86-27-5980-5118 中国 - 西安 Tel:86-29-8833-7252 Fax:86-29-8833-7256 中国 - 厦門 Tel:86-592-2388138 Fax:86-592-2388130 中国 - 珠海 Tel:86-756-3210040 Fax:86-756-3210049 アジア / 太平洋 インド - バンガロール Tel:91-80-3090-4444 Fax:91-80-3090-4123 インド - ニューデリー Tel:91-11-4160-8631 Fax:91-11-4160-8632 インド - プネ Tel:91-20-3019-1500 日本 - 大阪 Tel:81-6-6152-7160 Fax:81-6-6152-9310 日本 - 東京 Tel:81-3-6880- 3770 Fax:81-3-6880-3771 韓国 - 大邱 Tel:82-53-744-4301 Fax:82-53-744-4302 韓国 - ソウル Tel:82-2-554-7200 Fax:82-2-558-5932 または 82-2-558-5934 マレーシア - クアラルンプール Tel:60-3-6201-9857 Fax:60-3-6201-9859 マレーシア - ペナン Tel:60-4-227-8870 Fax:60-4-227-4068 フィリピン - マニラ Tel:63-2-634-9065 Fax:63-2-634-9069 シンガポール Tel:65-6334-8870 Fax:65-6334-8850 台湾 - 新竹 Tel:886-3-5778-366 Fax:886-3-5770-955 台湾 - 高雄 Tel:886-7-213-7830 台湾 - 台北 Tel:886-2-2508-8600 Fax:886-2-2508-0102 タイ - バンコク Tel:66-2-694-1351 Fax:66-2-694-1350 ヨーロッパ オーストリア - ヴェルス Tel:43-7242-2244-39 Fax:43-7242-2244-393 デンマーク - コペンハーゲン Tel:45-4450-2828 Fax:45-4485-2829 フランス - パリ Tel:33-1-69-53-63-20 Fax:33-1-69-30-90-79 ドイツ - デュッセルドルフ Tel:49-2129-3766400 ドイツ - ミュンヘン Tel:49-89-627-144-0 Fax:49-89-627-144-44 ドイツ - プフォルツハイム Tel:49-7231-424750 イタリア - ミラノ Tel:39-0331-742611 Fax:39-0331-466781 イタリア - ベニス Tel:39-049-7625286 オランダ - ドリューネン Tel:31-416-690399 Fax:31-416-690340 ポーランド - ワルシャワ Tel:48-22-3325737 スペイン - マドリッド Tel:34-91-708-08-90 Fax:34-91-708-08-91 スウェーデン - ストックホルム Tel:46-8-5090-4654 イギリス - ウォーキンガム Tel:44-118-921-5800 Fax:44-118-921-5820 03/25/14

図 1-1:  [NEW PROJECT] ウィンドウ
図 1-4:  ツールを選択する
図 1-6:  コンパイラを選択する
図 1-7:  プロジェクトの名前とパスを指定する
+4

参照

関連したドキュメント

We note that in the case m = 1, the class K 1,n (D) properly contains the classical Kato class K n (D) introduced in [1] as the natural class of singular functions which replaces the

Hugh Woodin pointed out to us that the Embedding Theorem can be derived from Theorem 3.4 of [FM], which in turn follows from the Embedding Theorem for higher models of determinacy

Trigger Input Functionality Waveforms − Trigger Over Ride, CS Turn Off and Min On−time Figure 55 depicts all possible driver turn−off events in.. details when correct V CC

The device waveforms (see turn-on and turn-off of an IGBT in Figure 9) of a hard-switched inverter have a number of detrimental effects, which can be summarized as follows [1]:

• LEDCTRLx pins are functional (buck enable/disable, digital PWM dimming available) 001 b = 1 FSO Mode Disabled, Registers are Loaded with Data from OTP Memory after POR. • After

To write data to a TS register, or to the on−board EEPROM, the Master creates a START condition on the bus, and then sends out the appropriate Slave address (with the R/W bit set

When the flag is set, the device enters FAIL status mode and LED’s are switched ON/OFF following the OTP memory bits 8−11 in Table 24. The bit is cleared upon a successful readout

The pulse does not execute if: ENB =1 (device is disabled); both an ON and OFF pulse is simultaneously requested for the same channel; an ON or OFF pulse is requested and a SCB