78K0班(2005/08/21)タイマ割込み

前回の78K0班(2005/08/20)8ビットタイマでは、タイマをポーリングで使っていました。ですが、せっかくなので、タイマ割込みを使ってみます。


前回作ったプログラムでは、TMIF50フラグをポーリングしていました。しかしこのフラグは割込み要求フラグなので、割込みの設定を行うことで、周期的に割込み発生が可能になるはずです。タイマ割込みマスクの解除、割込み優先度の設定、CPUの割込み許可を行ったところ、割込みが発生しました。

割込みハンドラは、#pragmaで指定するようです。割込み要因名(INTTM50)は、マイコンのユーザーズマニュアル表20-1から見つけました。その割込みハンドラには、__interrupt修飾子を書いてみました。が、チュートリアルプログラムでは、この指定はないんですよね。どうするのが正しいんでしょ?

#pragma ei
#pragma interrupt INTTM50 inttm50

void main()
{
        h_initial();

        P5 = 0xfd;
        P7 = 0x10;

        TCL50 = 0x06; /* Clock = 78.13KHz */
/*      TCL50 = 0x07; ダイナミック点灯を体感するにはこちら */
        CR50  = 77;
        TMC50 = 0;
        TMIF50 = 0;
        TMMK50 = 0;
        TMPR50 = 1;

        EI();

        TCE50 = 1;
        for (;;) {
                /* 何もすることなし */
        }
}

__interrupt void
inttm50() {
        output_next_line();
}

とりあえず動作はしましたが、不明点続出です。


ホーム 特殊工作室 78K0班