3. В окне редактора ввести код программы.
Рисунок 7. AVR Studio
4. Сохранить набранный файл с расширением *.ASM (*.С).
5. Откомпилировать набранную программу - кнопка «F7» на клавиатуре или нажать кнопку
.6. Возможные ошибки в программе можно просмотреть в окне «message».
7. После устранения всех ошибок, откомпилировать программу снова и записать данные файла с расширением *.НЕХ в микроконтроллер.
Для этого:
- нажать кнопку «AVR» на панели «AVRStudio toolbar», появится окно «STK500»;
- в закладке «Program» выбрать «Device» - устройство (ATmega16);
- в разделе «Flash», в поле «Input HEX File» указать расположение откомпилированного файла.
Рисунок 8. AVR Studio
При передаче данных с персонального компьютера в стенд STK500 данные отображаются на индикаторе стенда. Горит светодиод Led7, Led6, Led5..
При записи программы в МК убедитесь, что плата STK500 включена.
Запись новой программы возможна в любой момент времени работы загруженной программы.
Лабораторная работа №1
Тема: Изучение структуры стенда STK500 и системы команд микроконтроллера ATmega16.
Цель: Изучить функциональные возможности учебно-отладочного стенда, внутреннюю структуру и систему команд МК ATmega16. Получить первичные навыки программирования МК ATmega16.
Для выполнения данной лабораторной работы нужно знать:
Краткие теоретические сведения
Память
В соответствии с гарвардской архитектурой память AVR-микроконтроллера разделена на две области: память данных и память программ. Кроме того, ATmega128 содержит память на EEPROM(ЭСППЗУ) для энергонезависимого хранения данных. Все три области памяти являются линейными и равномерными.
Внутрисистемно программируемая флэш-память программ ATmega16 содержит 16 кбайт внутренней внутрисистемно перепрограммируемой флэш-памяти для хранения программы. Поскольку все AVR-инструкции являются 16 или 32-разр., то флэш-память организована как 8 кбайт ´ 16. Для программной защиты флэш-память программ разделена на два сектора: сектор программы начальной загрузки и сектор прикладной программы.
Флэш-память характеризуется износостойкостью не менее 10.000 циклов запись/стирание. Программный счетчик РС у ATmega16 является 13-разр., поэтому, позволяет адресоваться к 8 кбайт памяти программ.
Таблицы констант могут располагаться в пределах всего пространства памяти программ (см. описание инструкции чтения из памяти программ).Рисунок 9. Память программ
Первые 1120 ячеек памяти данных относятся к файлу регистров, памяти ввода/вывода и встроенному статическому ОЗУ. В первых 96 ячейках расположен файл регистров (32 ячейки) и стандартная память ввода-вывода (64 ячейки). Следующие 1024 ячейки внутренней статической ОЗУ данных.
Реализовано пять различных способов адресации для охвата всей памяти: прямая, косвенная со смещением, косвенная, косвенная с предварительным декрементом и косвенная с последующим инкрементом. Регистры R26 – R31 из файла регистров используются как регистры-указатели для косвенной адресации.
Прямая адресация позволяет адресоваться ко всей памяти данных. Косвенная адресация со смещением позволяет адресовать 63 ячейки, начиная с адреса указанного в регистрах Y или Z.
При использовании инструкции косвенной адресации с предварительным декрементом и последующим инкрементом значения адресных регистров X, Y и Z, соответственно декрементируются до или инкрементируются после выполнения инструкции.
32 рабочих регистров общего назначения, 64 регистра ввода-вывода и 1024 байт внутреннего статического ОЗУ данных в ATmega16 доступны с помощью всех этих режимов адресации.
Рисунок 10. Распределение памяти в ATMega 16
Пример записи в регистр общего назначения:
.DEF Treg=r16 ;Присваиваем регистру общего назначения имя Treg
.CSEG
Start:
ldi Treg, 00000001b ;запись числа в «Treg» т.е. в регистр R16
ПОРТЫ ВВОДА/ВЫВОДА
Порт B 8-разрядный двунаправленный порт.
Для обслуживания порта отведено три регистра: регистр данных PORTB ($18, $38), регистр направления данных - DDRB ($17, $37) и выводы порта B ($16, $36). Адрес выводов порта B предназначен только для чтения, в то время как регистр данных и регистр направления данных - для чтения/записи.
Все выводы порта имеют отдельно подключаемые подтягивающие резисторы. Выходы порта B могут поглощать ток до 20 мА и непосредственно управлять светодиодными индикаторами. Выводы PB0..PB7 используются как входы и замыкаются на землю, если включены внутренние подтягивающие резисторы, при этом выводы являются источниками тока (IIL). Дополнительные функции выводов порта B приведены в таблице 16.
Таблица 1. Альтернативные функции выводов порта B
Вывод | Альтернативная функция |
PB0 | AIN0 (Положительный вход аналогового компаратора) |
PB1 | AIN1 (Отрицательный вход аналогового компаратора) |
PB5 | MOSI (Вход данных для загрузки памяти) |
PB6 | MISO (Выход данных для чтения памяти) |
PB7 | SCK (Вход тактовых импульсов последовательного обмена) |
При использовании альтернативных функций выводов регистры DDRB и PORTB должны быть установлены в соответствии с описанием альтернативных функций.
РЕГИСТР ДАННЫХ ПОРТА B - PORTB
Бит $18 Чт./зап. Начальн.знач. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
PORTB7 | PORTB6 | PORTB5 | PORTB4 | PORTB3 | PORTB2 | PORTB1 | PORTB0 | PORTB | |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
РЕГИСТР НАПРАВЛЕНИЯ ДАННЫХ ПОРТА B - DDRB
Бит $17 Чт./зап. Начальн.знач. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
DDB7 | DDB6 | DDB5 | DDB4 | DDB3 | DDB2 | DDB1 | DDB0 | DDRB | |
R/W | R/W | R/W | R/W | R/W | R/W | R/W | R/W | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Бит $16 Чт./зап. Начальн.знач. | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
PINB7 | PINB6 | PINB5 | PINB4 | PINB3 | PINB2 | PINB1 | PINB0 | PINB | |
R | R | R | R | R | R | R | R | ||
Hi-Z | Hi-Z | Hi-Z | Hi-Z | Hi-Z | Hi-Z | Hi-Z | Hi-Z |
PINB не является регистром, по этому адресу осуществляется доступ к физическим значениям каждого из выводов порта B. При чтении PORTB, читаются данные из регистра-защелки, при чтении PINB читаются логические значения, присутствующие на выводах порта.
Порт B, как порт ввода/вывода общего назначения
Все 8 бит порта B при использовании для ввода/вывода одинаковы.