PIC12F1822を使って、MPLAB X MCCを利用して割込み設定のテストをします。
まず、タイマー割込みのテストで、16bitタイマーTMR1を使ったLED点滅(Lチカ)をやってみます。
RA0に接続したLEDをTMR1から500msごとに割込みをかけ、割込みのたびに点灯、消灯を交互に行い点滅させます。
![](https://blogimg.goo.ne.jp/user_image/16/17/2ef340be89a682ea9f7e31531cc7cdb8.png)
まず、System Moduleの設定です。
INTOSC,FOSC,Clock 500KHzのデフォルトのままです。
Low-voltage Programingだけチェックを外しました。
![](https://blogimg.goo.ne.jp/user_image/27/7f/efae5fbcec8c0e9d3c4d754495a9ff5d.png)
TMR1モジュールを組み込み、Timer Periodを500msに設定します。
Enable Timer Interruptにチェックを入れます。
![](https://blogimg.goo.ne.jp/user_image/39/05/e9b25031313b9e857906e4cf610fd7da.png)
MCCのGenerateをクリックして、各ファイルを生成し、MCCを終了します。
プログラムです。
--------------------------------------------------------
/*
PIC12F1822 Timer Interrupt test
* 2021.5.22
* JH7UBC Keiji Hata
*/
#include "mcc_generated_files/mcc.h"
#define LED LATA0
volatile unsigned char val = 0;
// Interrupt Service Routine
void ISR(){
val = !val;
LED = val;
}
void main(void)
{
SYSTEM_Initialize(); // initialize the device
PIC12F1822 Timer Interrupt test
* 2021.5.22
* JH7UBC Keiji Hata
*/
#include "mcc_generated_files/mcc.h"
#define LED LATA0
volatile unsigned char val = 0;
// Interrupt Service Routine
void ISR(){
val = !val;
LED = val;
}
void main(void)
{
SYSTEM_Initialize(); // initialize the device
TMR1_SetInterruptHandler(ISR);
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
LED = 0;
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
LED = 0;
while (1)
{
}
}
-------------------------------------------------------------------
{
}
}
-------------------------------------------------------------------
ブレッドボードです。
![](https://blogimg.goo.ne.jp/user_image/30/f0/a0979275581233243d6d02a655dd046a.jpg)
500ms(0.5s)ごとに点滅しました。