Задать вопрос
@HikKira

Почему биты в регистре архитектуры AVR заносяться именно посредством сдвига 1 на этот бит влево?

Здраствуйте! Изучаю AVR и не могу понять этой сути. Пока принял, как данность, что заностить эти биты нужно так, но хотелось бы разобраться почему.... Немного сбивает тот факт, что я не понимаю, почему нельзя занести этот бит в регистр без сдвига, зачем это придумано.... Вот пример занесения бита U2X в регистр UCSRA (это изучение USART)
UCSRA |= (1<<U2X);
Заранее спасибо!
П. С. даташит немного читал, но не нашел нужной информации
  • Вопрос задан
  • 169 просмотров
Подписаться 1 Средний 4 комментария
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
почему нельзя занести этот бит в регистр без сдвига, зачем это придумано
UCSRA |= (1<<U2X);

В заголовочных файлах U2X определён как "номер бита U2X в регистре UCSRA", т.е. 1.
Если бы U2X был определён как "битовая маска поля U2X в регистре UCSRA" (т.е. 2), то все бы писали UCSRA |= U2X;. В ассемблерном коде avr оба эти варианта превратятся в инструкцию sbi UCSRA, 1, устанавливающую бит в регистре по номеру.

Имея номер бита перевести его в битовую маску гораздо легче, чем наоборот, из маски вывести номер бита (который, в общем случае, может быть и не один), я думаю, что отчасти поэтому у программистов работающих с железом есть тенденция определять поля регистров через номера битов.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы