Чтение данных из 16-ти битного регистра

Evgen
Evgen аватар
Offline
Зарегистрирован: 10.06.2011

Не получается считать значение из счетного регистра TCNT1. Из старшего байта все время считывается 0.

Испльзую дуемиланову, причем пробовал с атмегой8 и атмегой328 и везде одно и тоже. Вот скетч:

byte h, l;

void setup()
{
  Serial.begin(9600);
  Serial.println(TCCR1B, DEC); // показывает как изначально настроен предделитель таймера 1 (64)
}
void loop()
{
  SREG&=~(1<<7); // запрещаем глобальные прерывания
  TCCR1B=0; // на всякий останавливаем таймер 1
  l=TCNT1L; h=TCNT1H; // все по правилам, считываем сначала младший затем старший байт счетного регистра
  TCCR1B=3; // обратно запускаем таймер 1 с предделителем 64 
  SREG|=(1<<7); // разрешаем глобальные прерывания
  Serial.print(l, DEC); Serial.println("  LOW"); // смотрим что считалось из младшего байта
  Serial.print(h, DEC); Serial.println("  HIGH"); // и из старшего (и вот тут считывается все время 0, че за...?)
  delay(1000);
}

Это глюк IDE или я что-то делаю неправильно? Кто знает подскажите.

maksim
Offline
Зарегистрирован: 12.02.2012

За одно с регистром TCCR1B посмотрете как дуина по умолчанию устанавливает регистр TCCR1A.

byte h, l;

void setup()
{
  Serial.begin(9600);
  Serial.println(TCCR1B, DEC); // показывает как изначально настроен предделитель таймера 1 (64)
  TCCR1A = 0;
}
void loop()
{
  SREG&=~(1<<7); // запрещаем глобальные прерывания
  TCCR1B=0; // на всякий останавливаем таймер 1
  l=TCNT1L; h=TCNT1H; // все по правилам, считываем сначала младший затем старший байт счетного регистра
  TCCR1B=3; // обратно запускаем таймер 1 с предделителем 64 
  SREG|=(1<<7); // разрешаем глобальные прерывания
  Serial.print(l, DEC); Serial.println("  LOW"); // смотрим что считалось из младшего байта
  Serial.print(h, DEC); Serial.println("  HIGH"); // и из старшего (и вот тут считывается все время 0, че за...?)
  delay(1000);
}

Естественно что когда таймер настроен на 8-битный ШИМ (PWM, Phase Correct, 8-bit) старший регистр не задействован.

Evgen
Evgen аватар
Offline
Зарегистрирован: 10.06.2011

Круть! Максим спасибо, сам бы фиг допер.