void timer0_initial(void)
{
TCCR0A = 0x00; //停止定时器
TCNT0 = 0; //初始值
OCR0A = 60; //匹配值
TIMSK0 |= (1<<TOIE0); //中断允许
TCCR0A |= (1<<WGM01) | (1<<CS02) | (1<<CS00); //启动,CTC模式,1024分频
// TCCR0A |= (1<<CS02) | (1<<CS00); //启动,普通模式,1024分频
}
/*
T0溢出中断服务程序
*/
SIGNAL(SIG_OVERFLOW0)
{
uint8_t i=0;
i++;
if (i>=99)
{
flag_500ms = 1; //记满100个中断周期,500毫秒标志位置位
i = 0;
}
}
int main (void)
{
sei(); //开总中断
timer0_initial();
while (1)
{
if (1==flag_500ms)
{
//
}
else
{
//
}
}
}
从程序上感觉定时器只运行了一次,这一段程序有什么问题么?
刚接触AVR单片机,还不太了解。 |