gpt4 book ai didi

c - PIC 编程中断故障。

转载 作者:行者123 更新时间:2023-11-30 20:34:10 26 4
gpt4 key购买 nike

我是 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

最佳答案

您需要重置 ISR 函数中的中断标志,否则它将继续触发。请阅读数据表,如果有必要,它应该提到。所以只需添加 INTCONbits.INTF = 0;发送给 ISR,它应该按预期工作。

当设置 MCU 的任何外设或功能时,您应该仔细阅读数据表并使用寄存器的描述以及设置它们的内容。您还需要小心模拟端口,模拟端口通常默认为模拟端口而不是数字端口,从而导致中断未按预期触发或导致意外中断。最好首先设置 MCU 配置位,设置 TRIS 和模拟选择寄存器(ANSELx 或 ANSELAx 等),然后设置您要使用的任何外设的寄存器。然后设置中断,始终重置您要使用的所有中断标志,以从已知状态开始。

您还设置 TMR0IE = 1,这将执行相同的操作,触发中断。如果您不重置 TMR0 标志,它将继续触发,锁定您的 MCU 或减慢速度。

关于c - PIC 编程中断故障。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43149640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com