gpt4 book ai didi

c - RBIE 中断仅工作一次 - PIC16F877A

转载 作者:行者123 更新时间:2023-11-30 16:22:48 24 4
gpt4 key购买 nike

在我的代码中,有两个中断,一个来自 TMR0 溢出,另一个是按下按钮时。

这是 MikroC 中的代码:

int compt = 0;
int seconds = 10 ;
int enable = 0;

void interrupt(){

if (INTCON.INTF) {
PORTD = 9;
enable = 1;
seconds = 10;
INTCON.INTF = 0;
}

if (INTCON.TMR0IF) {
compt++;
INTCON.TMR0IF = 0;
TMR0 = 0x06;
}
}


void main() {

TRISB = 0x01;
PORTB = 0;

PORTD = 0;
TRISD = 0x00;


INTCON = 0xB0;
OPTION_REG = 0x44;
TMR0 = 0x06;

while(1){

if (compt == 625){
if (enable) seconds--;
compt = 0;
}

if (seconds > 0 && enable == 1) {
PORTD = seconds;
PORTB.RB1 = 1;
} else {
enable = 0;
PORTB.RB1 = 0;
PORTD = 0;
}

}

}

我试图用我的代码实现的目标如下图所示:

enter image description here

当我按下其中一个按钮时,倒计时开始,LED 灯会亮起,直到倒计时结束,如果用户在倒计时仍未达到 0 时按下按钮,则会重新开始,直到倒计时达到 0再次,然后 LED 应关闭。

我在这里面临的是,RBIE 的中断只起作用一次,当我第二次按下按钮时,什么也没有发生。

我不确定 TMR0F 是否与此有关,尝试了很多方法,但无法使其工作。

我希望你能看到我没有注意到的东西,并帮助我。

最佳答案

发布的代码使用 MikroC 进行编译时不会出现警告或错误。

代码使用 MLPAB v8.92 中的模拟器运行,并且当使用模拟器激励来断言 INT0 中断时,每次都会正确处理。

您的电路图看起来像是使用 Proteus 创建的,也许该模拟器的工作方式存在问题。

我能找到的唯一可疑的设置是 PORTB 启用了弱上拉,但您的电路图在 INT0(RB0) 引脚中具有 10K 欧姆下拉。

我建议将 OPTION_REG 的第 8 位设置为 1 以关闭 PORTB 上拉电阻。

抱歉,我的答案不太明确,但我无法从发布的信息中重现您的问题。

这个问题似乎是在 StackExchange 上提出的也。

关于c - RBIE 中断仅工作一次 - PIC16F877A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54280535/

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