- •Программирование микроконтроллеров avr на языке ассемблера
- •Рецензенты:
- •Введение
- •1. Архитектура однокристальных микроконтроллеров семейства avr
- •2. Технические характеристики микроконтроллера aTmega32
- •3. Разработка программного обеспечения микроконтроллеров avr
- •3.1. Этапы разработки программного обеспечения однокристальных микроконтроллеров
- •3.2. Правила записи констант и выражений
- •3.3. Программная модель микроконтроллеров avr
- •3.4. Регистр статуса
- •3.5. Команды ассемблера
- •3.6. Директивы ассемблера
- •3.7. Настройка указателя стека
- •3.8. Работа с портами ввода-вывода
- •3.9. Работа с оперативной памятью данных
- •4. Интегрированная среда проектирования
- •4.1. Создание проекта в интегрированной среде проектирования avr studio 4.16
- •4.2. Отладка программы в avr studio 4.16
- •4.3. Загрузка программы в энергонезависимую память программ
- •Заключение
- •Библиографический список
- •Содержание
- •191028, Санкт-Петербург, ул. Моховая, 26
3.5. Команды ассемблера
У микроконтроллеров семейства AVR развитая система команд. Все команды можно разделить по назначению на 4 группы:
– арифметические и логические операции;
– операции передачи управления (ветвления), условные и безусловные;
– команды передачи данных;
– команды работы с отдельными битами.
Команды микроконтроллеров AVR шестнадцатиразрядные. Каждая команда размещается в одной или двух ячейках. Машинный цикл микроконтроллеров AVR равен одному такту системного генератора. Количество циклов на одну команду от одного до четырех. Большинство команд занимают одну ячейку памяти программ и выполняются за один машинный цикл.
Микроконтроллеры AVR разных моделей имеют различное количество команд. При программировании следует уточнять, какие команды поддерживает данная модель микроконтроллера. Система команд для каждой конкретной модели приводится в техническом описании микроконтроллера, а также в справочной службе (Help) IDE «AVR STUDIO».
Рекомендуется пользоваться справочной службой. В меню «AVR STUDIO» выбираем «Help/Assembler Help». Попадаем в справочную службу по ассемблеру. Если выбрать пункт «Instruction set overview» (краткий обзор системы команд), то будет выбрана полная система команд микроконтроллеров AVR. Целесообразно в разделе «Device specific instruction set summaries» (резюме команд выбранного устройства) выбрать конкретную модель микроконтроллера и тогда будут показаны только те команды, которые поддерживаются этим микроконтроллером. Если в открывшемся списке выбрать некоторую команду, откроется ее полное описание. В приложении приводится перевод на русский язык названия команд микроконтроллера ATmega32.
Приведем описание некоторых наиболее часто используемых команд:
Команда «LDI» – «Load Immediate» (загрузка константы):
Синтаксис команды: LDI Rd, K,
где Rd – регистр назначения в диапазоне с R16 по R31;
K – константа в диапазоне от 0 до 255.
Описание команды: загрузить 8-битную константу непосредственно в регистр с 16 по 31.
Пример:
ldi r16, $01 ; загрузить константу 01Н в регистр R16
После выполнения команды «LDI» содержимое «Program Counter» (программный счетчик) увеличивается на единицу:
PC <– PC + 1.
Содержимое регистра статуса (флажков) – (SREG) не меняется.
Команда «LDI» имеет в длину одно слово (2 байта) и выполняется за один цикл.
Команда «MOV» – «Copy Register» (копирование регистра):
Синтаксис команды: MOV Rd, Rr,
где Rd – регистр назначения в диапазоне с R0 по R31;
Rr – регистр источник в диапазоне с R0 по R31.
Описание команды: содержимое регистра с именем Rr копируется в регистр с именем Rd.
Пример:
mov r17, r16 ; копировать содержимое регистра R16 в регистр R17
После выполнения команды «MOV» содержимое «Program Counter» (программный счетчик) увеличивается на единицу:
PC <– PC + 1.
Содержимое регистра статуса (флажков) – (SREG) не меняется.
Команда «MOV» имеет в длину одно слово (2 байта) и выполняется за один цикл.
Команда «ADD» – «Add without Carry» (сложить без переноса):
Синтаксис команды: ADD Rd, Rr,
где Rd – регистр назначения в диапазоне с R0 по R31;
Rr – регистр источник в диапазоне с R0 по R31.
Описание команды: содержимое регистра с именем Rr складывается с содержимым регистра с именем Rd и сумма размещается в регистре с именем Rd.
Пример:
add r1, r2 ; сложить содержимое регистра R1 и регистра R2
После выполнения команды «ADD» содержимое «Program Counter» (программный счетчик) увеличивается на единицу:
PC <– PC + 1.
Содержимое регистра статуса (флажков) – (SREG) устанавливается соответственно результату операции.
Команда «ADD» имеет в длину одно слово (2 байта) и выполняется за один цикл.
Команда «JMP» – «Jump» (прыжок):
Синтаксис команды: JMP k,
где k – адрес перехода в пределах всего адресного пространства.
Описание команды: осуществляется безусловный переход на адрес программы, указанный в команде в пределах всего адресного пространства. При использовании программы «ассемблер» вместо адресов удобно указывать метки переходов. В процессе компиляции (перевод с языка ассемблера в машинные коды) вместо меток будут автоматически рассчитаны адреса переходов. Метка должна начинаться с буквы и может также иметь в своем составе цифры, но должна не иметь пробелов.
Пример:
START:
------ ; (некоторая команда)
------ ; (некоторая команда)
jmp START ; безусловный переход на метку «START»
После выполнения команды «JMP» содержимое «Program Counter» (программный счетчик) становится равным «К»:
PC <– К.
Содержимое регистра статуса (флажков) – (SREG) не меняется.
Команда «JMP» имеет в длину 2 слова (4 байта) и выполняется за три цикла.
Команда «RJMP» – «Relative Jump» (относительный прыжок):
Синтаксис команды: RJMP k,
где k – смещение для перехода в пределах PC – 2K +1 и PC + 2K (слов) адресного пространства.
Описание команды: осуществляется безусловный переход на адрес программы, рассчитанный относительно текущей команды и смещения, указанного в команде в пределах PC – 2K +1 и PC + 2K (слов). Для микроконтроллеров, имеющих память программ не более 4K (слов), происходит переход в пределах всего адресного пространства. При использовании программы «ассемблер» вместо адресов удобно указывать метки переходов. В процессе компиляции (перевод с языка ассемблера в машинные коды) вместо меток будут автоматически рассчитаны адреса переходов. Метка должна начинаться с буквы и может также иметь в своем составе цифры, но должна не иметь пробелов.
Пример:
START:
------ ; (некоторая команда)
------ ; (некоторая команда)
rjmp START ; безусловный переход на метку «START»
После выполнения команды «RJMP» содержимое «Program Counter» (программный счетчик) становится равным:
PC <– PC + К + 1.
Содержимое регистра статуса (флажков) – (SREG) не меняется.
Команда «RJMP» имеет в длину одно слово (2 байта) и выполняется за два цикла.