Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 275 где Rd — имя регистра общего назначения, а К — некая числовая кон станта. Команда andi выполняет операцию побитового «И» между содержи мым регистра и константой. Результат помещается в регистр Rd. Команда andi часто используется как операция наложения маски. Что в данном случае означает понятие «маска»? Для того, чтобы это объяс нить, я хочу немного отвлечься и обратиться к детективному жанру. Если точнее, я предлагаю вспомнить один из методов шифрования различных посланий. Помните заставку к фильму о Шерлоке Холмсе? На лист бумаги, на котором в хаотическом на первый взгляд порядке записаны случайные знаки, накладывается второй лист, в котором в определенных местах проделаны дырочки. При совмещении этих двух листов лишние знаки оказываются невидимыми, а сквозь дырочки мы видим символы, состав ляющие зашифрованное сообщение. Что-то подобное происходит при наложении маски с использованием двух двоичных чисел. Одно из этих чисел является маской для второго числа. При наложении маски лишние биты обнуляются, а остаются лишь те, которые несут нужную для нас информацию. В нашей программе наложение маски используется для того, чтобы из кода ноты выделить код тона или код длительности. Код тона занимает пять младших разрядов общего кода. Для выделения кода тона нужно про извести операцию побитового «И» между кодом ноты и маской. Маска в данном случае должна быть равна 0001 1111В (или в шестнадцатиричном виде — 1FH). Выделение кода тона происходит в строке 67 программы (см. листинг 5.17). В результате наложения маски три старших бита обнуля ются, а пять младших остаются без изменений. Для выделения кода дли тельности выбирается другое значение маски (см. строку 74). adiw _________________________________________________________ Шестнадцатиразрядное сложение. Позволяет прибавить к шестнадцатиразрядному числу некоторую числовую константу. Шестнадцатиразрядное значение помещается в регистровую пару. При этом может использоваться одна из следующих пар: R24:R25, R26:R27, R28:R29 и R30:R31. Команда имеет ограничение на величину константы. Константа может иметь значение 0 до 63. Команда имеет два параметра: ♦ первый параметр — это имя первого из регистров регистровой пары; ♦ второй параметр — это прибавляемая константа. По странной прихоти разработчиков данной версии Ассемблера, в качестве первого параметра нельзя использовать имена регистровых пар X, Y и Z, а также их половинок (например, XL или YH).
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==