dポイントプレゼントキャンペーン実施中!

こんにちは。

H8/3052F
C言語でプログラミングしています。

H8をはじめて約半年がたった者です。
ITUを使ったサーボ制御やAD変換など、いろいろ勉強してきました。
しかしながらまだまだ未熟な者です。



今回割り込みに挑戦しています。
IRQ0を使いスイッチ入力があるとLED点滅パターン変更のプログラムに成功し、ITUと組み合わせてサーボを割り込みで制御できるまで勉強、実験していました。
最終的に成功し、しばらく動かしていたのですが、割り込みがきかなくなってしまいました。


IRQ0が駄目なのか?と仮定してIRQ1でプログラミングし、試したところ無事割り込みできました。
しかしIRQ1も割り込みが急にできなくなってしまいました。
書き込みし直しても直りません。


回路として、本などを参考にIRQ0のポート→マイクロスイッチ→GND
という形で接続しています。
もしかしたらIRQ0の時はスイッチがB接点でしばらく繋がったままだったかもしれません。

また、この回路だと動作も少し不安定?なようです。

上記の回路で間違いはありませんか?



一応プログラムを載せておきます。
もし間違いがあったらお願いします。


#include <3048.h>


void wait (void)
{
long t=200000;
while (t--);
}

void int_irq0(void)
{
int c=3;
INTC.ISR.BIT.IRQ0F = 0
while(c--){

P5.DR.BYTE = 0x5;
wait();
P5.DR.BYTE = 0xa;
wait();
INTC.ISR.BIT.IRQ0F = 0;
}
}

int main(void)
{
DI;
INTC.ISCR.BIT.IRQ0SC = 0;
INTC.IER.BIT.IRQ0E = 1;
P5.DDR = 0xff;
EI;
while (1) {
P5.DR.BYTE = 0xff; //点灯
wait (); //待ち
P5.DR.BYTE = 0; //消灯
wait(); //待ち
}
}


以上よろしくお願いします。

A 回答 (3件)

No1です。



>もう少し詳しく
それぞれのキーワードでググッてください。
それでも分からなければ何が分からないか書いてください。

とりあえず
ノイズ除去もあるのでバッファはシュミットタイプ(反転しますが74HC14とか)
辺りでしょうか?
チャタリング除去は一番簡単なコンデンサ+抵抗で問題ないでしょう

>ダミーリード
やってなければ一発割り込み受けたあと割り込みに反応しなくなるので
それは無いと思いましたが・・・
稀に別タスク等でポート読んでたりすると・・・
まぁルネサスで3052Fのハードウエアマニュアルがダウンロードできるので
しっかり読んでください。
ここのマニュアルは稀に同一ピンに割り当てられている別機能の説明に
他の機能に関する重要な解説書いてあったりするので注意。

>出力ポートにしてプログラムでH/Lにして、割り込みを発生させる
こんなことする位なら割り込み禁止にしてそのルーチン飛ばした方が
早いと思いますが?

まぁチャタリング除去はタイマー割り込みなどでスイッチをサンプリングして
ソフトで除去してもいいかと思います。
CPU負荷や外付けH/Wの量とかで判断されるといいかと思いますが。

あと多重割り込みにも注意です。
(割り込み処理中に他の割り込みを受け付ける事です。)
スタック食い潰す事があるので。
    • good
    • 0

 自分の過去のプログラムを見てみました。


 ダミーリードは、やっていますか。
 ポートにプルアップ抵抗を入れていますか。

 IRQポートとして使っていても、出力に設定する事も出来ます。
 出力ポートにしてプログラムでH/Lにして、割り込みを発生させる事も出来ます。
 プルアップ抵抗を付ける加工が面倒なら、スイッチを開放にしてこの方法で割り込みを入れる方法も有ります。

 下記のプログラムはタブ4だと揃うのですが、コピーして貼り付けるとタブが利かない。



volatile chardata;/* ダミーリード用*/


ISCR.BYTE = 0xFF;/*IRQ0~5 は、立下りで割り込み*/

data = ISR.BYTE;/*クリアする前にダミーリード*/
ISR.BYTE = 0;/*全割り込みフラグをクリア*/

IER.BYTE = 0x3F ;/*全IRQ を有効にする*/
EI();/*割り込みイネーブル*/
    • good
    • 0

プルアップ抵抗位はいれてる?



普通、マイクロSWとかだったら線の長さもそれなりので
バッファは入れるし、メカ接点なのでチャタリング除去回路もいれますが
どうです?
(線が長い場合など直接H8に繋ぐと潰しますよ)
あと割り込み自体も立下りエッジですか?レベル受け付けだと
押したままにすると割り込みかかりっぱなしになります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

>普通、マイクロSWとかだったら線の長さもそれなりので
>バッファは入れるし、メカ接点なのでチャタリング除去回路もいれますが
>どうです?
>(線が長い場合など直接H8に繋ぐと潰しますよ)

知識不足ですみません。
うっすら内容は理解できるのですが、もう少し詳しく教えていただけると助かります。

お礼日時:2011/06/25 22:36

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