この記事は PICマイコン Advent Calendar 2025 13日目の記事です。
1. はじめに
前回の記事では、MCCを使ってタイマ割り込みによるLチカを行いました。
今回は、外部入力の変化をきっかけに処理を行う状態変化割り込みを扱います。
スイッチ入力など、外部信号に応じて処理を行いたい場面でよく使われる割り込みです。
基本的なMCCの使いかたについては、前回の記事を参照してください。
2. 使用マイコン
本記事ではPIC24Fファミリに属する PIC24FJ64GB002を使用します。
LEDはRB10に接続しており、Custom NameをLEDとしています。
タクトスイッチはRB14に接続しており、Custom NameをSWITCHとしています。
3. MCCでの設定
まず、Pin Managerでピンの割り当てを行います。
次に、Pin Moduleでの設定を行います。
LED に対応するピンはOutputに設定します。
今回、入力ピンには内部プルアップを適用するため、WPUにチェックを入れます。
また、状態変化割り込みを使用するため、IOCにもチェックを入れます。
Generateする前にInterrupt ManagerでCNIをEnableにします。
Enableにできたら、Generateします。
4.実装
状態変化割り込みでは、割り込み要因が立ち上がりか立ち下がりかをハードウェアは判別しません。
そのため、*GetValue()関数を用いて現在のピン状態を読み、ソフトウェア側で判定します。
今回は、スイッチが押された瞬間(立ち下がり)にLEDをトグルするようにします。
割り込み時に呼び出される関数は、CN_SetInterruptHandler関数で登録します。
#include "mcc_generated_files/system.h"
#include "mcc_generated_files/pin_manager.h"
void CN_interrupt(){
if(SWITCH_GetValue() == 0){
LED_Toggle();
}
}
int main(void)
{
SYSTEM_Initialize();
CN_SetInterruptHandler(CN_interrupt);
while (1){}
return 1;
}
5. おわりに
今回は、MCCを使って状態変化割り込みをしました。
状態変化割り込みは、スイッチ入力のような外部信号を扱う際によく使われる割り込みです。
MCCを使うことで、プルアップの設定や割り込みの有効化を比較的簡単に行うことができます。
一方で、立ち上がり・立ち下がりの判定はソフトウェア側で行う必要がある点は、レジスタ直打ちの場合と同様です。
内部でどのレジスタが設定されているかを意識しながら使うと、より理解が深まると思います。
参考として、レジスタを直打ちした場合の記事を載せておきます。


