2018.08.02

MPLAB v4.20

タイマー割り込み備忘録

内部クロック利用時の設定について。

1.内部クロック利用時に使えるタイマーのクロックはFOSC/4、HFINTOSC、LFINTOSCのいずれか。

 

2.割り込みのタイミングについて。

例えば、下図TIMER0のRequested Period は16.384ms以上となっているが、16.384msと設定してもTimer0は動作しない。

RegistersタブにあるTIMER0Hの値が1以上になっていないとダメ。


TIMERについてはEasySetupだけじゃダメでRegistartsタブのTMR0Hも確認する必要があるのは罠としか思えない。。。

参考プログラム

#include "mcc_generated_files/mcc.h"
void DelayMs(int dlyms){
    while(dlyms--) __delay_ms(1);
}

bool m_bLED_ON=false;

//TIMER0割り込み処理
void TMR0_Handler(void){
    if(m_bLED_ON){
        m_bLED_ON=false;
        LATCbits.LATC3=0;//LED OFF
    }else{
        m_bLED_ON=true;
        LATCbits.LATC3=1;//LED ON
    }
}

void main(void)
{
    DelayMs(1000);
    // initialize the device
    SYSTEM_Initialize();

    //TIMER0割り込み関数を設定
    TMR0_SetInterruptHandler(TMR0_Handler);

    // Enable the Global Interrupts
    INTERRUPT_GlobalInterruptEnable();

    // Enable the Peripheral Interrupts
    INTERRUPT_PeripheralInterruptEnable();

    //TIMER0開始
    TMR0_StartTimer();
    while (1)
    {
        
    }
}

最初にプロジェクトを作成した時点ではmain.cはない。
この状態でMCC Generateをするとヘッダ、割り込み開始/停止の関数がインクールドされたmain.cが勝手に作られる。

MPLAB がMCCを導入してかなり簡単にpicのプログラムができるようになったけど、まだまだ知らないと動かない事がありそう。

SEO [PR] !uO z[y[WJ Cu