LEDの点灯とタイマ割り込み

簡単なサンプルプログラム

#include "3664.h"

#pragma interrupt
void int_timera(void) /* タイマAの処理 */
{
    IRR1 &= ~0x60;
    PDR1 = ~PDR1;     /* ポート1のデータを全ビット反転 */
}

int main()
{
    /* データシート 9.1 ポート1 を参照 */
    PMR1 = 0x00;      /* 兼用のポートをポート1に設定 */
    PCR1 = 0xff;      /* ポート1を全ビット出力用に使用 */
    PDR1 = 0x00;      /* ポート1をクリア */

    /* データシート 10. タイマA を参照 */
    TMA = 0x99;       /* φW/32,0.5sec周期割込み */
    IENR1 |= 0x40;    /* タイマA割り込みを許可する */

    STI();            /* 割り込み全体を許可する */
    while(1){
        SLEEP();      /* 割り込み発生を待つ */
    }
    return 0 ;
}

特殊な部分の説明

#include "3664.h"
H8/3664 の特殊レジスタを変数と同じように読み書きするための #define マクロが書いてある。
#pragma interrupt
この次に書いてある関数が、割り込み処理であることを示す。 割り込み処理関数名は、h8-3664.x にて定義されている。 主な物は以下の通り。
割り込み処理関数名説明
int_nmiNMI割込み
int_trap0〜3ソフトウェア割込みtrap
int_irq0〜3外部割り込みIRQ0〜3
int_timera,w,vタイマA,W,V
int_sci3シリアル通信割込み
int_adiA/D変換終了割込み
STI()
割込み全体の許可
SLI()
割込み全体の禁止
SLEEP()
sleep命令(割り込み等が発生するまで停止する)

プログラム


Last modified: Wed May 26 10:59:26 JST 2004