- ベストアンサー
picのポート変化割り込みを使用した機械の制御部について
- pic16f690を使用して機械の制御部を作成しています。複数のボタンに個別な割り込みをかける方法を知りたいです。
- pic16f690の制御部作成において、複数のボタンにそれぞれ個別の割り込みをかけることができないか悩んでいます。
- pic16f690を使用した機械の制御部作成中に、複数のボタンの個別な割り込みができない問題に直面しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
http://sky.geocities.jp/home_iwamoto/picc_02.htm ■割り込み(インターラプト)を使ったプログラム http://sky.geocities.jp/home_iwamoto/prgm/IRQ_PA3.c リンク先を改造 // PA3 インタラプト // // PA3のボタンを押すとインタラプトが発生する。 // インタラプト回数をLEDで表示する。 #include<pic.h> __CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS); static unsigned char Display=1; // LED表示パターン void interrupt isr(void){ unsigned int i; if(RABIF) { // IOからのインタラプト for(i=2000;i>0;i--); // チャタリング防止遅延(約20mS) if(RA0==0){キー0の処理} if(RA1==0){キー1の処理} if(RA2==0){キー2の処理} RABIF = 0; // インタラプトフラッグをクリア } } void main(void){ TRISC = 0; // PortC すべて出力 PORTC = Display; // LED消灯 IOCA3 = 1; // PA3をON RABIE = 1; // IOインタラプトをON GIE = 1; // インタラプトをON for(;;) continue; // 無限ループ } ってかんじじゃないか 持ってないが 回答1の追記と同じ
その他の回答 (1)
それは書き方は無理でしょう。 割り込み内で何の割り込みかを判断して分岐させます。 ただし、ICD2などは使用できません。 ハードが完成しているなら変更はできないのかもしれませんが できればCPUの外で割り込みをまとめてINT端子に入れたほうが 良かったかもしれません。 まずPIC16F690は割り込みベクタが一つしかないことをご確認ください。 (データシートp25) タイマー割り込みもINT割り込みもすべて004番地に飛んできます。 そこから何の割り込みかを調べてそれぞれの処理に分岐させます。 ハードについてですが割り込みさせたいものがいくつかあると ロジックのANDをとってINT端子に入れて、それぞれの信号はポートに 入力させます。CPUは割り込みを受け付けるとそのポートを読みに行って 何の割り込みかをみつけるようにします。(自分のプログラムにて) 当然、ロジック論理、タイミングなどを考慮して回路設計しなければなりません。
お礼
ご回答ありがとうございます。 書き忘れていたのですが、コンパイラのデバイスの設定?みたいなものに、 #define INT_RA0 0x010B08 #define INT_RA1 0x020B08 #define INT_RA2 0x040B08 #define INT_RA3 0x080B08 #define INT_RA4 0x100B08 #define INT_RA5 0x200B08 #define INT_RB4 0x1100B08 #define INT_RB5 0x1200B08 #define INT_RB6 0x1400B08 #define INT_RB7 0x1800B08 と、書いてあったので、ピン毎の割り込みが出来るかも...と思ったのですが。 >>割り込みをまとめてINT端子に入れたほうが というのは具体的にどうすればいいのでしょうか? 質問ばかりで申し訳ありません。