不懂ATmega32定时器延迟程序

use*_*573 2 c microcontroller avr atmega

我有以下程序......

"编写一个程序,以一定的延迟连续切换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;
    }
Run Code Online (Sandbox Code Playgroud)

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

squ*_*age 6

声明while ((TIFR&01)==0);是整个循环.后面的两个语句不是此循环的一部分,并在循环结束后执行.

此循环的目的是等到TIFR设置的最低有效位.据推测,这被声明为易失整数,并映射到控制输入端口的地址(否则此循环将永远不会终止).