キッチンタイマーの製作(5)タイマ割り込み
タイマー割り込みの設定をします。
MCCを起動してDevice Resourcesウィンドウの timer のTMR1をダブルクリックすると以下のような画面になるので、
Enable Timer Interruptにチェックを入れて
・Timer Period:
・Callback Function rate:
を操作し、結果的に1秒毎にタイマ割り込みが発生するように
Software SettingsのTimer Period = 1 s
になるようにします。
Generateボタンを押します。
次のような警告がでますが、Yesをクリックします。
次のような画面がでますので、左側が赤色の物だけ→を押して右側に反映します。
Merge[MCC]の☒をクリックして終了しようとすると以下の画面が出ますのでYesを選択します。
IDEを一旦終了し、再起動すると新たに作成されたtmr1.cが見えるようになります。
TMR1_CallBack(void)に実行したい内容を記述します。
<プログラム変更点>
【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