c语言 - 不了解 ATmega32 定时器延迟程序



我有以下程序…

"写一个程序连续切换PORTB的所有位,有一些延迟。使用Timer0,正常模式,没有预分频器选项。"

#include….
    void T0Delay()
    int main ()
    DDRB= 0xFF;
    while (1) {
        PORTB=0x55;
        T0Delay();
        PORTB=0xAA;
        T0Delay();
    }
void T0Delay ()
    {
        TCNT0=0x20;
        TCCR0=0x01;
        while ((TIFR&01)==0);
        TCCR0=0;
        TIFR=0x01;
    }

在"TODelay()"函数中,"while ((TIFR&01)==0)"语句的函数是什么?为什么这个循环设置TCCR0=0和TIFR=0x01?有人能解释一下这段代码吗?

语句while ((TIFR&01)==0);是整个循环。后面的两条语句不属于这个循环,在循环结束后执行。

这个循环的目的是等待直到TIFR的最低有效位被设置。假定它在某处被声明为易失性整数,并映射到控制输入端口的地址(否则该循环将永远不会终止)。

while ((TIFR&01)==0);为忙等待循环。它继续循环,直到表示计时器已过期的标志变为1。只有这样,流才会退出循环。

TIFR=0x01;是一个特殊的指令。它实际上清除了国旗;也就是说,它将标志设置为0而不是您可能期望的1

因此延迟函数设置定时器计数,启动定时器,然后忙忙碌碌地循环等待,直到定时器到达终点。之后,它清除计时器标志,允许再次使用计时器。

用循环检查整行,它不是以分号结束吗?这意味着循环体是一个空语句,并且用于循环。

赋值不是循环的一部分。

while循环继续检查并等待计时器溢出,一旦计时器溢出,它再次设置计时器,并返回

最新更新