Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino Atmega8 16位计数器的读取总是返回8位值_Arduino_Avr - Fatal编程技术网

Arduino Atmega8 16位计数器的读取总是返回8位值

Arduino Atmega8 16位计数器的读取总是返回8位值,arduino,avr,Arduino,Avr,我试图读取Atmega8的16位计数器,但输出永远不会>255。Atmega8配置为Arduino。我知道它必须一次读8位,但它似乎不起作用。查看readconder()函数中的代码,以及Serial.println的输出 #include <Arduino.h> #include <avr/io.h> #include <string.h> #define IN_BUF_LEN 65 #define OUT_BUF_LEN 128 // Pin 13 h

我试图读取Atmega8的16位计数器,但输出永远不会>255。Atmega8配置为Arduino。我知道它必须一次读8位,但它似乎不起作用。查看readconder()函数中的代码,以及Serial.println的输出

#include <Arduino.h>
#include <avr/io.h>
#include <string.h>

#define IN_BUF_LEN 65
#define OUT_BUF_LEN 128

// Pin 13 has an LED connected
int pinLed = 13;

char cmdBuf[IN_BUF_LEN];
char outBuf[128];

char *token;

void readCounter(){

  uint8_t count1, count2;
  uint16_t count;

  /* Disable interrupts */
  noInterrupts();

  count = TCNT1;

  count1 = TCNT1H;
  count2 = TCNT1L;  

  // enable interrupts
  interrupts();

  snprintf(outBuf, OUT_BUF_LEN, "Count:%d, %d, %d", count,count1,count2);
  Serial.println(outBuf);
}

// the setup routine runs once when you press reset:
void setup() {
  // initialize the digital pin as an output.
  pinMode(pinLed, OUTPUT);
  Serial.begin(19200);

  // Turn on the counter, Clock on Rise
  TCCR1B |= (1 << CS12) | (1 << CS11) | (1 << CS10);
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(pinLed, HIGH);
  delay(50);
  digitalWrite(pinLed, LOW);

  int bytesRead = Serial.readBytesUntil(10, cmdBuf, IN_BUF_LEN - 1);
  cmdBuf[bytesRead] = 0;

  if (bytesRead > 0){
    token = strtok(cmdBuf, " ");

    if(!strcasecmp(token, "readCounter")){
      readCounter();
    }
  }

}

验证
TCCR1A
TCCR1B
的值,以确保计时器1未处于8位模式,如8位PWM或CTC,其最大值小于256。

TCCR1A和
TCCR1B
包含什么?TCCR1B是十进制7,因为它是在setup()函数中设置的。但是TCCR1A我没有设置任何值,它是1。意味着计数器1被配置为8位PWM。将其设置为0解决了我的问题。谢谢@Ignacio
Count:30, 0, 30
Count:130, 0, 130
Count:250, 0, 250
Count:236, 0, 236
Count:72, 0, 72