PIC18F2550を使って、外部入力割り込みがちゃんと入るかどうかをチェックするため非常に簡単なサンプルコードを書いてみたのですが割り込みが発生しないのでどなたかご助力お願いします。(コンパイラ : MPLAB C18)
とりあえずスイッチを押せばINT2ピンに5Vが入力され、割り込みでLEDを点滅させるという主旨で以下のコードを書きこんで動作させました。
#include <p18f2550.h>
#include <delays.h>
#include <portb.h>
#pragma config FOSC = INTOSCIO_EC, FCMEN = ON, IESO = OFF
#pragma config PWRT = OFF, BOR = OFF, VREGEN = OFF
#pragma config WDT = OFF, CCP2MX = OFF
#pragma config PBADEN = ON, LPT1OSC = ON, MCLRE = OFF
#pragma config STVREN = ON, LVP = OFF, XINST = OFF
#pragma config CP0 = OFF, CP1 = OFF, CP2 = OFF, CP3 = OFF
#pragma config CPB = OFF, CPD = OFF, WRT0 = OFF, WRT1 = OFF
#pragma config WRT2 = OFF, WRT3 = OFF, WRTC = OFF
#pragma config WRTD = OFF, EBTR0 = OFF, EBTR1 = OFF, EBTR2 = OFF
#pragma config EBTR3 = OFF, EBTRB = OFF
int i;
void isr(void);
#pragma code isrcode = 0x0000008
void isr_direct(void)
{_asm GOTO isr _endasm}
#pragma code
#pragma interrupt isr
void isr(void) {
//外部入力割り込みの処理はここに記述
INTCON3bits.INT2IF = 0;
for(i=0; i<10; i++)
{
LATCbits.LATC1 = 1;
Delay10KTCYx(255);
LATCbits.LATC1 = 0;
Delay10KTCYx(255);
}
}
void main()
{
OSCCON = 0b01110000; //システムクロックを8MHZに設定
TRISA = 0b1111111; //ポートAをすべて入力に設定
TRISB = 0b11111111; //ポートBをすべて
TRISC = 0; //ポートCをすべて出力に設定
//ポートRB2の外部割込みON, 立上がりエッジでON, Bポートの抵抗プルアップOFF
OpenRB2INT(PORTB_CHANGE_INT_ON & RISING_EDGE_INT & PORTB_PULLUPS_OFF);
RCONbits.IPEN = 0; //割り込み優先制御OFF
INTCON3bits.INT2IE = 1;
INTCONbits.GIE = 1; //全割り込み許可
while(1);
}
しかし、スイッチを押しても割り込み処理に移行せず無反応のままです。
スイッチを押した時にINT2ピンに5V入力があることはテスターで確認したので、ソースコードの方に問題があるかと思います。
よろしくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
PIC18F2550のハードウェアマニュアルを調べてみました。
http://www.microchip.com/wwwproducts/Devices.asp …
の中で
[Documentation & Software]をクリックすると、
[PIC18F2455/2550/4455/4550 Data sheet]
が出てきますので、それをクリックして、データシートを
読み出してください。
9.2 INTCON Registers
項の先頭の右端にある、四角で囲まれた Note: に
User software should
ensure the appropriate interrupt flag bits
とありますので、割り込み処理の最後に、割り込みフラグを
ユーザープログラムで変更する必要があるようです。
この回答への補足
それはおそらく割り込み関数の中で割り込みフラグを0にしなければならないという意味だと思います。
この場合は割り込み関数の中で
INTCON3bits.INT2IF = 0;
という記述があり、フラグを消しているのでその点については問題は無いと思われますがいかがでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
電車で待機列の割り込みについ...
-
AKI-H8/3048Fでのタイマ割り込み
-
スーパーのレジで並んでいたら...
-
列に割り込んだ上文句言うやつ...
-
PICマイコンでエンコーダパルス...
-
pic 複数の割り込み関数 切り分...
-
CPU負荷率の安全な上限と計...
-
irqbalance って
-
auの携帯で「パケット通信中...
-
PICマイコン 割り込み実行時間...
-
ウォッチドッグタイマ(WDT)の...
-
VB6でSendKeyを利用したTab移動...
-
H8マイコンでの割り込み(シリ...
-
一定時間操作がなかったら、と...
-
C言語について(PWM)
-
volatileについて
-
Macターミナルで実行中のプログ...
-
プロダクションコードとは?
-
3のつく数字と3の倍数のみを表...
-
c言語のサイコロを100回振って...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スーパーのレジで並んでいたら...
-
電車で待機列の割り込みについ...
-
このレジの並び方は間違ってま...
-
pic 複数の割り込み関数 切り分...
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
【組込み】割り込み中のstatic...
-
USJでの割り込み
-
CPUの処理量を減らすコーデ...
-
マイコンSH-2の割り込みを用い...
-
VBAのDoEventsが上手く動きません
-
PICで内部タイマーを使わずカウ...
-
CPU負荷率の安全な上限と計...
-
プリントスクリーンの自動化
-
一定時間操作がなかったら、と...
-
割り込み処理について
-
複数の割込み処理からアクセス...
-
アセンブラのタイマー割り込み
-
電車乗車時、並んでいるのに割...
-
VB6でSendKeyを利用したTab移動...
おすすめ情報