Программируем по настоящему. Загадочные регистры

Программируем по настоящему. Загадочные регистры

Немного о том, что знают настоящие не “ардуино-зависимые” программисты о микроконтроллерах

И еще о том, зачем в школе мучают булевой алгеброй

Регистры процессора (микроконтроллера) — блок ячеек памяти, образующий сверхбыструю оперативную память внутри процессора. Есть регистры, используемые самим процессором для вычислений, например, при выборке из памяти очередной команды она помещается в регистр команд, а при выборке переменных они помещаются в регистры операндов.

Но в микроконтроллере есть ещё и другие регистры – хранящие настройки разных периферийных устройств. С ними в основном и имеет дело программист. Например регистр PORTB, хранящий состояние выводов (пинов), или регистр DDR, хранящий настройки, находятся ли выводы (пины) в состояние входа или выхода.

 

Регистр – это служебная очень быстрая память, например ячейки по 8, 16 бит, к которой можно обратиться по адресу. В МК работает программа, которая управляет его функционированием в соответствии с настройками, хранящимися в этих регистрах. (Например, частота ЦПУ, скорость обмена по СОМ порту – UART и проч.)

Конфигурировать регистры будем булевыми операциями – AND (&) и OR(|).

Ну, говорить о том, что представлять содержание регистра удобнее всего в шестнадцатеричной или двоичной системе не будем.

Также умолчим о возможности калькулятора (вид->инженерный) переводить числа между разными системами

.

Вот таблица истинности – правила двоичной арифметики, ну это уж почти всем известно

Ну раз регистр это просто ячейка, например, из 8 бит, то выставим в регистре с именем PORTB восемь единичек:

Или все нули:

А теперь, как выставить 1 в первом бите (обратите внимание на нумерацию битов в регистре – начинается 0), не изменив состояние других – при помощи OR (операция выполняется побитово):

Как же выставить 0 в любом бите – при помощи AND

Выставляем 0 в первом бите, не изменив состояние других – при помощи AND (операция выполняется побитово):

Вот целый курс по программированию МК AVR “правильно” таким hard core способом, который в общем то и используют настоящие разработчики (customelectronics.ru)

Зажжем диод на ардуино, заодно попрактикуемся с регистрами.

Заглянув в datasheet на микроконтроллер ATmega8 семейства AVR (да, да, именно такой и в вашей ардуине), в ужасе ничего не понимаешь понимаешь, что выходы соответствуют трем портам B, C, D – PB0-5, PC0-5, PD0-7. В Arduino эти названия переименованы в цифровые выводы D0-D13 и аналоговые входы A0-A5.

Выводы управляются регистрами PORTх и DDRх.

Например, вывод PB5 управляется пятым битом в регистрах PORTB (состояние вывода – 0 или 1, 0В или 5В) и DDRB (настройка вывода – на вход(0) и выход(1));

Итак, чтобы подать 1 (5В) на 13 пин ардуино (PB5):

Вот так просто

Leave a Reply

Your email address will not be published. Required fields are marked *