PIC16F18326のタイマー割り込みとオープンドレイン出力のテストをします。
Timer0の割り込みを使ってLED点滅(Lチカ)をやってみます。PIC16F18326では、すべてのGPIOに対してオープンドレイン出力を設定することができます。そこで、RC3をオープンドレイン出力に設定して、LEDに接続します。
回路図です。ICSPでテストします。
![](https://blogimg.goo.ne.jp/user_image/79/80/3820e1a313cca2304a74ac31e6ceb3ca.png)
MPLAB Xでprojectを作成し、MCCを立ち上げ、必要な設定をします。
まず、systemモジュールの設定です。クロックは、4MHzとしました。
![](https://blogimg.goo.ne.jp/user_image/33/5f/b4e27426ca867d2069eeb05094a0c475.png)
Timer0もジュールを導入し、Timer0の周期を設定します。
Clock SourceをFOSC/4、Timer modeを16bitにして、prescalerを1:8しました。Timer Periodを500msとしました。タイマー割り込みを使いますので、Enable Timer interruptにチェックを入れます。
![](https://blogimg.goo.ne.jp/user_image/69/a7/bf46b00d3b52ce6a38ad77b62916f3e3.png)
Interruptモジュールです。TMR0にチェックが入っています。
![](https://blogimg.goo.ne.jp/user_image/1e/36/d161cebc7125ff951dc41cf89fcb8570.png)
LEDを接続するポートをオープンドレインにするため、pinモジュールでODにチェックを入れます。
![](https://blogimg.goo.ne.jp/user_image/0e/f5/285055f827ce2ebdb50455cf204b07e8.png)
プログラムです。
-------------------------------------------------------------------
/*
* PIC16F18326 MCC Timer Interrupt and Open Drain test
* 2024.01.21
* JH7UBC Keiji Hata
*/
#include "mcc_generated_files/mcc.h"
#define LED LATC3
void ISR(void){
LED = !LED;
}
void main(void)
{
// initialize the device
SYSTEM_Initialize();
// Enable the Global Interrupts
INTERRUPT_GlobalInterruptEnable();
// Enable the Peripheral Interrupts
INTERRUPT_PeripheralInterruptEnable();
TMR0_SetInterruptHandler(ISR);
LED = 0;
while (1)
{
}
}
-------------------------------------------------------------------
割り込み時に処理する関数は、TMR0_SetInterruptHandler();に記入します。
ブレッドボードです。LEDが0.5秒ごとに点滅しました。
![](https://blogimg.goo.ne.jp/user_image/79/81/3eb462548f22e350eef4b0f0f948cd53.jpg)
※コメント投稿者のブログIDはブログ作成者のみに通知されます