
- •Введение
- •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. Варианты индивидуальных заданий
- •Библиографический список
- •Алгоритм
- •Текст программы
- •Выводы по работе:
- •Содержание
- •Ломакин Игорь Владимирович
4.4. Команды перехода
Команды переходов предназначены для организации всевозможных циклов, ветвлений, вызовов подпрограмм и т.д., то есть, они нарушают последовательный ход выполнения программы.
Команды безусловных переходов, приведенные в таблице 4.12, вызывают переход в новый адрес, независимо ни от чего. Они могут вызывать переход на указанную величину смещения (вперед или назад) или же на указанный адрес памяти. Величина смещения или новое значение адреса указываются в качестве входного операнда.
Таблица 4.12. Команды безусловных переходов
Мнемо-ника |
Операнды |
Описание |
Операция |
Флаги |
RJMP |
k –2K < k < 2K |
Перейти относительно |
PC PC + k + 1 |
Нет |
JMP |
k 0 < k < 4M |
Перейти |
PC k |
Нет |
LJMP |
Нет |
Перейти косвенно |
PC Z |
Нет |
Некоторые команды переходов предусматривают в дальнейшем возврат назад, в точку, из которой был сделан переход (таблица 4.13). Если возврат предусмотрен, то текущие параметры процессора сохраняются в стеке.
Таблица 4.13. Команды безусловных переходов с возвратом
Мнемоника |
Операнды |
Описание |
Операция |
Флаги |
RCALL |
k –2K ≤ k ≤ 2K |
Вызвать подпрограмму относительно |
PC PC + k + 1 |
Нет |
CALL |
k 0 ≤ k ≤ 64K |
Выполнить длинный вызов подпрограммы |
PC k |
Нет |
ICALL |
Нет |
Вызвать подпрограмму косвенно |
PC Z |
Нет |
RET |
Нет |
Вернуться из подпрограммы |
PC STACK |
Нет |
RETI |
Нет |
Вернуться из прерывания |
PC STACK |
I |
Команды условных переходов вызывают переход не всегда, а только при выполнении заданных условий (таблица 4.14).
Таблица 4.14. Команды условных переходов
Мнемо-ника |
Операнды |
Описание |
Операция |
Флаги |
CPSE |
Rd, Rr 0≤ d ≤31, 0 ≤ r ≤ 31 |
Сравнить и пропустить, если равно |
if Rd = Rr then PC PC + 2 (or 3) |
Нет |
SBRC |
Rr, b 0 ≤ r ≤ 31 0 ≤ b ≤ 7 |
Пропустить, если бит в регистре очищен |
if Rr(b) = 0 then PC PC + 2 (or 3) |
Нет |
SBRS |
Rr, b 0 ≤ r ≤ 31 0 ≤ b ≤ 7 |
Пропустить, если бит в регистре установлен |
if Rr(b) = 1 then PC PC + 2 (or 3) |
Нет |
SBIC |
P, b 0 ≤ P ≤ 31 0 ≤ b ≤ 7 |
Пропустить, если бит в регистре I/O очищен |
if I/O P(b) = 0 then PC PC + 2 (or 3) |
Нет |
SBIS |
P, b 0 ≤ r ≤ 31 0 ≤ b ≤ 7 |
Пропустить, если бит в регистре I/O установлен |
if l/O P(b) = 1 then PC PC + 2 (or 3) |
Нет |
Часто в качестве условий выступают значения флагов в регистре состояния процессора (SREG). То есть условием перехода является результат предыдущей операции, меняющей значения флагов (таблица 4.15).
Таблица 4.15. Команды условных переходов по состоянию флагов
в регистре SREG
Мнемоника |
Операнды |
Описание |
Операция |
Флаги |
1 |
2 |
3 |
4 |
5 |
BRBS |
s, k 0 ≤ s ≤ 7 –64 ≤ k ≤ +63 |
Перейти, если бит в регистре статуса установлен |
if SREG(s) = 1 then PC PC + k + 1 |
Нет |
BRBC |
s, k 0 ≤ s ≤ 7 –64 ≤ k ≤ +63 |
Перейти, если бит в регистре статуса очищен |
if SREG(s) = 0 then PC PC + k + 1 |
Нет |
BREQ |
k –64 ≤ k ≤ +63 |
Перейти, если равно |
if Rd = Rr (Z = 1) then PC PC + k + 1 |
Нет |
BRNE |
k –64 ≤ k ≤ +63 |
Перейти, если не равно |
if Rd Rr (Z = 0) then PC PC + k + 1 |
Нет |
Окончание табл. 4.15
Мнемо-ника |
Операнды |
Описание |
Операция |
Флаги |
1 |
2 |
3 |
4 |
5 |
BRSH |
k –64 ≤ k ≤ +63 |
Перейти, если равно или больше (без знака) |
if Rd < Rr (C = 0) then PC PC + k+ 1 |
Нет |
BRLO |
k –64 ≤ k ≤ +63 |
Перейти, если меньше (без знака) |
if Rd < Rr (C = 1) then PC PC + k + 1 |
Нет |
BRGE |
k –64 ≤ k ≤ +63 |
Перейти, если больше или равно (с учетом знака) |
if Rd > Rr (N V = 0) then PC PC + k + 1 |
Нет |
BRLT |
k –64 ≤ k ≤ +63 |
Перейти, если меньше чем (со знаком) |
if Rd < Rr (N V = 1) then PC PC + k+ 1 |
Нет |
BRMI |
k –64 ≤ k ≤ +63 |
Перейти, если минус |
if N = 1 then PC PC + k + 1 |
Нет |
BRPL |
k –64 ≤ k ≤ +63 |
Перейти, если плюс |
if N = 0 then PC PC + k + 1 |
Нет |
BRHS |
k –64 ≤ k ≤ +63 |
Перейти, если флаг полупереноса установлен |
if H = 1 then PC PC + k + 1 |
Нет |
BRHC |
k –64 ≤ k ≤ +63 |
Перейти, если флаг полупереноса очищен |
if H = 0 then PC PC + k + 1 |
Нет |
BRTS |
k –64 ≤ k ≤ +63 |
Перейти, если флаг Т установлен |
if T = 1 then PC PC + k + 1 |
Нет |
BRTC |
k –64 ≤ k ≤ +63 |
Перейти, если флаг Т очищен |
if T = 0 then PC pc + k + 1 |
Нет |
BRVS |
k –64 ≤ k ≤ +63 |
Перейти, если флаг переполнения установлен |
if V = 1 then PC PC + k + 1 |
Нет |
BRVC |
k –64 ≤ k ≤ +63 |
Перейти, если флаг переполнения очищен |
if V = 0 then PC PC + k + 1 |
Нет |
BRIE |
k –64 ≤ k ≤ +63 |
Перейти, если глобальное прерывание разрешено |
if I = 1 then PC PC + k + 1 |
Нет |
BRID |
k –64k k +63 |
Перейти, если глобальное прерывание запрещено |
if I = 0 then PC PC + k + 1 |
Нет |