首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么TCNT1不指望Atmega328呢?

为什么TCNT1不指望Atmega328呢?
EN

Stack Overflow用户
提问于 2018-09-10 02:28:46
回答 1查看 588关注 0票数 0

我有以下代码的Arduino与Atmega328和一个常见的16x2LCD。液晶屏工作正常,但始终显示定时器1计数器TCNT1的起始值"333“。为什么?我一遍又一遍地看了328的数据表,但我还是不明白。

代码语言:javascript
复制
    #include <LiquidCrystal.h>

    const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
    LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

    const int lcdContrastPin = 6, lcdBackligthPin = 10;

    void setup() 
    {
      // tutn on LCD backlight and contrast
      pinMode(lcdContrastPin, OUTPUT);
      pinMode(lcdBackligthPin, OUTPUT);

      // fine-tuning contrast could be done by PWM on lcdContrastPin
      digitalWrite(lcdContrastPin, LOW);
      digitalWrite(lcdBackligthPin, HIGH);

      lcd.begin(16, 2);

      // configure Timer1
      TCCR1A = 0; // no waveform generation
      TCCR1B = 0x00000010; // frequency divider 8 (i.e. counting with 2 MHz)
      TCCR1C = 0;
      TIFR1 = 0x00100000; // clear Input Capture Flag
      TCNT1 = 333;
    }

    void loop() 
    {
      int currentTimerValue = TCNT1;

      lcd.setCursor(0, 0);
      lcd.print("TCNT1=");
      lcd.print(currentTimerValue);
      lcd.println("      ");

      delay(50); 
    } 
EN

回答 1

Stack Overflow用户

发布于 2018-09-10 02:50:24

愚蠢的我!在意识的疏忽中,我把0x00000010作为二进制数,而不是十六进制。因此,我将所有时钟选择位设置为0,这意味着计时器停止。

将0x00000010替换为0b00000010 (真正的二进制数)后,现在一切正常:

代码语言:javascript
复制
      TCCR1B = 0b00000010; // frequency divider 8 (i.e. counting with 2 MHz)
      TCCR1C = 0;
      TIFR1 = 0b00100000; // clear Input Capture Flag
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52247452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档