0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PIC24FでMCCを使って状態変化割り込みをしてみる

Posted at

この記事は 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でピンの割り当てを行います。

スクリーンショット 2025-12-23 23.58.35.png

次に、Pin Moduleでの設定を行います。
LED に対応するピンはOutputに設定します。

今回、入力ピンには内部プルアップを適用するため、WPUにチェックを入れます。
また、状態変化割り込みを使用するため、IOCにもチェックを入れます。

スクリーンショット 2025-12-24 0.09.39.png

Generateする前にInterrupt ManagerでCNIをEnableにします。
Enableにできたら、Generateします。

スクリーンショット 2025-12-24 0.11.56.png

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を使うことで、プルアップの設定や割り込みの有効化を比較的簡単に行うことができます。

一方で、立ち上がり・立ち下がりの判定はソフトウェア側で行う必要がある点は、レジスタ直打ちの場合と同様です。
内部でどのレジスタが設定されているかを意識しながら使うと、より理解が深まると思います。

参考として、レジスタを直打ちした場合の記事を載せておきます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?