MCCを使って割り込み処理をどの様にプログラムするのかを Timer1を使い LEDを500ms間隔で点灯させる例で示します。
Timer1から500ms間隔で割り込みを発生させ、割り込み処理プログラム(MyTMR1_ISR)で LEDへの出力を反転させるプログラムです。
この例では、「New Project...」から、Interrupt という名称のプロジェクトを作成しました。
もし、上記のような MCC ロゴが表示されていない場合には、MCC プラグインがインストールされていいるか確認してください。MCC のインストールは、ここ に説明があります。
MCCが起動すると、自動生成するファイル名称を指定しするダイアログが現れます。この例では「MyConfig.mc3」とし保存します・
MCCのデフォルト設定のまま500kHz_MF を使用しました。
Device Resources ウインド内の Libraries list にある Timer icon を展開して TMR1 icon をダブルクリックします。
モジュールがロードされると TMR1 icon が、Project Resources に現れます。
表示される画面を見ながら、マウスでクリックして設定します。
Enable Timer Interruptにレ点を入れ,Timer Period を 500ms に変更します。
他の設定はデフォルトでOKでした。
Pin Manager をクリックします。
module がロードされ、Pin Manager に、利用できる 入出力pinが表示されます。
まず、Grid View でRA5 をGPIO 出力に指定します。そして。LED が接続されている RA5 の名称を 「LED」 に書き換えます。
Generate ボタンをクリックします。
自動生成された main.c ファイルを開き、内容を下のリストの様に変更します。
以下の4点が割り込み処理関数を組み込むのに重要です。
この例では、ユーザーの割り込み関数は、「MyTMR1_ISR」 という名前でその動作内容は LEDへの出力を反転するだけの簡単なものです。
/******************************* * MCC利用して Interrupt を設定 ********************************/ #include "mcc_generated_files/mcc.h" // ユーザーの割り込み関数のプロトタイプ void MyTMR1_ISR(void); /* Main application */ void main(void) { SYSTEM_Initialize(); // ユーザーの割り込み関数を指定する TMR1_SetInterruptHandler(MyTMR1_ISR); // インターラプトを有効にする INTERRUPT_GlobalInterruptEnable(); INTERRUPT_PeripheralInterruptEnable(); while (1) { // Add your application code } } // ユーザーの割り込み関数 void MyTMR1_ISR(void){ LED_Toggle(); } /** End of File **/
Program アイコンをクリックし、PICにプログラムを書き込みます。
書き込み終了後、LEDは 500ms 間隔で点滅します。