极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9788|回复: 1

谁能解释一下这个灵异现象???

[复制链接]
发表于 2013-12-2 04:41:13 | 显示全部楼层 |阅读模式
32U4(Leonardo)5V工作电压  USB供电,想测试一下timer1的CTC模式,按下图公式算出1KHz对应的各寄存器参数:

代码如下
volatile unsigned long counter = 0;
volatile boolean tick = false;
volatile unsigned long time_end = 0;
unsigned long time_start = 0;

void setup(){
  delay(5000);
  
  TCCR1A = 0;     
  TCCR1B = 0b00001001;
  TCCR1C = 0;
  OCR1A = 7999;      // 1000
  //OCR1A = 15999;    //500
  TIMSK1 = 0x02;   
  sei();
  
  time_start = millis();
}


void loop(){
  if (tick)
  {
    Serial.print("time_start = ");
    Serial.print(time_start);
    Serial.print(", ");
    Serial.print("time_end = ");
    Serial.print(time_end);
    Serial.print(", ");
    Serial.print("minus = ");
    Serial.print(time_end - time_start);
    Serial.print(", ");
    Serial.print("counter = ");
    Serial.println(counter);
    tick = false;
  }
}


ISR(TIMER1_COMPA_vect){ 
    cli();
    
    if (counter++ == 500)
    {
        time_end = millis();
        tick = true;
        
        TCCR1B = 0;
    }
    
    sei();
}


运行结果如下:
time_start = 5000, time_end = 5250, minus = 250, counter = 501
这TM不是2KHz了吗?

谁能告诉我这是为什么?难道Atmel的手册写错了?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-12-2 15:55:48 | 显示全部楼层
没错,是你没看明白,那个频率是波的频率,波的频率要/2,就是公式里的2。
回复 支持 反对

使用道具 举报

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

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-10 01:49 , Processed in 0.063480 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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