gpt4 book ai didi

c - AVR C 编程 - 为什么 while 循环之后的代码没有执行?

转载 作者:行者123 更新时间:2023-11-30 20:38:25 24 4
gpt4 key购买 nike

本质上,这段测试代码的目的是:*启动定时器(硬件定时器)-打开两个 LED -等到计时器结束 -关闭两个 LED -延迟0.9s -重新开始。

    for (;;) //forever
{
PORTB &= ~_BV(PINB7); //Turn OFF GREEN LED

_delay_ms(900); //RED LED stay off for 0.9s

timer_two(); // start 5 second timer

while(!(TIFR1 & _BV(OCF1A))) //WHILE 5 second timer flag is not set
{
PORTB |= _BV(PINB7); //Turn on GREEN LED
PORTA |= _BV(PINA6); //Turn on RED LED
} //leave while loop when five second timer flag is set

PORTA &= ~_BV(PINA6); //Turn off RED LED #THIS DOESN'T HAPPEN#

}
<小时/>

但是,按照原样编写的代码,两个 LED 都会亮起,但只有绿色 LED 熄灭。绿色 LED 继续按我的预期打开和关闭。

尽管它明显退出了 while 循环(因为它关闭了绿色 LED),但它之后似乎没有执行任何操作。

我在这里错过了一个基本技巧吗?

(代码是在 Windows 上通过 avr-gcc 为 AVR、atmega644p 编译的)

最佳答案

现在已经解决了。

由于计时器创建了中断,LED 似乎根据计时器闪烁。然后程序将重新启动,因为没有给出中断处理程序。这将重置计时器启动前设置的 LED。

禁用所有中断可以使代码正常运行。cli();//禁用中断

关于c - AVR C 编程 - 为什么 while 循环之后的代码没有执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29066654/

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