Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

1 74 Часть 11. Программирование микроконтроллеров АVR на ассемблере Этот алгоритм, как и предыдущий, оформлен в виде законченной программы (файл migalka_var2 .asm), которую вы можете найти в архиве по адресу, указанному во вве­ дении. Там же помещен и третий вариант программы мигания (файл migalka_ varЗ.asm) - как некий итог к теме команд передачи управления и проверки­ пропуска. Этот вариант реализует переключение по нажатию кнопки: первое нажа­ тие включает мигание, второе - выключает. Для запоминания текущего состояния (мигаем или нет) использован бит т регистра SREG, специально предназначенный для хранения битов и отличающийся тем, что он не может быть изменен никакими командами, кроме специально для этого предназначенных (а значит, не может быть случайно испорчен). Для работы с этим битом мы используем команды его сбро­ са/установки (clt / set), а также команды ветвления программы по его состоянию (brtc / brts). К оманды логических операци й Команды логических операций составляют важную часть функциональности любо­ го компьютера. Значительная доля функций процессора осуществляется именно через логические операции с регистрами (так же, как и через операции с битами, о которых далее). Краткий ликбез по простейшим логическим операциям примени­ тельно к электронике вы найдете в прwюжении 1 . Логические операции применимы только к РОИ. В этой группе представлены все стандартные логические операции: побитовое and (И), or (ИЛИ) и eor (Исключаю­ щее ИЛИ), а также перевод в обратный код сот и в дополнительный neg (обратите внимание, что операции инверсии битов соответствует команда сот, а не neg). С помощью этих операций можно образовать любые другие логические функции, если это требуется. Отметим, что две команды, работающие с константами : andi и ori, применимы лишь к старшим РОИ, начиная с rl б . ПОДРОБНОСТИ Подчеркнем , что все эти операции работают именно с отдельными битами : операции, возвращающие логическое значение (как , к примеру, функция Логическое ИЛИ , обо­ значаемая в языке С как « 1 1 », которая возвращает единицу, если хотя бы одно вы­ ражение не равно нулю) , в ассемблере не представлены, что , конечно, не мешает вам при необходимости их организовать самостоятельно. Поэтому в дальнейшем под, к примеру, операцией ИЛИ всегда будет подразумеваться Побитовое ИЛИ , а не Логи­ ческое ИЛИ в строгом смысле этого слова (подробнее об этом рассказано в приложе­ нии 1) . Составление программ в терминах комбинационной логики для МК нехарактерно, наиболее часто команды логических операций выполняют маскирование отдельных битов или их групп : так, операция andi temp, оьо о о о 1 1 1 1 шую позволит оставить млад­ тетраду переменной temp без изменений, а старшую - обнулить. Наоборот, команда ori temp , оьоо о о 1 1 1 1 позволит оставить старшую тетраду без изменений, а в младшей все биты установить в единичное состояние. Установка или сброс отдельных битов вообще-то делается с помощью команд сле­ дующей группы, но можно делать это и посредством логических операций по маске (о битовых масках рассказано в следующем разделе) :

RkJQdWJsaXNoZXIy MTExODQxMg==