電子書籍の厳選無料作品が豊富!

H8/3052を使っていろいろ動作させようと考えてます、
タイマー割り込みのところで詰まっていますが、タイマー割り込みを使ってLEDを反転するというプログラムです。
結果、LEDが反転しないつまり、タイマー割り込みが動作してないのではないかと考えています。

うちが使いたいタイマーはウオッチドッグタイマです。イエローで、C言語を使っています。
皆様の知識をお借りしたいです。

//20msごとに割り込み、50回の割り込みでLED点灯反転

#include <3048.h> //3048、3052の内部I/O定義
#include <sysio.h>
int c; //割り込み回数、外部変数とする

//ITUインターバルタイマ割り込み
void int_imia0(void)
{
ITU0.TSR.BIT.IMFA = 0; //割り込みステータスフラグクリア
c-=1;
if(c==0){
P5.DR.BYTE = ~P5.DR.BYTE; //LED出力データを反転
c=50;
}
}

int main(void)
{
P5.DDR = 0xff;
ITU0.TCR.BIT.CCLR = 1; //カウンタクリア要因
ITU0.TCR.BIT.TPSC = 3; //タイマプリスケーラ25MHz/8=3.125MHz
ITU0.GRA =62499; //3.125MHz/62,500=50Hz、周期20ms
ITU0.TIER.BIT.IMIEA = 1; //IMFAフラグによる割り込み許可
ITU.TSTR.BIT.STR0 = 1; //タイマスタート
P5.DR.BYTE = 0xff; //LED出力データ初期値
c=50; //割り込み回数
_ei(); //割り込み許可
while (1); //何もしない
}
動作できない為、ご指摘よろしくお願いします。

A 回答 (2件)

>私は初心者なのでどこが原因なのか判断できませんので、原因の可能性のあるところをご指摘よろしくお願いいたします


この手のハード絡みの質問はただでさえ回答がつきにくい傾向にあります
(同じ環境使ってる人・使ったことある人で無いと回答つけずらい)

最低限の情報としてチップ(マイコン)名だけではなく使っている環境と
(多分マイコンボード AKI-H8/3052? などではないかと思いますがその型番)
(今回これは余り重要ではないと思いますが)使用コンパイラ
などの情報も書いたほうがいいのではないかと思います

私自身最近マイコンプログラミングやってるわけではないので
詳細の説明は出来ませんが P5.DR.BYTE というのも
どこかのレジストリなりに割り当てられているはずです
(マイコンチップのIOレジストリだと思いますがソースで確認してください)

単純にIOポートに出力しているのに対して出力変化が
見られないのであれば後残るはハード要因となります

初めに書いたように割り込みの前に単純にIO出力できていることを確認取るのが先決です

割り込み自体はIO制御が出来れば動いてるんじゃないの? って気がしてます

ちゃんと見てないですが以下辺りが参考に出来るんではないかと思います
http://tokyo-ct.net/usr/kosaka/for_students/H8_3 …
http://tokyo-ct.net/usr/kosaka/for_students/H8_3 …
    • good
    • 0

実際同じチップ(環境)使っているわけではないのでなんともいえませんが


割り込み以前の話として P5.DR.BYTE への出力値を変えることで
LED表示が切り替わることは確認されてますか?
(変わらないのであれば割り込みの問題じゃない可能性があります)

この回答への補足

返事ありがとうございます。
P5.DR.BYTE への出力値を変えましたが、LEDの表示は変わりませんでした。
私は初心者なのでどこが原因なのか判断できませんので、原因の可能性のあるところをご指摘よろしくお願いいたします。
また、3052のウオッチドッグタイマを使ったプログラムの例ありましたら教えてください。よろしくお願いします。

補足日時:2010/01/23 12:04
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!