Белов, А.В. Микроконтроллеры AVR: от азов программирования до создания практических устройств
Шаг 5. Переходим непосредственно к разработке устройств и программ 179 А уже транслятор автоматически размещает их в памяти. Для этого используется понятие «указатель текущего адреса». Указатель теку щего адреса не имеет отношения к регистру адреса микроконтроллера и вообще физически не существует. Это просто понятие, используемое в языке Ассемблер. Указатель помогает транслятору разместить все команды программы по ячейкам памяти. По умолчанию считается, что в начале программы значение текущего указателя рано нулю. Поэтому первая же команда программы будет раз мещена по нулевому адресу. По мере трансляции программы указатель смещается в сторону увеличения адреса. Если команда имеет длину в один байт, то после ее трансляции указатель смещается на одну ячейку. Если команда состоит из двух байтов — на две. Таким образом, размеща ются все команды программы. •org _________________________________________________________ Принудительное позиционирование указателя текущего адреса. Иногда необходимо разместить какой-либо фрагмент программы в про граммной памяти не сразу после предыдущего фрагмента, а в конкретном месте программной памяти. Например, начиная с какого-нибудь заранее определенного адреса. Для этого используют директиву org. Она позволяет принудительно изменить значение указателя теку щего адреса. Оператор org имеет всего один параметр — новое значение указателя адреса. К примеру, команда . org 0x10 установит указатель на адрес 0x10. Транслятор автоматически следит, чтобы при перемеще нии указателя ваши фрагменты программы не налезали друг на друга. В случае несоблюдения этого условия транслятор выдает сообщение об ошибке. В нашей программе команда позиционирования указателя применя ется всего один раз. В строке 5 указатель устанавливается на нулевой адрес. В данном случае директива org имеет чисто декларативное значе ние, так как в начале программы значение указателя и так равно нулю. Операторы Idi _________________________________________________________ Загрузка в РОН числовой константы. В строке 6 программы (листинг 5.1) при помощи этой команды в регистр temp (гіб) записы вается числовая константа, равная максимальному адресу ОЗУ Эта кон станта имеет имя RAMEND. Ее значение описано в файле tn2313def . inc. В нашем случае (для микроконтроллера ATtiny2313) значение RAMEND равно $DF.
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==