組込み系システム開発室by藤原技研M

製作中の組込み機器や気になる開発ツールなどを中心に記事を書いています。

キッチンタイマーの製作(5)タイマ割り込み

タイマー割り込みの設定をします。

MCCを起動してDevice Resourcesウィンドウの timer のTMR1をダブルクリックすると以下のような画面になるので、

Enable Timer Interruptにチェックを入れて

 ・Timer Period: 

 ・Callback Function rate:

を操作し、結果的に1秒毎にタイマ割り込みが発生するように

 Software SettingsのTimer Period = 1 s

になるようにします。

Generateボタンを押します。

f:id:fujiharagiken:20171219153300p:plain

次のような警告がでますが、Yesをクリックします。

f:id:fujiharagiken:20171107141754p:plain

次のような画面がでますので、左側が赤色の物だけ→を押して右側に反映します。

f:id:fujiharagiken:20171107142028p:plain

Merge[MCC]の☒をクリックして終了しようとすると以下の画面が出ますのでYesを選択します。

f:id:fujiharagiken:20171107142208p:plain

 

IDEを一旦終了し、再起動すると新たに作成されたtmr1.cが見えるようになります。

TMR1_CallBack(void)に実行したい内容を記述します。

f:id:fujiharagiken:20171107143032p:plain

 

<プログラム変更点>

【main.c】

    int cntTimer = 0;         //変数の宣言を追加

 

【tmr1.c】

    extern int cntTimer;     //変数の外部参照宣言を追加 ※#include "tmr1.h"の下に追加

 

    void TMR1_CallBack(void) {        //既にMCCによって作成されているのを利用する

     cntTimer ++;     //カウンタのインクリメント命令を追加

     }

【tmr1.h】

 #define TMR1_INTERRUPT_TICKER_FACTOR 400     //100→400に 変更する

 (※実際には4倍のスピードで動作するので、TMR1_CallBack(void)を呼び出す頻度を1/4にする。

 

<使い方>

・タイマをスタートするには

    cntTimer = 0;         //変数の初期化例

    TMR1_Start();       //タイマースタート

 

・経過時間を求めるには

        cntTimerを参考にしてLCDで経過時間表示を行う。

 (例)

        char wk[9] = {'\0'};

        //------[ 表示(2行目)]------
        snprintf(wk, 9, " cnt=%02d" , cntTimer);
        WireLcdDisplay(wk, 8, 0x40);

 

・タイマをストップするには

    TMR1_Stop();   //タイマーストップ ※これ以降タイマ割り込みが発生しなくなる

 

 

 

続きは(6)へ http://fujiharagiken.hatenablog.com/entry/2018/01/16/135857