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を使ってタイマ割り込みでLチカ

Posted at

この記事は PICマイコン Advent Calendar 2025 11日目の記事です。

1. はじめに

前回の記事では、Lチカをしました。

今回は同じ回路構成のまま、タイマ割り込みを使ってLEDを周期的に点滅させます。
本記事ではMCCを用いて実装します。

なお、I/O のピン設定などについては、前回の記事を参照してみてください。

2. 使用マイコン

本記事ではPIC24Fファミリに属するPIC24FJ64GB002を使用します。
LEDはRB10に接続しており、Custom NameをLEDとしています。

3. MCCでの設定

MCCを開き、GPIOなどの設定をして、Device ResourcesPeripheralsからTMR1を追加します。

追加したら、Enable TimerEnable Timer Interruptにチェックマークを入れます。

image.png

今回のクロック設定では、Prescalerをデフォルトの 1:1 にしたままだと、上の画像からわかるようにTimer Periodを最大で 32.768 ms までしか設定できません。

そのため、Prescaler を 1:64 に設定して、Timer Period1s を指定できるようにします。

image.png

タイマ割り込みの割り込み優先度は、SystemInterruptから設定できます。
一応ここで割り込みがEnabledになっておくか確認しておくと良いでしょう。

image.png

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チカを行いました。

前回の記事のようにレジスタを直接操作した場合と比べると、割り込みベクタやフラグを意識せずに実装できるため、かなり手軽に実装できることが分かります。

記事の最後に、比較用としてレジスタを直打ちする場合の記事へのリンクを置いておきます。
より深く理解したい方は、ぜひあわせて読んでみてください。

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?