В начало | Зарегистрироваться | Заказать наши киты почтой
 
 
 
 

Програмирование в AVR Studio 5 с самого начала. Часть 2

📆24 сентября 2011   ✒️galrad   🔎62.574   💬16  

Пишем первую программу!

Большинство начинают с мигания светодиодов, и мы не исключение. Если микроконтроллер, даже самый быстрый, не “общается” с внешним миром, ценность его сводится к нулю. Нам нужно чтобы микроконтроллер принял информацию, обработал по заданному алгоритму и выдал результат в понятной для нас форме.

Алгоритм, (от имени персидского математика аль-Хорезми) — точный набор инструкций, описывающих порядок действий исполнителя для достижения результата решения задачи за определенное время.
Чтобы правильно писать программы нужно понять, как работает микроконтроллер, чем мы и будем заниматься, а пока составим первую программу на ассемблере.
Вообще, написать программу можно в любом текстовом редакторе, так же как вы бы написали письмо другу, например. После этого, текст надо скомпилировать (иногда говорят - ассемблировать) т.е. перевести в форму, понятную процессору. Раньше, расширение текстового файла .txt переименовывали в .asm и обрабатывали специальной программой, называемой компилятором. Суть работы компилятора в переводе письменных символов понятных для человека в машинный код (в код нулей и единиц) и создание нового файла с расширением .hex

Что делать с этим .hex файлом? А он нужен для программатора, чтобы записать код программы в ПЗУ (постоянное запоминающее устройство) микроконтроллера. Мы вместо программатора будем использовать программу Proteus, которая модулирует реальную работающую схему.
В AVR Studio 5 редактор, компилятор, отладчик и программатор все в одном флаконе!

Директива – это предписание редактору, с которым мы будем работать. В большинстве своем название директивы и ее функция в разных редакторах совпадают. Например, если сравнить редактор MPLAB IDE для микроконтроллеров PIC, то разницы практически нет!
А вот команды отличаются. Список команд формируется производителем и в какой-то степени зависит от технологии производства. Даже у одного производителя в разных семействах может быть разный список команд по мере изменения их структуры.
Команда – это единичная функция, с помощью которой мы можем управлять микроконтроллером.
Программа - это последовательность команд, соответствующая определенному алгоритму (составленная нами).
Любая программа начинается с “шапки”, где прописывается основные функции программы, ее автор, название контроллера, который будет использоваться, тактовая частота и другие данные. “Шапка” - это “правило хорошего тона” в программировании.
Обычно в “шапке” прописывается файл инициализации .includeххххdef.inc. директивы .device, .list, .nolist, и другие.
В AVR Studio 5 эти директивы прописаны по умолчанию. В предыдущей версии AVR Studio 4 эти директивы нужно было прописывать, поэтому я их оставил в виде комментариев.
Комментарии пишутся произвольно, как вам нравиться и главное, чтобы они для вас оставались понятными. Нередко, из-за неполных комментариев, через некоторый промежуток времени сам автор не может разобраться в собственной программе. Перед комментариями ставиться знак (;) .
Я ввел “шапку” предложенную Джоном Мортоном…



Редактор AVR Studio 5 – понимает написанные, директивы и команды выделяя их в синий цвет, числовые данные остаются черными, непонятные выражения выделяет в красный, комментарии в зеленый.

Прежде чем начать, что-то писать рассмотрим директивы ассемблера микроконтроллеров AVR.
Перед каждой директивой ставиться точка:
Директива                                          Описание
.BYTE                 Резервировать байты в ОЗУ
.CSEG                Сегмент программы
.DB                    Определить байт – константу во Flash-памяти или EEPROM
.DEF                   Назначить регистру символическое имя
.DEVICE             Определяет устройство, для которого компилируется программа
.DSEG                Сегмент данных
.DW                   Определяет слово во Flash-памяти или EEPROM
.ENDM                 Конец макроса
.ENDMACRO         Конец макроса
.EQU                   Установить постоянное выражение
.ESEG                 Сегмент EEPROM
.EXIT                      Выход из файла
.INCLUDE            Вложить другой файл
.LIST                   Включить генерацию листинга
.LISTMAC            Включить разворачивание макросов в листинге
.MACRO               Начало макроса
.NOLIST              Выключить генерацию листинга
.ORG                  Установить положение в сегменте
.SET                   Установить для переменной эквивалентное выражение


Полное описание команд и директив ассемблера в русском переводе Руслана Шимкевича можно посмотреть тут:
🎁atmel-avr-assembler.7z  397.28 Kb ⇣ 265

Мы еще не раз вернемся к директивам ассемблера, а сейчас попробуем написать небольшой текст программы, где будем включать светодиоды.
Для удобства выберем микроконтроллер ATtiny2313A. Если кто-то пойдет дальше и будет экспериментировать в “железе”, этот контроллер один из самых доступных, очень часто применяется в различных конструкциях, которые можно найти в бескрайних просторах сети.

Начинаем работать с программой Proteus

Чтобы поначалу вам не сидеть, составляя схему, я выложил готовый проект.
🎁attiny2313_led.rar  27.18 Kb ⇣ 203
Нужно лишь распаковать и стартовать его (при условии, что Proteus уже установлен).
Должна появиться вот такая картинка:


Запустим AVR Studio 5, и в редакторе напишем небольшую программу с подробными комментариями:

.def temp=r16    ; директива .def назначает регистру r16 имя temp

;====================================================
; Начало программы
.cseg            ; директива .cseg определяет начало сегмента, где будет расположен
                    ; основной код программы. В AVR Studio 5 это директива не
                    ; обязательна
.org 0            ; начало первой строки программы
rjmp Start       ; относительный переход к метке Start (в PIC соответствует 
                    ; команде goto)
; ====================================================
Start:
ser temp; устанавливает все биты регистра temp  в 1
out DDRB,temp; переводит все биты 
out DDRD,temp; порта B  и D на вывод
clr temp; обнуляет регистр temp (устанавливает все биты регистра temp в 0)
out PortB,temp; отключает подтягивающие резисторы 
out PortD,temp; портов B и D 
Cicle: 
ldi temp,0b11001100; включает светодиоды
out PortB, temp; порта B
rjmp Cicle; Возвращаемся к метке Cicle, зацикливаемся


Скомпилируем ее, кликнув по F7
В окошке Output появятся информация о проведенной компиляции, в конце должна быть надпись Build succeeded, которая подтверждает удачную сборку .hex файла.

Этот файл по умолчанию размещен в Моих документах, в проекте AVR Studio 5.

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





Запускаем эмуляцию программы.
После нажатия кнопки Старт видим результат!


Чтобы остановить эмуляцию – кликаем Стоп.
Если прошить микроконтроллер программатором и собрать схему, то результат будет таким-же.

Попробуем разобраться, с программой:

Строка:
.def temp=r16    ; директива .def назначает регистру r16 имя temp

Для удобства мы назначили регистру r16 имя temp, это значит что в любом месте программы, при написании слова temp программа будет обращаться к регистру r16.
Что это за регистр – r16?
Он относится к регистрам общего назначения, которые обозначаются как r0….r31, т.е их всего 32 по 8 бит. Вторая половина регистров общего назначения r16…r31 выполняют функцию временного хранения информации (как аккумуляторы, могут принимать и могут отдавать информацию, для сравнения - у PIC контроллеров всего один аккумулятор W). Последние 6 регистров общего назначения условно объединены в три 16-битных:


Обратите внимание, что старший байт пишется раньше, младший позже.

r27:r26 называется регистром X,
r29:r28 называется регистром Y,
r31:r30 называется регистром Z
Программа будет так же работать если слово temp будет присвоено любому другому регистру общего назначения от r16 до r31 например .def temp=r20. После компиляции (клавиша F7 в AVR Studio 5), разницы в работе программы никакой нет.
(Можете попробовать, теперь вы знаете, как это сделать!)

Строка:
.cseg            ; директива .cseg определяет начало сегмента, где будет расположен основной код программы

В AVR Studio 5 это директива прописана по умолчанию.
В микроконтроллерах AVR выделяют разные области памяти, для хранения программного кода, данных в постоянной памяти или EEPROM, для обозначения этой области существуют директории:
.cseg - Программный сегмент
.dseg – Сегмент данных
.eseg – сегмент EEPROM

Строка:
.org 0           ; начало первой строки программы

Программа начинается со строки указанной директивой .org, и при завершении будет возвращаться к ней.

Строка:
rjmp Start       ; относительный переход к метке Start (в PIC соответствует команде goto)

Это команда относительного перехода к метке Start.
Программа выполняется последовательно от верхней стоки к нижней. Если требуется перейти в другую область программы то используется команда rjmp

Строки:
ser temp         ; устанавливает все биты регистра temp  в 1
clr temp         ; обнуляет регистр temp (устанавливает все биты регистра temp  в 0)

Команда ser выполняется с регистрами r16…r31, а команда clr может выполнятся ко всем регистрам, в том числе и регистрам ввода-вывода (регистрам специального назначения). Назначение этих регистров мы рассмотрим позже.

Строка:
ldi temp,0b11001100 

Команда ldi записывет в регистр temp двоичное число 11001100 (не будет ошибкой если вместо 0b11001100 написать 204 или CCh, в одном случае в десятичной форме в другом в шестнадцатеричной)

Строка:
out DDRB,temp

Команда out выводит значение регистра temp в регистр порта DDRB.

Что такое порт и как он работает?

Если упростить до минимума, то порт можно представить как ножку-вывод микроконтроллера, на который в режиме вывода можно произвольно подать напряжение или отключить, а в режиме ввода определить, есть ли напряжение, поданное извне или нет.
Есть три режима работы порта: это вывод, ввод и отключенное состояние.
Управляют портами регистры PinX, PortX, DDRX.
Х – означает порт, которым управляют эти регистры.
Регистр DDRX управляет режимами ввода-вывода, как реле – включили (записали 1) – подключился на линию вывода, отключили (записали 0) – переключился на линию ввода (по умолчанию).


Чтобы вывести данные в порт Х, нужно регистр DDRX переключить в режим вывода (прописать 1) а данные переслать в регистр PortX.
Считать значение порта Х можно, если регистр DDRX переключить в режим ввода (прописать 0), из регистра PinX. Чтобы подключить подтягивающие резисторы в режиме ввода, надо отправить данные в PortX.
Подтягивающие резисторы избавляют нас от необходимости подключать внешние резисторы на положительный провод и с помощью одной команды сами подают логическую единицу на вход.

Еще раз просмотрим программу, все просто!
Попробуйте самостоятельно поменять картину свечения светодиодов.

Читайте в следующей части!

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

Камрад, рассмотри датагорские рекомендации

🌼 Полезные и проверенные железяки, можно брать

Опробовано в лаборатории редакции или читателями.




 

Читательское голосование

Нравится

Статью одобрили 30 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

Поделись с друзьями!

 

 

Связанные материалы

 

Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 1... Каждый человек, который только начинает осваивать программирование микроконтроллеров, да и вообще...
Схема на Датагоре. Новая статья Грызем микроконтроллеры. Урок 6. Прошиваем МК... Ну вот, писать программы для микроконтроллеров мы научились. Работоспособность прошивки тоже...
Схема на Датагоре. Новая статья Программатор JTAGICE 3. Что внутри?... Совершенно случайно попался мне в руки программатор JTAGICE3, который был выпущен компанией Atmel...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 4... Сегодня рассмотрим программу “бегущих огней” и “бегущих теней”. Примеры “бегущих огней” можно...
Схема на Датагоре. Новая статья Программатор для ATMEL AVR-910 по USB... Представлю Вам мой вариант печатной платы для сборки такого программатора. Детали, кроме самого МК,...
Схема на Датагоре. Новая статья Анатомия микроконтроллеров ATmega... Здравствуйте, датагорцы! После публикации моей первой статьи, меня завалили вопросами о...
Схема на Датагоре. Новая статья Использование МК ATMega163, ATMega163L, ATMega16 в Arduino IDE... Популярная среда разработки Arduino IDE привлекает большим количеством готовых библиотек и...
Схема на Датагоре. Новая статья Elect_60: программа микроконтроллерного управления внешними устройствами от ПК... Многие наши коллеги желающие создать микроконтроллерное устройство, управляемое от ПК сталкиваются...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 3... Мы научились включать и выключать светодиоды, а как сделать, чтобы они сами заморгали? Понятно,...
Схема на Датагоре. Новая статья Применение микроконтроллеров AVR. Схемы, алгоритмы, программы... Какой микроконтроллер выбрать? Где найти его описание? Где взять программу, обеспечивающую...
Схема на Датагоре. Новая статья Программирование микроконтроллеров ATmega... Хеллоу ВСЕМ!!! Итак, как я и обещал, расскажу как залить программу в МК. Для этого нам понадобится...
Схема на Датагоре. Новая статья Грызём микроконтроллеры. Урок 2. CodeVision и С... Предлагаю продолжить изучение микроконтроллеров… Второй урок будет посвящен по большей части...
 

Комментарии, вопросы, ответы, дополнения, отзывы

 

<
Читатель Датагора

Dust112

<
Читатель Датагора

Supercontick

<
Читатель Датагора

Demiurg

<
Читатель Датагора

galrad

<
Читатель Датагора

Demiurg

<
Читатель Датагора

galrad

<
Читатель Датагора

Datagor

<
Читатель Датагора

Demiurg

<
Читатель Датагора

Datagor

<
Читатель Датагора

Хабиб

<
Читатель Датагора

Mikalay83

<
Читатель Датагора

Datagor

<
Читатель Датагора

Vasek_Vasechek

<
Читатель Датагора

Datagor

<
Читатель Датагора

Ka4ErAp

Добавить комментарий, вопрос, отзыв 💬

Камрады, будьте дружелюбны, соблюдайте правила!

  • Смайлы и люди
    Животные и природа
    Еда и напитки
    Активность
    Путешествия и места
    Предметы
    Символы
    Флаги
 
 
В начало | Зарегистрироваться | Заказать наши киты почтой