【发布时间】:2017-03-31 21:04:21
【问题描述】:
我是 PIC 编程新手,我正在使用 MPLAb。我有一个关于中断的问题.. 所以我想做的是,当我按下按钮时,我想打开 LED 0,如果我松开按钮,然后打开 LED 1。我认为我编写的代码是有道理的,但它没有用。
这就是发生的事情。假设按下按钮时,中断引脚的初始状态为低(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)在中断处理程序中是一个非常的坏主意。 -
我明白我不应该写一个长处理类型的中断。这个程序的目的是我试图理解中断是如何工作的,所以我写了视觉呈现输出(LED)。这是中断驱动的代码,主函数基本上是空的。如果您能给我任何建议,我将不胜感激。
标签: c embedded interrupt pic microchip