seagatecm 发表于 2015-6-19 23:07:54

请教一个定时器比较中断的问题

本帖最后由 seagatecm 于 2015-6-19 23:43 编辑

最近在学习定时器的用法,写了个程序测试发现和预想的不一样,请教下大家是怎么回事:
这里是想实现一个led定时闪烁的效果:F_CPU是16M,1024预分频。

void setup() {
    pinMode(13, OUTPUT);
   
    cli();
    TCNT1 = 0;
    TCCR1A = 0;
    TCCR1B = 0;
    OCR1A = 1;
   
    TCCR1B |= 1 << CS12 | 1 << CS10;
    bitSet(TIMSK,OCIE1A);
    sei();
}

int flag = 0;

ISR(TIMER1_COMPA_vect) {
    TCNT1 = 0;
    if (flag == 0)
    {
      flag = 1;
      digitalWrite(13, HIGH);
    }
    else
    {
      flag = 0;
      digitalWrite(13, LOW);
    }
}

运行的结果是灯亮了后一直就不会熄灭,感觉是中断只发生了一次。

seagatecm 发表于 2015-6-19 23:29:33

补充一下,加上 TCCR1B |= 1 << WGM12; 也没效果

seagatecm 发表于 2015-6-20 00:04:24

自己回答下这个问题吧,原来是OCR1A 算错了
数值应该是 16M / 1024 = 15625
页: [1]
查看完整版本: 请教一个定时器比较中断的问题