|
|
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
|