我是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)。这是中断驱动的代码,主要功能基本上是空的。如果你能给我任何建议,我将不胜感激。 –