Чтение данных из 16-ти битного регистра
- Войдите на сайт для отправки комментариев
Вс, 28/04/2013 - 16:09
Не получается считать значение из счетного регистра 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 или я что-то делаю неправильно? Кто знает подскажите.
За одно с регистром TCCR1B посмотрете как дуина по умолчанию устанавливает регистр TCCR1A.
Естественно что когда таймер настроен на 8-битный ШИМ (PWM, Phase Correct, 8-bit) старший регистр не задействован.
Круть! Максим спасибо, сам бы фиг допер.