
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関係サイトを探しても、割り込みでの遅れ時間については、ヒントがありませんでした。
相当な遅れは、あきらめるしかないのでしょうか?
ご存知の方、アドバイスをお願い致します。
No.1ベストアンサー
- 回答日時:
動作クロック等もわからないので、遅延時間の妥当性は何とも言えません。
ソースを見る限り、特に問題無さそうですが・・・
簡単な処理なのでアセンブラで書かれれば如何?
if文は後になるほど遅延するのは仕方ないですが、こんな場合はswitch文を使いましょう。
組込では、if文に比べてswitch文の方が高速処理なのは通説です。
アセンブルしたソースを眺めてみればわかります。
こんばんは。早速のご回答、ありがとうございました。
使用PIC:PIC18F1320 周波数40MHZ(実行10MHZ)です。
質問したプログラムで、トリガー信号から、1.5usecで、出力開始されています。
switch文にトライしましたが、うまく、コンパイルしません。
下記のGOTOの部分をswitch~caseで、ポートRB0、RB2の状態をbstatの状態で、割り込みパターンを
出力させたいと思っていますが、コンパイルできないで困っています。
switch文設定ができていないと考えています。
間違いがあれば、アドバイスをお願い致します。
void high_interrupt (void){
_asm
GOTO high_isr
_endasm
}
ADコンバータ使用なら、アナログ電圧設定で、複数波形が作成可能だが、非同期のため
使えないので、残念ですが、うまくいかないですね。
良い参考サイトでもあれば、あわせてご紹介をお願い致します。
よろしく、お願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
スーパーのレジで並んでいたら...
-
pic 複数の割り込み関数 切り分...
-
このレジの並び方は間違ってま...
-
PIC16F84でデジタルスピードメ...
-
マイコン C言語 割り込み処理...
-
volatileについて
-
picのタイマ1発振開始時間に関...
-
VBAのDoEventsが上手く動きません
-
電車で待機列の割り込みについ...
-
コールバック関数について
-
定周期での割り込み
-
VB6でSendKeyを利用したTab移動...
-
CPUの処理量を減らすコーデ...
-
Macターミナルで実行中のプログ...
-
C# シリアル通信でデータ受信...
-
TCP/IP通信時のサーバーからの受信
-
バックグラウンドのプロセスの...
-
Windows上で、シグナル(SIGTERM...
-
SQLの速度をあげるには・・・
-
「スイッチングハブのバッファ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
このレジの並び方は間違ってま...
-
電車で待機列の割り込みについ...
-
CPU負荷率の安全な上限と計...
-
PIC16F84Aから16F628Aの...
-
【組込み】割り込み中のstatic...
-
コールバック関数について
-
マイコン C言語 割り込み処理...
-
USB機器からのデータ受信による...
-
スーパーのレジで並んでいたら...
-
VB.NET スレッドからのイベント...
-
割り込みについて
-
一定時間操作がなかったら、と...
-
PICマイコンでエンコーダパルス...
-
CPUの処理量を減らすコーデ...
-
pic 複数の割り込み関数 切り分...
-
PICマイコン 割り込み実行時間...
-
ロータリーエンコーダがうまく...
-
SH7727(SH3-DSP)
-
VBAのDoEventsが上手く動きません
-
割り込みの入り方。考え方。
おすすめ情報