私はPICプログラミングを初めて使い、MPLAbを使用しています。私は中断に関する質問を持っています。 私は何をしたいのですか?ボタンを押すとLED 0が点灯し、ボタンを放してLED 1が点灯すれば意味があります。しかしそれはうまくいかなかった。PICプログラミング割り込みの誤動作。
ここでは何が起こりますか。ボタンが押されると、割り込みピンの初期状態がロー(0)であるとしましょう。その後、LED 0が点灯し、ボタンを離すとLED 1が点灯します。もう一度ボタンを押すと、LED 0は点灯していますが、LED 1はオンのままで、状態は決して変わらないと思います。
最後の行を追加して割り込みピンの状態を確認し、割り込みがハイになっても、決してlowに変更しません。私の誤解は何ですか?
ありがとうございます!あなたがISR機能の割り込みフラグをリセットする必要があるか、それだけでトリガ続ける
void interrupt ISR(void)
{
if(INTCONbits.INTF)
{
nextLED = 1;
LATC = Output_Code_Buffer[nextLED];
__delay_ms(250);
}
else
{
nextLED = 0;
LATC = Output_Code_Buffer[nextLED];
__delay_ms(250);
}
nextLED = INTCONbits.INTF + 2;
LATC = Output_Code_Buffer[nextLED];
__delay_ms(250);
}
// Interrupt Enable settings
INTCONbits.INTE = 1;
INTCONbits.TMR0IE = 1; // Enable TMR0 interrupts
INTCONbits.TMR0IF = 0; // Clear TMR0 interrupt flag
INTCONbits.GIE = 1; // Enable global interrupts
割込みハンドラの '__delay_ms(250)'は**非常に悪い考えです。 – Olaf
長い処理タイプの割り込みを記述しないでください。このプログラムの目的は、割り込みの仕組みを理解しようとしているので、視覚的提示出力(LED)を書いたのです。これは割り込み駆動型のコードであり、主な機能は基本的に空です。あなたが私に何か示唆を与えることができれば幸いです。 –