MPLAB C18で優先割り込みを使う基本形パターン
PIC18で使用できるプログラムの基本パターンは3つあるけど、今回のUSB-TXでは新機能の優先割り込みを使ってみます。連続したPPM信号の変換だけなら2番のPIC16互換割り込みでもよいのだけど・・・使用するUSB内蔵PICはPIC18だし。
1. 割込みを使わない場合
2. PIC16互換の割込みを使う場合(優先割込みを使わない)
3. 優先割込みを使う場合(PIC18の新機能)
PIC18で優先割込みを使うプログラム場合は以下のように、高優先割込みに関する記述と低優先割込みに関する記述が必要で、どちらも、割込みベクタの定義と割込み処理の定義から成っています。
優先割込み機能を有効にするためには、RCONレジスタのIPENビットに1をセットします。上の例では、メイン処理の最初にセットしています。それ以外のレジスタは、使う割り込みの種類によって設定します。
#include <p18f1320.h>
#pragma config OSC = HS
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config WDT = OFF
#pragma config LVP = OFF
void high_isr (void);
void low_isr (void);
// ==(1)== ここから高優先割込み関連の記述 ====
#pragma code high_vector=0x8
void high_interrupt (void) {
_asm
GOTO high_isr
_endasm
}
#pragma code
#pragma interrupt high_isr
void high_isr (void) {
/* ここに高優先割込み処理を記述する */
}
// ==(2)== ここから低優先割込み関連の記述 ====
#pragma code low_vector=0x18
void low_interrupt (void) {
_asm
GOTO low_isr
_endasm
}
#pragma code
#pragma interruptlow low_isr
void low_isr (void) {
/* ここに低優先割込み処理を記述する */
}
// ==(3)== ここからメイン処理の記述 ====
void main (void) {
RCONbits.IPEN = 1; // 優先割込み機能を使う
/* ここにメイン処理を記述する */
}
1. 割込みを使わない場合
2. PIC16互換の割込みを使う場合(優先割込みを使わない)
3. 優先割込みを使う場合(PIC18の新機能)
PIC18で優先割込みを使うプログラム場合は以下のように、高優先割込みに関する記述と低優先割込みに関する記述が必要で、どちらも、割込みベクタの定義と割込み処理の定義から成っています。
優先割込み機能を有効にするためには、RCONレジスタのIPENビットに1をセットします。上の例では、メイン処理の最初にセットしています。それ以外のレジスタは、使う割り込みの種類によって設定します。
#include <p18f1320.h>
#pragma config OSC = HS
#pragma config PWRT = OFF
#pragma config BOR = OFF
#pragma config WDT = OFF
#pragma config LVP = OFF
void high_isr (void);
void low_isr (void);
// ==(1)== ここから高優先割込み関連の記述 ====
#pragma code high_vector=0x8
void high_interrupt (void) {
_asm
GOTO high_isr
_endasm
}
#pragma code
#pragma interrupt high_isr
void high_isr (void) {
/* ここに高優先割込み処理を記述する */
}
// ==(2)== ここから低優先割込み関連の記述 ====
#pragma code low_vector=0x18
void low_interrupt (void) {
_asm
GOTO low_isr
_endasm
}
#pragma code
#pragma interruptlow low_isr
void low_isr (void) {
/* ここに低優先割込み処理を記述する */
}
// ==(3)== ここからメイン処理の記述 ====
void main (void) {
RCONbits.IPEN = 1; // 優先割込み機能を使う
/* ここにメイン処理を記述する */
}
コメント