※ ChatGPTを利用し、要約された質問です(原文:PICマイコン 割り込み実行時間 (遅延時間))
PICマイコンの割り込み実行時間について
このQ&Aのポイント
PICマイコンの割り込み実行時間について教えてください。
PICマイコン初心者ですが、外部割り込みの実行時間が遅くて困っています。トリガー信号からの遅れを少なくする方法を教えてください。
現在のプログラムでは、トリガー信号から約2usecの遅れがあります。この遅延時間を少なくしたいです。
PICマイコン 割り込みの実行時間について、教えてください。
PICマイコン初心者です。
いろんな方々のプログラム例を参照させてもらっています。
PIC18F1320 を使って、外部割り込みを試していますが、トリガー信号の立ち上が入るタイミングで、割り込み処理を行いますが、トリガー信号から、割り込み動作Hが立ち上がりのが、遅くて困っております。トリガー信号から、遅れが少なくなる方法を教えてください。下記に現在のプログラ C言語を示します。
・ポートRB1の外部割込 立ち上がりトリガー。
・ポートRB0、RB2の状態をbstatに入れてIF文で、出力RB6 Hを出力したい。
・トリガー立ち上がりから、約2usecも遅れてRB6がHに。遅延を出来るだけ少なくしたい。
・ if (bstat==0)時で約2usec、if (bstat==3)時で約4usecと差が出るのも、改善したい。
#pragma code high_vector=0x8 //高位レベル割り込み
void high_interrupt (void){
_asm
GOTO high_isr
_endasm
}
#pragma code //デフォルトコードセクションに戻る
#pragma interrupt high_isr //割り込み処理関数宣言
void high_isr (void){
INTCON3bits.INT1IE=0; //外部割込みINT1の禁止
// INTCONbits.PEIE=0; //低位割り込み禁止
INTCONbits.GIE=0; //全割り込み禁止
INTCON3bits.INT1IF=0; //INT1の割り込みフラグをリセット
if (bstat==0){
LATBbits.LATB6=1; //
Delay1TCY(); //wait
Delay1TCY(); //wait
Delay1TCY(); //wait
LATBbits.LATB6=0; //
Delay1TCY(); //wait
Delay1TCY(); //wait
Delay1TCY(); //wait
}
else if(bstat==1){
LATBbits.LATB6=1; //
Delay1TCY(); //wait
Delay1TCY(); //wait
LATBbits.LATB6=0; //
Delay1TCY(); //wait
Delay1TCY(); //wait
}
else if(bstat==2){
LATBbits.LATB6=1; //
Delay1TCY(); //wait
LATBbits.LATB6=0; //
Delay1TCY(); //wait
}
else if(bstat==3){
LATBbits.LATB6=1; //
Delay1TCY(); //wait
LATBbits.LATB6=0; //
Delay1TCY(); //wait
}
INTCON3bits.INT1IE=1; //外部割込みINT1の許可
// INTCONbits.PEIE=1; //低位割り込み許可
INTCONbits.GIE=1; //全割り込み許可
}
// メインプログラム
void main (void){
TRISB = 0b00000111; // RB0/1/2:input
TRISA = 0xFF; // ALL A input
// PORTB = 0;
PORTA = 1;
bstat= ((PORTBbits.RB0+0)+(PORTBbits.RB2*2));// RB0とRB2の状態を読み込み
OpenRB1INT(PORTB_CHANGE_INT_ON & // ポートRB1の外部割込みオン
RISING_EDGE_INT & //立上りエッジでオン
PORTB_PULLUPS_OFF //Bポートの抵抗プルアップOFF
);
RCONbits.IPEN=1; //割り込み優先順位制御ON(0:優先順位制御OFF)
INTCON3bits.INT1IP=1; //INT1の割り込みを高順位割り込みにセット
INTCON3bits.INT1IE=1; //INT1の割り込みを許可
INTCON2bits.INTEDG1=1; //立上がりエッジでオン
// INTCONbits.PEIE=1; //低位割り込み許可
INTCONbits.GIE=1; //全割り込み許可
while (1)
PIC関係サイトを探しても、割り込みでの遅れ時間については、ヒントがありませんでした。
相当な遅れは、あきらめるしかないのでしょうか?
ご存知の方、アドバイスをお願い致します。
お礼
こんばんは。早速のご回答、ありがとうございました。 使用PIC:PIC18F1320 周波数40MHZ(実行10MHZ)です。 質問したプログラムで、トリガー信号から、1.5usecで、出力開始されています。 switch文にトライしましたが、うまく、コンパイルしません。 下記のGOTOの部分をswitch~caseで、ポートRB0、RB2の状態をbstatの状態で、割り込みパターンを 出力させたいと思っていますが、コンパイルできないで困っています。 switch文設定ができていないと考えています。 間違いがあれば、アドバイスをお願い致します。 void high_interrupt (void){ _asm GOTO high_isr _endasm } ADコンバータ使用なら、アナログ電圧設定で、複数波形が作成可能だが、非同期のため 使えないので、残念ですが、うまくいかないですね。 良い参考サイトでもあれば、あわせてご紹介をお願い致します。 よろしく、お願い致します。