Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава б. Основы программирования МКАVR 125 Директивы Кроме собственно команд, в ассемблерной программе могут встречаться директивы компилятора. Их предостаточно, но самых употребительных, которые есть практи чески в каждой программе, три : . de f (definitions), . equ (equvalent) и . include. Пер вые две предназначены для определения имен пользовательских переменных и констант, соответственно (обратите внимание на точку перед именем директивы): . equ rnax_value = $ 1 1 ; константа max_value = 17 . def temp = rl 6 ; регистр rl 6 есть переменная temp . def counter = r05 ; регистр r05 есть переменная counter Эти определения в целях структурирования программы обычно располагают в на чале текста. Только учтите, что никаких проверок, кроме синтаксических, тут не производится, потому возможно объявить два разных имени для одного регистра, и они будут восприниматься как синонимы: . def temp = rl 6 ; регистр rl6 есть переменная temp . def counter = r l 6 ; регистр r l 6 есть переменная counter Изменение temp будет автоматически означать изменение counter и наоборот. Ино гда этим пользуются, если в разных частях программы один регистр применяется для разных по смыслу значений (и вы можете встретить примеры этого в фирмен ных «аппнотах») . В общем случае такую возможность советую использовать лишь в исключительных случаях - слишком много ошибок можно наделать. При нали чии в программе такого двойного определения avrasm2 будет выдавать предупреж дение (waming), хотя компиляции это не помешает. С помощью директивы . equ, вообще говоря, можно определять достаточно слож ные выражения, но этим пользуются редко - гораздо чаще ее применяют для оп ределения переменных, которые располагаются не в регистрах, а в области SRAM. Например, следующая последовательность директив и команд (листинг 6 . 1 ) запи шет содержимое регистра counter в SRAM по адресу $ 60 (для «наших» моделей - это первый свободный адрес после занятых адресами регистров) . . equ counter addr = $ 60 . def counter = rl 6 clr ZH ldi ZL , counter_addr st Z , counter Все принятые в технических описаниях Atmel наименования регистров и прочие необходимые константы вводят точно таким же способом и собирают в специаль ных файлах определений с расширением . i nc, о которых мы уже упоминали, - та кие файлы придаются к каждой модели контроллера (например, tn231 Зdef. inc -для
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==