はじめまして. 成岡と申します. H8/3069F25マイコンを勉強し始めて1ヶ月弱の初心者です. タイマー割り込み機能を使いたいのですが,タイマーカウンターが作動せず困っ ています. どなたかアドバイスお願いします. 症状:タイマーカウンター(TCNT)が作動しない. 例えば, LCD_DisplayNumber(0); //LCDに0を表示 ITU.TSTR.BIT.STR1 = 1;//ITU1 TCNTカウント開始(のはず) while(1){ if(ITU1.TCNT > 1000) LCD_DisplayNumber(1); //LCDに1を表示 } のように書いても,LCDにはずっと0が点灯したままです. 周囲にいる割と詳しい人にも尋ねてみたところ,「初期設定にどこか不備がある のでは?」 とアドバイスされたので,いろいろ調べて設定してみたものの,タイマーが動い てくれません. 「16ビットタイマのチャンネル0は使用できません.」とマニュアルにあったので, チャンネル1を使いました.チャンネル2でもタイマー作動しません. (また,チャンネル0でも念のため試しましたが,同様に作動していませんでした.) どうぞよろしくお願いします. プログラムは以下の通りです. #include <stdio.h> #include <string.h> #include <sysio.h> #include <3069S.H> // intをunsigned shortに置換 void timer_init(void); int main(){ P1DDR = 0xff; // port1を全て出力に設定 P6DDR = 0x00; // port6を全て入力に設定 WriteCCR(0x00); // 割り込み許可 timer_init(); // timerの初期化 ITU.TSTR.BIT.STR1 = 1;//ITU1 TCNTカウント開始 LCD_DisplayNumber(0); while(1){ if(ITU.TISRA.BIT.IMFA1 == 1){ ITU.TISRA.BIT.IMFA1 = 0; LCD_DisplayNumber(1); } else if(ITU1.TCNT > 1000){ LCD_DisplayNumber(2); } } return; } void timer_init(void){ ITU1.TIOR.BYTE = 0x88; // コンペアマッチによる端子出力禁止 ITU.TSNC.BYTE = 0x00; ITU.TMDR.BYTE = 0x00; ITU.TISRA.BIT.IMIEA1 = 1; // IMFA1への書き込みを許可 if(ITU.TISRA.BIT.IMFA1)ITU.TISRA.BIT.IMFA1 = 0; // 初期化 ITU1.TCR.BYTE = 0x00; ITU1.TCNT = 0; ITU1.GRA = 0x0c00; MSTCR.BYTE.H = 0x78; // φクロックの出力許可(モード7で使用の場合) MSTCR.BYTE.L = 0x00; ITU.TSTR.BIT.STR1 = 0; // カウント停止状態 return; } void interrupt timer(){ if(ITU.TISRA.BIT.IMFA1)ITU.TISRA.BIT.IMFA1 = 0; // 初期化 LCD_DisplayNumber(2); } ベクタ番号28番にtimerを登録. マイコン:H8/3069(64F3069F25) 開発環境::YellowIDE ver6.38 いろいろ調べている過程で, ITU.TISRC.BIT.OVF0 ITU.TISRC.BIT.OVF1 ITU.TISRC.BIT.OVF2 の初期値は0とマニュアルにあるのですが,すべて1になっていることがわかりま した. 症状と関係あるのかわかりませんが..