Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств

178 Микроконтроллеры AVR от азов программирования... .def _________________________________________________________ Макроопределение. Эта команда позволяет присваивать различным регистрам микроконтроллера любые осмысленные имена, упрощающие чтение и понимание текста программы. В нашем случае нам понадобится один регистр для временного хранения различных величин. Выберем для этой цели регистр г16 и присвоим ему наименование temp от англий ­ ского слова temporary — временный. Данная команда выполняется в строке 3 (см. листинг 5.1). Теперь в любом месте программы вместо имени г16 можно применять имя temp. Вы спросите: а зачем это нужно? Да для наглядности и читаемости про ­ граммы. В данной программе мы будем использовать лишь один регистр, и преимущества такого переименования здесь не очень видны. Но пред ­ ставьте, что вы используете множество разных регистров для хранения самых разных величин. В этом случае присвоение осмысленного имени очень облегчает программирование. Скоро вы сами в этом убедитесь. Кстати, именно таким образом определены имена всех стандартных реги ­ стров в файле tn2313def . inc. . cseg _________________________________________________________ Псевдооператор выбора программного сегмента памяти. О чем идет речь? Как уже говорилось, микроконтроллер для хранения данных имеет три вида памяти: память программ (Flash), оперативную память (SRAM) и энергонезависимую память данных (EEPROM). Программа на Ассемблере должна работать с любым из этих трех видов памяти. Для этого в Ассемблере существует понятие «сегмент памяти». Существуют директивы, объявляющие каждый такой сегмент: ♦ сегмент кода (памяти программ) ..................................................... cseg; ♦ сегмент данных (ОЗУ) ........................................................................ dseg; ♦ сегмент EEPROM ................................................................................ eseg. После объявления каждого такого сегмента он становится текущим. Это значит, что все последующие операторы относятся исключительно к объявленному сегменту. Объявленный сегмент будет оставаться теку ­ щим до тех пор, пока не будет объявлен какой-либо другой сегмент. Только в сегменте кода Ассемблер описывает команды, которые затем в виде кодов будут записаны в память программ. В остальных двух сег ­ ментах используются директивы распределения памяти и директивы описания данных. Ну, к сегментам dseg и eseg мы еще вернемся. Сейчас же подробнее рассмотрим сегмент cseg. Так как команды в программной памяти должны располагаться по порядку, одна за другой, то их размещение удобно автоматизировать. Программист не указывает, по какому адресу в памяти должна быть расположена та либо иная команда. Программист просто последовательно пишет команды.

RkJQdWJsaXNoZXIy MTExODQxMg==