Текст программы начинается с шапки, в виде нескольких строк комментариев, со- держащей название программы, её версию и дату написания. Шапка позволяет отличать одну программу от другой. Программа содержит 18 строк.
1-я строка – псевдокоманда .include, которая присоединяет к основному тексту программы файл описаний микроконтроллера АТ tiny2313 "tn2313def . inc".
(Все файлы описаний находятся в стандартном пакете AVR-Studio. Для каждого МК – свой файл. Все стандартные файлы описаний находятся в директории «C:\ Program Files\Atmel\AVR Tools\AvrАssembler\Appnotes\.»)
При программировании нужно выбрать нужный файл и включить в программу. Если файл описаний находится в директории, то в команде include достаточно указать полное имя с расширением. Полный путь указывать не надо.
2-я строка .list – включение генерации листинга.
3-я строка.def –команда макроопределения, по которой регистру r16 присваивается имя temp (временный). Этот регистр будет временно хранить промежуточные величины. Выбран регистр r16, так как он имеет больше возможностей, чем r0 - r15 и может работать с командой ldiзагрузки в РОН числовой константы. При нескольких регистрах удобнее пользоваться их именами, а не номерами.
4-я строка .cseg –выбор программного сегмента памяти. Используя директиву и «указатель текущего адреса», транслятор автоматически размещает команды в памяти.
5-я строка .org –принудительное позиционирование указателя текущего адреса. Директива позволяет разместить фрагмент программы в конкретном месте рограммной памяти. В описываемой программе устанавливаем на «0».
6-я и 7-я строки. Инициализация стека. В регистр стека записывается адрес вершины стека (с.124 Белов) (файл описаний - ?)
Строки 8-12 – настройка портов ввода-вывода осуществляется с использованием регистра temp,в который сначала записываетсясоответствующий код, а затем он переносится в нужный регистр. На рисунке 3.1.16 PВ – ввод, PВ – вывод.
Строка 8. В регистр temp заносим нули.
Строка 9. Содержимое регистра temp переносим в регистр DDRD, который настраивает порт PORTD на ввод.
Строка 10. В регистр temp заносим единицы, т.е. записываем 1111 1111 = ff
Строка 11. Содержимое регистра temp переносим в регистр DDRВ, который настраивает порт PORTВ на вывод.
Строка 12. Чтобы потушить светодиод, на вывод РВ1 надо подать «1», для чего заносим в РВ во все разряды 111 1111, которые уже записаны в регистр temp.
Строка 13. Чтобы включить внутренние резисторы к выводам порта РD, записываем содержимое регистра tempв портPORTD. Внутренние резисторы исключают короткое замыкание источника питания через кнопку.
Строки 14 и 15 – отключение компаратора, для чего в регистр tempзаписывается число 0х80, а потом из регистра заносится ACSR, предназначенный для управления компаратором, Константа 0х80, занесённая в регистр ACSR, отключает компаратор.
Строки 1-15 – подготовительная часть программы по настройке МК.
Строки 16-18 – основной цикл программы.
Строка 16. Чтение содержимого порта PD (нажата или не нажата кнопка) и запоминание в регистре temp.
Строка 17. Пересылка содержимого регистра в порт РВ.
Строка 18. Оператор безусловного перехода передаёт управление по метке main.