- •Введение
- •1. Микроконтроллеры at90s4434/8535 семейства avr
- •1.1. Структура микроконтроллеров avr
- •1.2. Представление данных в языке ассемблера
- •1.2.1. Двоичная система счисления
- •1.2.2. Биты, байты и слова
- •1.2.3. Шестнадцатеричная система счисления
- •1.3. Адресное пространство микроконтроллеров avr
- •2. Лабораторный комплекс
- •2.1. Назначение и состав комплекса
- •2.2. Блок управления
- •3. Директивы ассемблера
- •3.1. Директивы организации сегментов
- •3.2. Директивы счетчика текущего адреса
- •3.3. Директивы определения данных
- •3.4. Директивы присваивания
- •3.5. Директивы задания набора допустимых команд
- •3.6. Директивы управления файлами
- •3.7. Директивы управления листингом
- •4. Система команд микроконтроллеров семейства avr
- •4.1. Команды пересылки данных
- •4.2. Арифметические команды
- •4.3. Логические команды
- •4.4. Команды перехода
- •5. Программа на ассемблере
- •5.1. Структура программы
- •5.2. Алгоритм решения задачи и структура данных
- •5.3. Пример алгоритма программы
- •5.4. Пример текста программы
- •6. Набор и отладка программ
- •6.1. Набор программы
- •6.2. Отладка программы
- •6.3. Запись программы в микроконтроллер
- •7. Меры безопасности при эксплуатации комплекса
- •8. Общие методические указания к лабораторным работам
- •Порядок выполнения лабораторных работ:
- •Содержание отчета по лабораторной работе:
- •9. Лабораторная работа № 1. Изучение системы команд микроконтроллера и директив ассемблера
- •9.2. Пояснения к работе
- •9.3. Варианты индивидуальных заданий
- •10. Лабораторная работа № 2. Система параллельного ввода/вывода
- •10.1. Цель работы
- •10.2. Пояснения к работе
- •Для вызова подпрограммы используется команда rcall pprmet, где pprmet – это метка и название подпрограммы.
- •10.3. Варианты индивидуальных заданий
- •11. Лабораторная работа № 3. Динамическая индикация
- •11.1. Цель работы Освоить организацию динамической индикации, используемой в программах. Экспериментально определить влияние длительности задержек на качество индикации.
- •11.2. Пояснения к работе
- •Работа продолжает изучение 8-разрядных двунаправленных портов программируемого микроконтроллера ат90s8535 для ввода и вывода дискретной информации, при этом используется динамическая индикация.
- •Если нет необходимости в длительной задержке, количество ступеней в подпрограмме можно уменьшить.
- •11.3. Варианты индивидуальных заданий
- •12. Лабораторная работа № 4. Система внешних прерываний микроконтроллера
- •12.1. Цель работы
- •12.2. Пояснения к работе
- •12.3. Варианты индивидуальных заданий
- •13. Лабораторная работа № 5. Программирование таймеров/счетчиков
- •13.1. Цель работы
- •13.2. Пояснения к работе
- •13.3.1. Работа в режиме счетчика
- •13.3.2. Работа в режиме таймера
- •13.3.3. Работа в режиме широтно-импульсного модулятора
- •13.3. Варианты индивидуальных заданий
- •Библиографический список
- •Алгоритм
- •Текст программы
- •Выводы по работе:
- •Содержание
- •Ломакин Игорь Владимирович
5. Программа на ассемблере
5.1. Структура программы
Программа, написанная на ассемблере, должна иметь определенную структуру. Ниже приводится рекомендованный для AT90S8535 шаблон. Курсив для выделения комментариев используется в этом примере для наглядности. В реальной программе ассемблер не поддерживает различное форматирование шрифтов.
;*****************************************************
; название программы,
; краткое описание, необходимые пояснения
:******************************************************
;******подключаемые дополнительные файлы***********
.include “8535def.inc” ; файл описания AT90S8535
.include «имя_файла1.расширение» ; включение дополнительных
.include «имя_файла2.расширение» ; файлов
;******глобальные константы***********
.equ имя1 = xxxx ;
.equ имя2 = nnnn
;******глобальные регистровые переменные***********
.def имя1= регистр
.def имя2= регистр
;*******сегмент данных***********
.dseg
.org xxxx ; адрес первого зарезервированного байта
label1: .BYTE 1 ; резервировать 1 байт под переменную label1
label2: .BYTE m ; резервировать m байт под переменную label2
;****** сегмент EEPROM (ЭСППЗУ) ***********
.eseg
.org xxxx ; адрес первого зарезервированного байта
.db выражение1,выражение2,… ; записать список байтов в EEPROM.
.dw выражение1,выражение2,… ; записать список слов в EEPROM.
;******сегмент кодов**********
.cseg
.org $0000 ; адрес начала программы в программной памяти
;****** вектора прерываний (если они используются) ***********
rjmp reset ;прерывание по сбросу
.org $0002
rjmp INT0 ;обработчик прерывания IRQ0
.org $0004
rjmp INT1 ;обработчик прерывания IRQ1
.org adrINTx ;адрес следующего обработчика прерываний
rjmp INTx ;обработчик прерывания x
;далее по порядку располагать обработчики остальных ;прерываний
;*******начало основной программы**********
main: <команда> xxxx
… …
;******* подпрограммы *********
;*******подпрограмма 1**********
subr1: <команда> xxxx
…… ………. ……
ret
;*******подпрограмма 2**********
subr2: <команда> xxxx
…… ………. ……
ret
…………….
;******* программы обработчиков прерываний**********
INT0: <команда> xxxx
…… ………. ……
reti
INT1: <команда> xxxx
…… ………. ……
reti
INTx: <команда> xxxx
…… ………. ……
reti
…… ……… ……
; конец программы никак не обозначается.
5.2. Алгоритм решения задачи и структура данных
Алгоритм программы состоит из двух частей – последовательности операторов, формирующих структуру данных и набора операторов, реализующих метод решения задачи. Составление алгоритма решения задачи и проектирование структуры данных рассматривается на простейшем примере.
Пример 5.1. Вычесть из числа 5 число 3. Если на блоке управления включен тумблер SA1, то на индикацию выдать результат вычитания. Если тумблер SA1отключен – на индикацию вывести цифру ноль.
Алгоритм решения задачи может быть следующим:
проверяется состояние ключа SA1;
если ключ SA1 включен, то необходимо произвести вычитание и запомнить результат и перейти к индикации;
если ключ SA1 выключен, то необходимо просто запомнить ноль и перейти к индикации;
задать или сформировать адрес ячейки, в которой хранится код для индикации результата;
выдать результат на индикацию;
вернуться к проверке состояния ключа SA1 (если предполагается бесконечное выполнение программы).
Параллельно с алгоритмом решения задачи необходимо проектировать и структуру данных – порядок настройки портов, перечень входных и выходных переменных и их адреса, вершину стека. Структуру данных можно представить в виде совокупности нескольких таблиц (таблицы 5.1–5.4).
Таблица 5.1. Порядок настройки портов
ПОРТЫ |
Выводы на вход |
Выводы на выход |
Порт А |
0 – 7 |
– |
Порт В |
0, 1, 4 – 7 |
2, 3 |
Порт С |
– |
0 – 7 |
Порт D |
0 – 3 |
4 – 7 |
Таблица 5.2. Размещение структурных элементов программы
ЭЛЕМЕНТ СТРУКТУРЫ ДАННЫХ |
Имя |
Адрес |
Память |
Вершина стека |
SP |
$025f |
Регистры I/O |
Начало программы |
– |
$0030 |
FLASH |
Таблица 5.3. Перечень констант
КОНСТАНТЫ |
Имя |
Значение |
Адрес |
Память |
Адрес кода 0 |
cod0 |
$3f |
$64 |
SRAM |
Адрес кода 1 |
cod1 |
$06 |
$65 |
SRAM |
Адрес кода 2 |
cod2 |
$5b |
$66 |
SRAM |
Адрес кода 3 |
Cod3 |
$4f |
$67 |
SRAM |
Адрес кода 4 |
Cod4 |
$66 |
$68 |
SRAM |
Адрес кода 5 |
Cod5 |
$6d |
$69 |
SRAM |
Адрес кода 6 |
Cod6 |
$7d |
$6a |
SRAM |
Адрес кода 7 |
Cod7 |
$07 |
$6b |
SRAM |
Адрес кода 8 |
Cod8 |
$7f |
$6c |
SRAM |
Адрес кода 9 |
Cod9 |
$6f |
$6d |
SRAM |
Таблица 5.4. Перечень переменных
ПЕРЕМЕННЫЕ |
Имя |
Значение |
Адрес |
Память |
Уменьшаемое |
– |
5 |
r17 |
РОН |
Вычитаемое |
– |
3 |
r19 |
РОН |
Результат (разность) |
– |
– |
r20 |
РОН |
Адрес ячейки кода индикации разности |
– |
– |
r0 |
РОН |
Адрес первого из кодов индикации |
– |
$64 |
Z (zh, zl) (r31, r30) |
РОН |
Вспомогательные регистры для промежуточных значений |
– |
– |
r16, r17 |
РОН |
