我是PIC編程新手,我正在使用MPLAb。我有一個關於中斷的問題.. 所以我想要做什麼,當我按下一個按鈕,然後我想打開LED 0,如果我釋放按鈕,然後打開LED 1.我認爲我寫的代碼是有道理的但它不起作用。PIC編程中斷故障。
這是發生了什麼事。假設按下按鈕時,中斷引腳的初始狀態爲低電平(0)。然後,LED 0亮起,當我鬆開按鈕時,LED 1亮起。當我再次按下按鈕時,我期望LED 0亮起,但LED 1保持亮起,並且永不改變狀態。
我添加了最後一行來查看中斷引腳的狀態,一旦中斷爲高電平,它永遠不會將其更改爲低電平。請您告訴我什麼是我的誤解?
在此先感謝!
這裏是我的代碼:
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)'在中斷hanlder中是一個非常糟糕的主意。 – Olaf
我知道我不應該寫一個具有長處理類型的中斷。這個程序的目的是嘗試瞭解中斷是如何工作的,所以我編寫了可視化演示輸出(LED)。這是中斷驅動的代碼,主要功能基本上是空的。如果你能給我任何建議,我將不勝感激。 –