第30回 MPLAB Code Configurator(6) 〜生成されたプログラム内容〜

今回は自動生成されたプログラムの内容を確認します。

MCC生成コードの構成

それでは再度MCCが生成したプログラムコードの構成を確認しておきましょう。

Pic app 30 mcc code

それぞれのファイルの概略は以下になります。

ファイル名 内容
main.c メインファイルで、このファイルに自分のプログラムを書いていきます。
mcc.h / mcc.c マイコンの初期化関数などが記述されています。またマイコンのコンフィグレーション設定(#pragma config)もこのファイルに記述されています。
pin_manager.h / pin_manager.c 各ピンのデジタル/アナログ設定、入出力設定などが記述されています。またピン名称のマクロも定義されています。このマクロについても後ほど詳細を説明します。
adc.h / adc.h ADコンバータの関数が記述されています。

それでは、最初はメインとなるmain.cファイルから説明します。

 

main.c

main.cはシンプルな構成になっています。

Pic app 30 main

マイコンの初期化設定などは「SYSTEM_Initialize()」にまとめられています。この関数では、マイコンのピン設定や動作周波数設定などが行われます。実体は「mcc.c」にありますので、あとで詳しく見てみます。

また割り込み処理を行う場合は、今はコメントアウトされていますが、必要に応じてコメントを外します。今回は割込み処理は実装しませんので説明は省略します。

プログラムは最後のwhile()ブロックに書くことになります。

基礎編や応用編のプログラムでは、マイコンの設定などはmain関数内に書いてきましたが、MCCではSYSTEM_Initialize関数にまとめられていますので、この内容をもう少し詳しくみてみます。

 

SYSTEM_Initialize関数

先ほどの「SYSTEM_Initialize()」関数はmcc.cに書かれています。

Pic app 30 system initialize

ということで、「SYSTEM_Initialize()」の中身は、関数4個で構成されています。なんとなくこの先、どんどん深みに入っていきそうな雰囲気が出てきていますが、この先の関数の中では見慣れたコードが書かれていますので、それほど複雑ではありません。

ところで、これら4個の関数を説明する前に、コンフィグレーション設定の場所を確認しておきましょう。コンフィグレーション設定は、「SYSTEM_Initialize()」の前に以下のように書かれています。

Pic app 30 config

この記述は、今まで基礎編で使用してきた内容と同じになります。

それでは、SYSTEM_Initializeから呼ばれる4個の関数の中身を確認します。

最初はPIN_MANAGER_Initialize関数です。

Pic app 30 pin manager initialize

この関数で、MCC設定画面で設定した内容に応じて、TRISA(入出力設定)、ANSELA(アナログ/デジタル設定)が記述されています。また各ピンの出力の初期値としてLATAの設定があります。基礎編と応用編では説明していませんが、内部プルアップ抵抗の設定(WPUA)、ピンの機能割り当て設定(APFCON)も記述されています。

次に、同じmcc.cファイル内にあるOSCILLATOR_Initialize関数とWDT_Initialize関数の中身を確認します。

Pic app 30 osc wdt initialize

OSCILLATOR_Initialize関数内では、基礎編、応用編で使用してきた動作周波数設定レジスタOSCCONの設定がされています。また、今までの説明に出てきていませんが、動作周波数の微調整を行うOSCTUNEレジスタ、ブラウンアウトリセットの制御を行うBORCONレジスタの設定がされています。

MCCで設定する場合、見慣れないレジスタの設定もされていますが、そのままで特に問題ありません。

SYSTEM_Initializeから呼ばれる最後の関数はADC_Initialize関数です。

Pic app 30 adc initialize

この関数では、MCCで設定した内容にしたがって、ADコンバータ設定のレジスタ、ADCON0とADCON1の設定がされています。また、ADコンバータの結果が格納されるADRESレジスタにデフォルト値として0が設定されています。

 

ADコンバータ機能の利用

以上が初期設定の中身で、これらはMCCで設定した内容に応じて自動的に生成されたものですので、特に理由がない限り変更する必要はありません。

今回、ADコンバータの機能を利用して、スイッチの状態を調べて、その状態に応じてLEDをON/OFFします。

これらを実装する場合にどのように自動生成されたコードを利用すればよいか、これからADコンバータ機能、ピン出力設定についてそれぞれ説明します。

ADコンバータ機能に関するプログラムは、adc.h / adc.cにあります。今回はRA2ピンのADコンバータで電圧値を読み取ります。adc.h / adc.cではこの関数が用意されています。

Pic app 30 adc getconversion

「ADC_GetConversion()」という関数で、これは引数にADコンバータ値を取得したいピンを指定すると、ADコンバータの値が返ってきます。なお、返り値の型は「adc_result_t」ですが、これは符号なし16ビットです。

また引数のピン指定ですが、数値で指定しても問題ありませんが、MCCでRA2ピンに対して「SWITCH」というカスタム名をつけました。この設定は、adc.hに定義されています。

Pic app 30 adc h

ということで、ADコンバータで値を読み取りたい場合は、

ADC_GetConversion(SWITCH);

と書くと、ADコンバータの値が取得できます。

 

ピンの制御

ピンの制御ですが、「LATA5 = 1;」などと書いて出力制御することができますが、MCCでピンのカスタム名をつけました。この設定は「pin_manager.h」で定義されています。多くの設定がありますので、ここではLEDを接続しているRA5ピンの記述を確認します。

Pic app 30 pin manager h

132行目を見ると、LATA5は「LED_LAT」として定義されていますので、LEDをONする場合「LATA5 = 1;」ではなく、「LED_LAT = 1;」と書くことができます。

また、ONかOFFの設定は、135行目、136行目にも定義があり、LEDをONする場合は「LED_SetHigh();」、OFFにする場合は「LED_SetLow();」と記述することができます。

以上で、自動生成されたプログラムについて、必要な部分の確認ができましたので、次回はこれらを利用して実際にプログラムを作成、動作確認してみます。

 

更新履歴

日付 内容
2017.12.24 新規投稿

« »