极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 10046|回复: 2

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

[复制链接]
发表于 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);
    }
}

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

使用道具 举报

 楼主| 发表于 2015-6-19 23:29:33 | 显示全部楼层
补充一下,加上 TCCR1B |= 1 << WGM12; 也没效果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-6-20 00:04:24 | 显示全部楼层
自己回答下这个问题吧,原来是OCR1A 算错了
数值应该是 16M / 1024 = 15625
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-17 03:07 , Processed in 0.035245 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表