この記事は PICマイコン Advent Calendar 2025 11日目の記事です。
1. はじめに
前回の記事では、Lチカをしました。
今回は同じ回路構成のまま、タイマ割り込みを使ってLEDを周期的に点滅させます。
本記事ではMCCを用いて実装します。
なお、I/O のピン設定などについては、前回の記事を参照してみてください。
2. 使用マイコン
本記事ではPIC24Fファミリに属するPIC24FJ64GB002を使用します。
LEDはRB10に接続しており、Custom NameをLEDとしています。
3. MCCでの設定
MCCを開き、GPIOなどの設定をして、Device ResourcesのPeripheralsからTMR1を追加します。
追加したら、Enable TimerとEnable Timer Interruptにチェックマークを入れます。
今回のクロック設定では、Prescalerをデフォルトの 1:1 にしたままだと、上の画像からわかるようにTimer Periodを最大で 32.768 ms までしか設定できません。
そのため、Prescaler を 1:64 に設定して、Timer Periodに 1s を指定できるようにします。
タイマ割り込みの割り込み優先度は、SystemのInterruptから設定できます。
一応ここで割り込みがEnabledになっておくか確認しておくと良いでしょう。
4.コードの記述
MCCを使う場合、割り込みハンドラそのものは自分で書きません。
代わりに、割り込み時に呼ばれる関数を自分で定義します。
この関数は、void 型であれば自由に作成できます。
今回は関数内でLEDをトグルさせておきます。
関数を作成できたら、ハンドラを登録する関数に作成した関数のポインタを渡します。
今回はTMR1_SetInterruptHandlerを使います。
ハンドラを追加したら、TMR1_Start関数でタイマをスタートさせます。
コード例
#include "mcc_generated_files/system.h"
#include "mcc_generated_files/tmr1.h"
#include "mcc_generated_files/pin_manager.h"
void TMR1_callback(){
LED_Toggle();
}
int main(void)
{
// initialize the device
SYSTEM_Initialize();
TMR1_SetInterruptHandler(TMR1_callback);
TMR1_Start();
while (1){}
return 1;
}
5.おわりに
今回は、MCCを使ってタイマ割り込みによるLチカを行いました。
前回の記事のようにレジスタを直接操作した場合と比べると、割り込みベクタやフラグを意識せずに実装できるため、かなり手軽に実装できることが分かります。
記事の最後に、比較用としてレジスタを直打ちする場合の記事へのリンクを置いておきます。
より深く理解したい方は、ぜひあわせて読んでみてください。


