
- •Основные понятия и определения. Лекция №1. Микропроцессоры и микроконтроллеры. Общие сведения. Шина адреса, шина управления.
- •Что такое микропроцессор?
- •Шинная структура связей
- •Лекция №2. Архитектура микропроцессоров и микроконтроллеров. Risc и cisc система команд в мп и мк. Архитектура микропроцессорных систем
- •Типы микропроцессорных систем
- •Risc и cisc система команд в мп и мк
- •Команды пересылки данных
- •Арифметические команды
- •Логические команды
- •Команды переходов
- •Лекция №3. Внутренняя организация процессора. Назначение и функциональные особенности блоков. Быстродействие процессора
- •Классификация и структура
- •Процессорное ядро
- •Функции процессора
- •Лекция №4. Последовательность выполнения команд микропроцессором. Режимы адресации.
- •Адресация операндов
- •Методы адресации
- •Адресация байтов и слов
- •Регистры процессора
- •Система команд мп. Лекция №5. Архитектура изучаемого микроконтроллера. Назначение внутренних блоков. Микроконтроллеры семейства avr
- •Микроконтроллер aTtiny2313 фирмы Atmel
- •Архитектура микроконтроллеров семейства Tiny
- •Организация памяти
- •Память программ
- •Память данных
- •Способы адресации памяти данных
- •Прямая адресация
- •Лекция №6. Блок регистров общего назначения. Команды с непосредственной адресацией. Различные режимы адресации. Энергонезависимая память данных (eeprom)
- •Доступ к eeprom
- •Меры предосторожности
- •Счетчик команд и выполнение программы
- •Лекция №7. Система команд изучаемого микроконтроллера.
- •Лекция №8. Команды переходов и сдвига. Остальные команды.
- •Выводы микроконтроллера. Лекция №9. Описание выводов микроконтроллера.
- •Описание выводов
- •Кварцевый генератор
- •Лекция №10. Пространство ввода/вывода микроконтроллера.
- •Порт ввода/вывода в
- •Регистр направления данных порта b - ddrb
- •Альтернативные функции portb
- •Порт ввода/вывода d
- •Регистр направления данных порта b - ddrb
- •Порт d, как порт ввода/вывода общего назначения
- •Альтернативные функции порта d
- •Регистры и обработка прерываний микроконтроллера. Лекция №13. Регистр состояния и указатель стека микроконтроллера.
- •Регистр состояния - sreg
- •Указатель стека sp
- •Лекция №14. Обработка внешних прерываний в микроконтроллере.
- •Обработка внешних прерываний. Общий регистр маски прерываний gimsk
- •Общий регистр флагов прерываний
- •Регистр управления микроконтроллером - mcucr
- •Лекция №15. Обработка прерываний от таймеров/счетчиков в микроконтроллере.
- •Регистр маски прерывания от таймера/счетчика - timsk
- •Регистр флагов прерываний от таймеров/счетчиков - tifr
- •Прерывания в микроконтроллере. Лекция №16. Определитель таймеров/счетчиков. Принцип работы таймера/счетчика 0.
- •Определитель таймеров/счетчиков
- •Регистр управления таймером/счетчиком 0 - tccr0
- •Лекция №17. Режимы работы таймера/счетчика 1.
- •Регистр a управления таймером/счетчиком 1 - tccr1a
- •Таймер/счетчик 1 - tcnt1h и tcnt1l
- •Регистр совпадения a таймера/счетчика 1 - ocr1ah и ocr1al
- •Регистр захвата таймера/счетчика 1 - icr1h и icr1l
- •Таймер/счетчик в режиме шим
- •Лекция №18. Универсальный асинхронный приемо-передатчик. Принцип работы и управления.
- •Передача данных
- •Прием данных
- •Управление uart регистр ввода/вывода uart
- •Регистр состояния uart (usr)
- •Регистр управления uart (ucr)
- •Генератор скорости передачи
- •Лекция №19. Аналоговый компаратор и сторожевой таймер микроконтроллера.
- •Аналоговый компаратор регистр управления и состояния аналогового компаратора (acsr).
- •Регистр управления сторожевым таймером - wdtcr
- •Форматы представления чисел в эвм. Лекция №20. Формат чисел с фиксированной точкой и элементарные операции над ними.
- •Компьютерное представление целых чисел
- •Лекция №21. Формат чисел с плавающей точкой и элементарные операции над ними.
- •Компьютерное представление вещественных чисел
- •Цифро-аналоговые преобразователи. Лекция №22. Основные понятия и определения цифро-аналоговых преобразователей (цап). Виды погрешностей преобразования.
- •Параметры цап
- •Лекция №23. Цап на взвешивающей матрице и на матрице r-2r. Принцип работы. Достоинства и недостатки. Цап на взвешивающей матрице
- •Цап на матрице r-2r
Лекция №8. Команды переходов и сдвига. Остальные команды.
Для дальнейшего использования изученных команд следует более подробно разобраться в принципе их работы. Обычно требуется дополнительное рассмотрение действия, соответствующего выполнению команд сдвига и команд перехода.
s – номер бита в регистре флагов SREG (указывается десятичной цифрой от 0 до 7).
Команды перехода.
Команды перехода и вызова подпрограмм изменяют содержимое программного счетчика путем прибавления к нему или вычитания из него некоторого значения, являющегося операндом команды. Для удобства написания программы в качестве операндов в таких командах используются метки. Ассемблер сам вычисляет величину перехода и подставляет это значение в команду.
rjmp address - безусловный переход по указанному адресу.
breq address - переход по указанному адресу, если флаг Z=1
brne address - переход по указанному адресу, если флаг Z=0
brcc address - переход по указанному адресу, если флаг С=0
brcs address - переход по указанному адресу, если флаг С=1
brbc s,address - переход по указанному адресу, если разряд регистра SREG =0
brbs s,address - переход по указанному адресу, если разряд регистра SREG =1.
и т.д.
Обычно команды переходов находятся после команд, изменяющих содержимое регистра флагов SREG. Команды условного перехода (при условии равенства флагов), выполняются в два этапа. Сначала проверяется значение флага, а затем осуществляется переход или к указанной в команде метке (если флаг равен заданному значению), или к следующей команде программы (если флаг не равен заданному значению).
Если выполнялась команда сравнения, например, cpi r16,0x09 (сравнить содержимое регистра r16 с числом 9), то происходит вычитание числа 910 из содержимого регистра r16, при этом содержимое регистра r16 не изменяется, однако флаги Z и C устанавливаются соответствующим образом:
флаги |
r16 < 910 |
r16 = 910 |
r16 > 910 |
Z |
0 |
1 |
0 |
C |
1 |
0 |
0 |
По полученному значению флагов можно определить, если флаг С стал равен 1, то содержимое регистра r16 оказалось меньше числа 910. если флаг Z стал равен 1, то содержимое регистра r16 оказалось равно числу 910. Если оба флага равны нулю, то содержимое регистра r16 оказалось больше числа 910.
Допустим, что по условию задания подходит только тот случай, когда содержимое регистра r16 строго больше числа 910. В этом случае все неподходящие условия должны спровоцировать переход в другое место программы, называемое met1.
Также с помощью флага Z можно осуществлять проверку 8-и битовых данных на четность/нечетность. Для этого сначала проанализируем, чем четные данные в двоичном коде отличаются от нечетных. Если перевести числа в двоичный код, то видно, что все четные данные будут заканчиваться на логический 0, а все нечетные – на логическую 1. В этом случае нас интересует только один бит данных – самый младший (имеет вес 20). Для проверки этого бита, используем команду логического умножения на константу, в которой лог.1 находится только в интересующем нас разряде: andi r16,0b00000001. После логического умножения четного числа в регистре r16 получится число 010 (=> флаг Z=1). После логического умножения нечетного числа в регистре r16 получится число 110 (=> флаг Z=0). Значит достаточно просто проверить, чему стал равен флаг Z, и можно определить, четные данные были в регистре r16 или нечетные. Правда, сами данные в регистре r16 уже будут испорчены. Поэтому прежде чем проводить логическое умножение данных в регистре r16 для выяснения их четности/нечетности, следует скопировать их в какой-либо регистр.
Команды сдвига.
Эти операции производятся только над регистрами общего назначения. При этом МК AVR позволяют легко оперировать как знаковыми, так и бес знаковыми числами, а также работать с числами, представленными в дополнительном коде.
Также с помощью флага С можно осуществлять проверку 8-и битовых данных на четность/нечетность если использовать одну из команд сдвига. Т.к. при определении четности/нечетности нас интересует младший разряд данных, то удобнее использовать сдвиг данных вправо через флаг переноса С. После сдвига младший бит данных окажется во флаге С. Теперь достаточно просто проверить, чему равен флаг. Если С=1, то данные были нечетные, а если С=0, то – четные. Однако при таком способе проверки данные в регистре тоже будут испорчены. Для их восстановления следует сдвинуть содержимое регистра обратно – на один разряд влево.
Логические и циклические сдвиги обычно используются в программах умножения, деления и т.д., а арифметические при работе со знаковыми числами.
asr Rd - арифметический сдвиг вправо
lsl Rd - логический сдвиг влево
lsr Rd - логический сдвиг вправо
ror Rd - циклический сдвиг вправо
rol Rd - циклический сдвиг вправо