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

标签 c avr avr-gcc

本质上,这段测试代码的目的是: *启动定时器(硬件定时器)- 打开两个 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/

相关文章:

c - 将 scanf 与 char 数组及其大小一起使用

python - 哈希表和 Python 字典有什么区别?

c++ - 使用 WINAPI 的复杂库依赖项目中未解析的外部符号

c - 关于嵌入式 C 中的定时器

c - ATtiny 编程功能 - 似乎卡住

c - 如何让 ld 添加指向某个部分的符号?

c - 在 C 程序中使用 printf() 两次

c - 为什么只有第一个中断起作用?

c - AVR atmega128串口通讯

c - 修改avr上函数的返回地址