我又编写了下面的定时器程序
/* 测试定时器 */
#include <avr/io.h>
#define uchar unsigned char
#define SET_LED PORTA&=0xFE;
#define CLR_LED PORTA|=0x01;
int main(void)
{
uchar i, j=0;
DDRA = 0xFF;
// 配置T/C0
TCNT0 = 0; // T/C0开始值
TCCR0 = _BV(CS02) | _BV(CS00); // 预分频ck/1024,计数允许
while(1)
{
// 查询定时器方式等待1s
// 12000000/1024/256/45=1s
for(i=0;i<45;i++)
{
loop_until_bit_is_set(TIFR,TOV0);
//写入逻辑1,清零T0V0位
TIFR|=_BV(TOV0);
}
if(j)
{
SET_LED;
j=0;
}
else
{
CLR_LED;
j=1;
}
}
}
本应该是1s,可实际的定时时间是10多s |