Ассемблер AVR для начинающих (первый шаг)

Повышение квалификации

Мариуполец, старший преподаватель электроники ПГТУ, радиолюбитель, Сергей Петрович Сокол US9IFW, начальник университетской коллективки US8IWB. Он является не только специалистом по микроконтроллерам, но и пропаганидистом современных знаний по ним. Достаточно полистать журнал "Радио", в котором его статьи печатаются с завидным постоянством. Представляем материалы с его сайта.

alt

Прежде, чем приступить непосредственно к изучению программирования, необходимо выполнить ряд подготовительных операций: собрать макетную плату и установить необходимое ПО. Итак, начнем по-порядку.

В качестве базового контроллера для экспериментов я выбрал наиболее доступный и дешевый на данный момент ATtiny13. Он имеет всего восемь выводов и 1 кБайт Flash-памяти, но для изучения базовых операций его будет более чем достаточно.

Схема для экспериментов представлена на рисунке 1.

alt
Рисунок 1 - Схема платы для экспериментов


Центральным элементом ее является, как уже было сказано, контроллер DD1 типа ATtiny13. Питание схемы и программирование контроллера осуществляется при помощи разъема XS1. Распиновка его зависит от применяемого программатора. В качестве такого программатора рекомендую использовать USBasp, описанный мною в предыдущих статьях.

Конденсаторы С1 и С2 - для фильтрации помех по питанию. Кнопки SB1 и SB2 - любые без фиксации. Резисторы R2-R5 - токоограничительные. Могут быть выбраны из диапазона 220-390 Ом. Резистор R1 - переменный сопротивлением 1-20 кОм. Он служит для изменения напряжения, подаваемого на вход АЦП контроллера. Светодиоды LED1 и LED2 любого цвета и диаметра. Все элементы подключены таким образом, чтобы задействовать альтернативные функции контроллера, поэтому нежелательно вносить изменения в схему.

Теперь, что касается программной части. Многие рекомендуют для программирования на ассемблере использовать пакет "AVR Studio", выпускаемый самой фирмой Atmel, и распространяемый бесплатно. Рекомендации эти обоснованы: подсветка ключевых слов, справка, отладочный механизм - все эти приятные мелочи имеются в наличии. В качестве альтернативы я использую максимально облегченный вариант, который предлагает Ю. Ревич в своей книге "Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера" (СПб.: БХВ-Петербург, 2008 - 384 с.).

Не вдаваясь в подробности, что откуда взялось, выкладываю сюда архив с необходимым ПО. Скачать его можно здесь. Объем его крайне невелик, хотя в век широкополосных каналов интернета это практически не имеет значения. Архив можно распаковать в любую папку.
Итак, что же найдет любопытный пользователь, заглянув в полученную папку "asm"? Рассмотрим все по-порядку. В папке "Appnotes" располагаются файлы двух типов: с расширениями "inc" и "asm". Файлы "inc" содержат в себе информацию о контроллерах Atmel, с которыми может работать используемый здесь транслятор языка ассемблер. Имя файла совпадает с названием контроллера. Например, для нашей платы понадобится "tn13def.inc", но об этом позже. Файлы "asm" содержат примеры кодов, написанных инженерами фирмы Atmel, и выполняющих различные типовые операции. Для разнообразия их можно просмотреть, но использовать будем только самостоятельно разработанные алгоритмы (иначе, какие ж мы программисты?).

В папке "asmedit" находится редактор для набора программ на ассемблере. В принципе, для этих целей можно использовать произвольный текстовый редактор, даже обычный блокнот, но предлагаемый здесь удобнее, поскольку имеет подсветку некоторых команд, а также кнопки, позволяющие производить ассемблирование прямо из окна программы.
Файл avrasm32.exe является транслятором языка ассемблера. Именно он преобразует написанную нами программу в hex-файл, который может быть зашит непосредственно в микроконтроллер.

Файл build.bat представляет собой пакетный файл, который указывает опции ассемблирования для программы avrasm32.exe. Рассмотрим его структуру подробнее. В приведенном примере, скачанном читателем с сайта, в нем написан следующий текст:

"F:\Prog\AVR\asm\avrasm32 -fI %F:\Prog\AVR\asm\Nokia3410\main.asm
pause"

В принципе, структура его понятна интуитивно, но на всякий случай поведаю поподробней. Итак, сначала указывается путь, по которому находится файл avrasm32. У меня он расположен по пути "F:\Prog\AVR\asm\". Вы же указывайте ту папку, куда распаковали архив. Далее идут опции ассемблирования "-fI". Их менять не стоит. В конце после знака "%" указывается исходный файл с расширением asm и полный путь к нему.

Вторая строка представляет собой команду pause, которая дает возможность просмотреть результат создания hex-файла, и закрыть окно командной строки по нажатию любой клавиши. О том, как это все выглядит на практике, будет рассказано и показано чуть позже.

А пока необходимо сделать единственную настройку в программе asm_ed.
Заходим в папку asmedit, запускаем файл Asm_Ed.exe. Появляется окно следующего вида:

alt

Как видно на скриншоте, большую часть окна занимает поле для ввода текста, здесь мы и будем набирать свою программу. Сейчас же нам нужен пункт главного меню Service. В выпадающем списке выбираем "Properties...". Открывается окно следующего вида:

alt

Переходим к вкладке "Project" и меняем во второй сверху строке путь к файлу build.bat, не трогая остального:

alt

Все! Можем нажимать кнопочку "ОК" и радоваться - программа готова к работе. Теперь для запуска процесса асемблирования необходимо будет нажать всего лишь кнопку "II" на панели инструментов.

Итак, соберите приведенную на рисунке 1 схему, скачайте и настройте ПО, сделайте программатор, если у вас еще нет столь полезной вещи, и приступим к дальнейшей работе. Но это будет уже совсем другая история...

С.П.Сокол. Мариуполь.

http://sokolsp.at.ua/