- •Микроконтроллеры
- •Базовая информация о микроконтроллерах
- •Сущность и назначение микроконтроллера. Семейства микроконтроллеров
- •Состав микроконтроллера
- •Назначение микроконтроллера
- •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)
Директива byte
Директива BYTE резервирует байты в ОЗУ. Если необходимо иметь возможность ссылаться на выделенную область памяти, то директива BYTE должна быть предварена меткой. Операнд директивы — количество выделяемых байт. Эта директива может использоваться только в сегменте данных. Выделенные байты не инициализируются.
Пример.
.dseg
var1: .byte 1 ;резервирует один байт под var1
table: .byte tab_size ;резервирует tab_size байт под table
.cseg
ldi r30, low(var1) ;загружает младший байт регистра Z
ldi r31, high(var1) ;загружает старший байт регистра Z
ld r1, Z ;загружает var1 в регистр r1
Директива cseg
Директива CSEG объявляет сегмент кода (программный сегмент). Она не имеет параметров. Исходный файл может состоять из нескольких сегментов кода, которые объединяются в один при компиляции.
Директива db
Директива DB резервирует необходимое количество байт в памяти программ или в EEPROM. Она может быть помещена только в сегменте программ (CSEG) или в сегменте EEPROM (ESEG). Если необходимо иметь возможность ссылаться на выделенную область памяти, то директива DB должна быть предварена меткой. Директива DB должна иметь хотя бы один параметр.
Параметры директивы DB — это последовательность выражений, разделенных запятыми. Каждое выражение должно быть или числом в диапазоне (-128..255), или давать такой же результат, в противном случае число усекается до байта без выдачи предупреждения.
Если директива получает более одного параметра и текущим является программный сегмент, то параметры упаковываются в слова в соответствии с обратным порядком хранения слов. Если число параметров нечетно, то последнее выражение будет усечено до байта и записано как слово с нулевым старшим байтом.
Директива def
Директива DEF позволяет обращаться к регистру по символическому имени. Регистр может иметь несколько различных имен. Символическое имя может быть переназначено позднее в программе.
Пример.
.def temp = r16
.def ior = r0
.cseg
ldi temp, 0xF0 ;загрузить 0xF0 в регистр temp (r16)
in ior, 0x3f ;прочитать sreg в регистр ior (r0)
eor temp, ior ;"Искл. ИЛИ" регистров temp и ior
Директива device
Директива DEVICE позволяет указать для какого микроконтроллера компилируется программа. При использовании данной директивы компилятор выдаст предупреждение, если будет найдена инструкция, которую не поддерживает данный микроконтроллер. Также будет выдано предупреждение, если программный сегмент, либо сегмент EEPROM превысят размер, допускаемый устройством.
Пример.
.device ATmega8535
Директива dseg
Директива DSEG объявляет сегмент данных. Она не имеет параметров. Исходный файл может состоять из нескольких сегментов данных, которые объединяются в один сегмент при компиляции. Сегмент данных обычно состоит только из директив BYTE и меток. В сегменте данных может быть использована директива ORG для размещения переменных в необходимом месте ОЗУ.
Директива dw
Директива DW резервирует необходимое количество слов в памяти программ или в EEPROM. Если необходимо иметь возможность ссылаться на зарезервированную область памяти, то директива DW должна быть предварена меткой. Директива DW должна иметь хотя бы один параметр и может быть помещена только в сегменте программ (CSEG) или в сегменте EEPROM (ESEG).
Параметры директивы — это последовательность выражений, разделенных запятыми. Каждое выражение должно быть числом в диапазоне (-32768..65535), или давать такой же результат. В противном случае число усекается до слова без выдачи предупреждения.