- •Микроконтроллеры
- •Базовая информация о микроконтроллерах
- •Сущность и назначение микроконтроллера. Семейства микроконтроллеров
- •Состав микроконтроллера
- •Назначение микроконтроллера
- •Cемейства микроконтроллеров
- •Отправная точка. Микроконтроллерi8051
- •Основные характеристики микроконтроллераi8051
- •Назначение выводовi8051
- •Структурная схемаi8051
- •Микроконтроллеры семействаavrкомпанииatmel
- •Общая характеристика архитектуры, системы команд и ассемблераAvr
- •Состав семейства и основные характеристики микроконтроллеровAvr
- •Структура ассемблерного кодаAvr
- •Группы команд микроконтроллеров avr
- •Директивы ассемблераAvr
- •Список директив ассемблераAvr
- •Директива byte
- •Директива cseg
- •Директива db
- •Директива def
- •Директива device
- •Директива dseg
- •Директива dw
- •Директивы macro иEndmacro
- •Директива equ
- •Директива set
- •Микроконтроллер atmega8535
- •Характеристики, назначение выводов и структура микроконтроллера aTmega8535
- •Характеристики микроконтроллера aTmega8535
- •Назначение выводов микроконтроллера aTmega8535
- •Структура микроконтроллера aTmega8535
- •Сброс микроконтроллера aTmega8535. Режимы пониженного энергопотребления. Сигналы запроса внешних прерываний. Регистры управления
- •Сброс микроконтроллера aTmega8535
- •Регистр mcucsr (mcu Control and Status Register)
- •Регистр mcucr (mcu Control Register)
- •Режимы пониженного энергопотребления
- •Форма сигналов запроса внешних прерываний
- •Регистры общего назначения, регистр состояния и указатель стека микроконтроллера aTmega8535
- •Регистры общего назначения
- •Регистр состояния (sreg)
- •Указатель стека
- •Ввод-вывод
- •Регистры и команды ввода-вывода
- •Порты ввода-вывода
- •Прерывания
- •Источники и таблица векторов прерываний
- •Регистр gicr (General Interrupt Control Register)
- •Внешние прерывания
- •Регистр gifr (General Interrupt Flag Register)
- •Таймеры микроконтроллера aTmega8535
- •Общая информация о таймерах микроконтроллера aTmega8535
- •Множество таймеров aTmega8535
- •Регистр timsk (Timer/Counter Interrupt Mask Register)
- •Регистр tifr (Timer/Counter Interrupt Flag Register)
- •Примеры программ работы с таймером
- •Таймер t0
- •Назначение и свойства таймера t0
- •Структура таймера t0
- •Регистры таймера t0
- •Регистр tccr0 (Timer/Counter Control Register)
- •Устройство сравнения таймера t0
- •Режимы работы таймера t0
- •Режим Normal
- •Режим ctc
- •Режим быстрой шим (fastPwMmode)
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode)
- •Таймер t1
- •Назначение и свойства таймера t1
- •Структура таймера t1
- •Регистры таймера t1
- •Регистр tccr1a (Timer/Counter1 Control Register a)
- •Регистр tccr1b (Timer/Counter1 Control Register b)
- •Задание режима генерации сигнала битами wgm13:0
- •Устройство захвата (Input Capture Unit)
- •Режимы работы таймера t1
- •Список режимов работы таймера t1
- •Режим быстрой шим (fast pwm mode) таймера t1
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode) таймера t1
- •Режим шим с корректировкой фазы и частоты (Phase and Frequency Correct pwm Mode) таймера t1
- •Таймер t2
- •Назначение и свойства таймера t2
- •Структура таймера t2
- •Регистры таймера t2
- •Регистр tccr2 (Timer/Counter Control Register)
- •Устройство сравнения таймера t2
- •Режимы работы таймера t2
- •Режим Normal
- •Режим ctc
- •Режим быстрой шим (fast pwm mode)
- •Режим шим с корректировкой фазы (Phase Correct pwm Mode)
- •Асинхронный режим работы таймера t2. Регистр assr (Asynchronous Status Register)
Структура ассемблерного кодаAvr
Общая форма строки исходного кода на ассемблере такова:
[метка:] .директива [операнды] [;комментарий]
или
[метка:] инструкция [операнды] [;комментарий]
Информация в скобках необязательна. Однако строка может состоять из одного комментария. Метка также может быть одна в строке, но тогда она относится к нижеследующей ближайшей строке с инструкцией или директивой. Метка заканчивается двоеточием.
Директива — это указание ассемблеру. Директива предваряется точкой.
Инструкция — это команда процессора.
Пример.
;вход PINA ;это комментарий
;выход PORTC ;это тоже комментарий
.include "m8535def.inc" ;это директива включения файла
.equ mask = 0x0F ;директива задания константы
.cseg ;директива объявления сегмента кода
.org 0 ;директива указания начального адреса
start: ldi r16, 0xFF ;команда загрузки регистра r16 значением FF
out DDRC, r16 ;вывод r16 в регистр направления C
ldi r16, 0x00 ;команда загрузки регистра r16 значением 00
out DDRA, r16 ;вывод r16 в регистр направления A
main: in r16, PINA ;ввод в r16 данных через порт A
andi r16, mask ;"И" r16 с непосредственным операндом
out PORTC, r16 ;вывод r16 через порт C
rjmp main ;переход к началу цикла
Компилятор позволяет использовать в программе выражения, которые могут состоять из операндов, операторов и функций.
Группы команд микроконтроллеров avr
Система команд микроконтроллеров AVR включает следующие группы:
Арифметические и логические команды: сложение и вычитание с переносом и без переноса, все логические операции, изменение знака, установка и сброс регистра или отдельных битов, инкремент и декремент, проверка на ноль или отрицательность, несколько видов умножения.
Команды ветвления: абсолютный, относительный и косвенный переходы и вызовы подпрограммы, возвраты из подпрограммы и прерывания, относительные условные переходы по 16 условиям (8 флагов умножить на два значения), пропуски команд по условию установки или сброса определенного бита в порту или регистре, сравнения двух регистров с переносом и без него или регистра и константы, а также сравнения двух регистров и пропуска команды в случае их равенства.
Команды передачи данных: перемещение, непосредственная, прямая и косвенная загрузка, прямое и косвенное размещение, косвенная загрузка и размещение с пост-инкрементом или пре-декрементом, косвенная загрузка и размещение со смещением, загрузка и размещение в программной памяти, возможно с пост-инкрементом, ввод и вывод, помещение в стек и извлечение из стека.
Команды битовых операций: логические и циклические через перенос сдвиги влево и вправо, арифметический сдвиг вправо, перестановка тетрад, установка и сброс флагов и битов в порту, сохранение и загрузка битов в регистре из флага T.
Команды управления микроконтроллером: отсутствие операции, переход в спящий режим, сброс сторожевого таймера.
Директивы ассемблераAvr
Список директив ассемблера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 — установка переменного символического эквивалента выражения.