@kyklaed

Битовый сдвиг и установка режимов на МК atmega8?

Привет, подскажите. изучаю atmega8 - я только начал .
не пониманию как устанавливается режимы таймера итд

например вот под 16 битный таймер
TCCR1B |= (1 << WGM12); // установка режима - сброс по совпадению
TCCR1B |= (1 << CS12);//установим делитель. делитель частоты = 256

мы в один и тот же регистр заносим настройки только в разные биты. если посмотреть таблицу в даташит то
WGM12 -соответствует 0100
CS12 - соответствует 100

далее
TCCR1B |= (1 << CS12) равняется 0b00001000 - почему ? как это получилось ?
чему в данном случае равно 1 = 0001 ?
на сколько сдвигается ?
сначала выполняется действие в скобках потом TCCR1B =TCCR1B | (1 << CS12)
TCCR1B = 0b00000000
не понимаю как считать (1 << CS12)

далее
TCCR1B |= (1 << CS12); равняется 0b00001100 + после предыдущего сдвига
TCCR1B = 0b00001000
  • Вопрос задан
  • 259 просмотров
Решения вопроса 1
Ocelot
@Ocelot
WGM12 равен трём.
(1 << WGM12) равно 0b00001000 (единица, сдвинутая на три бита влево)
TCCR1B |= (выражение) это побитовое или, устанавливает в единицу те биты регистра TCCR1B, которые у правого операнда равны единице, а остальные не трогает. Например:
TCCR1B = 0b10101010;
TCCR1B |= 0b00001111;
теперь TCCR1B будет равен 0b10101111;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы