Контрольные вопросы
1. Микропроцессорные системы в ПЛИС типа «система на кристалле».
2. Архитектуры микропроцессорных систем. Архитектура микроконтроллеров AVR.
3. Процессор микроконтроллеров AVR. Структуры процессоров.
4. Функциональный состав микроконтроллера AVR.
5. Логическаяорганизация ОЗУ данных микроконтроллеров AVR.
6. Адресное пространство, сегменты памяти.
7. Регистровая и непосредственная адресация. Поясните на примерах
8. Способы определения регистров в программах.
9. Прямая адресация ячейки памяти.
10. Косвенная адресация ячейки памяти. Разрядность адреса. Указатели адреса. Косвенная адресация с пост-инкрементом и предекрементом. Поясните на примерах.
11. Начало программы на ассемблере AVR. Файл конфигурации.
12. Поясните особенности применения команд пересылки между двумя РОН, между РОН и портом, между РОН и памятью, между РОН и стеком, между памятью и портом.
13. Арифметические операции, способы адресации.
14. Арифметические операции над числами со знаком.
15. Типы команд умножения, особенности их выполнения, диапазоны чисел.
Работа 2. Обработка данных в микроконтроллерах avr.
Использование подпрограмм. Сложные программы собирают из подпрограмм, каждая из которых имеет в начале метку, являющуюся именем подпрограммы, а в конце – команду возврата из подпрограммы «ret». В основной программе должен быть инициализирован стек, который используется процессором для хранения адреса возврата из подпрограммы. Обращение к подпрограммам может быть многократным, выполняется командой «call<метка>». Подпрограммы можно отключать в процессе отладки символом комментария (;). При вызове подпрограмм адрес команды, расположенной за командой «call» (адрес возврата) сохраняется в стеке, а значение указателя стека уменьшается на 2. При возврате из подпрограммы этот адрес извлекается из стека и загружается в счетчик команд. Значение указателя стека соответственно увеличивается на 2. Для хранения адреса и каждой команды требуется 2 байта. Команды с абсолютной адресацией памяти содержат 4 байта. Подпрограммы целесообразно использовать при анализе работы различных вариантов программы, а также при выполнении различных заданий лабораторной работы.
Задание 2.1. Исследование выполнения логических операций
В отчете приведите подробное описание работы программы 2.1. Для каждой команды укажите метод адресации, исходные значения операндов, результат выполнения, признаки. Опишите работу процессора при вызове подпрограмм.
Логические операции работают с отдельными битами или полями двоичного слова, они используют регистровую, или непосредственную адресацию, формируют признаки результата в регистре состояния процессора SREG, которые используются при выполнении условных переходов.
В командах с регистровой адресацией указаны два регистра, где расположены операнды, результат помещается в первый из них, а его предыдущее содержимое теряется. В одноадресных командах арифметических операций после мнемоники указан регистр, содержимое которого модифицируется командой.
Команды с непосредственной адресацией в качестве второго операнда содержат байт данных, а в мнемониках – букву i (от Immediate- непосредственно). Команды с непосредственной адресацией используют для ввода в программу исходных данных, они удобны при работе с константами.
В
;Программа 2.1. ;Лог. операции ; строки 1 - 10
; из программы 1.1 call wwod ;11 call logic ;12 call pack ;13 call bit_op ;14 m: nop ;15 rjmp m ;16 wwod: ldi ttt, 0x0f ;17 ldi aa , 0x45 ;18 ldi ab , 0x67 ;19 ldi ac , 0x89 ;20 ldi ad , 0xab ;21 ret ;22 logic: and aa, ttt ;23 andi aa, 0b00000010 ;24 or ab, ttt ;25 tst ttt ;26 eor ac, ttt ;27 eor ac, ac ;28 ret ;29 pack: mov aa, ad ;30 and aa, ttt ;31 swap ttt ;32 and ab, ttt ;33 or aa, ab ;34 ret ;35 bit_op: bst ttt, 7 ;36 bld ad, 2 ;37 sei ;38 cli ;39 ret ;40
Операция «И»(andилиandi) применяется в следующих случаях.
1) Сброс в 0 отдельных разрядов регистра с помощью маски. Разряды регистра, которым в маске соответствует «0», будут сброшены в 0. В строке 23 старшая тетрада аккумулятора «аа» сбрасывается.
2) Проверка значений отдельных бит в регистре путем анализа признака нуля «Z» после выполнения операции «И» с маской. Нулевой результат, операции «И» означает, что в регистре равны нулю все разряды, для которых в маске записана «1». После выполнения строки 24 формируется z=1, это означает, что разряд 1, для которого в маске записана «1», в аккумуляторе «аа» до операции был равен «0». Для наглядности маска представлена в двоичной системе счисления.
Операция «ИЛИ»(or, илиori) позволяет выполнить действия.
1)Установка в «1» отдельных бит в регистре с помощью маски. Биты регистра, которым в маске соответствует «1», будут установлены в «1». В строке 25 в младшей тетраде регистра «ab» установятся единицы.
2) Тестирование – неразрушающая проверка перед операцией условного перехода, установка признаков числа «Z,N», - выполняется командой «tsta», которая эквивалентна команде «ora,a», но записывается короче. Значение числа при этом сохраняется без изменения. После выполнения строки 26 в SREG подучим признакиZ= 0, N = 0, так как в регистре ttt содержится число 0x0f.
Операция «сумма по модулю два»(eor) выполняет действия.
1) Инверсия определенных бит слова посредством маски. Биты регистра, которым в маске соответствует «1», инвертируются (строка 27). 2) Очистка регистра (28).
3) Проверка двух слов на абсолютное равенство. В единственном случае, когда операнды поразрядно совпадают, результат операции «еor» равен нулю, о чем свидетельствует признакZ= 1.
Упаковка- составление одного слова из полей других слов. Вначале поля, которые необходимо использовать, выделяются посредством операции «И» с маской, затем объединяются операцией «ИЛИ». В строках 31-34 содержимое регистра «aa» формируется из тетрад, принадлежавших регистрам «ab» и «ad». В строке 24 использована команда перестановки тетрад в байте.
Бит пользователя«t» содержится в регистре состояния процессора. В системе команд предусмотрена запись в бит «t» значения любого бита любого РОН (bst – BitStore, строка 36), загрузки бита «t» в любой разряд РОН (bld – BitLoad, строка 37,), а также условные переходы по значению «t».
Для всех битов регистра состояния процессора предусмотрены команды установки и очистки, например, флагу разрешения прерываний I будут соответствовать команды SEI (Set Interrupt) – разрешить прерывания и CLI (Clear Interrupt) – запретить прерывания (38, 39).
Неразрушающая проверка– операция сравнения двух чисел выполняется командамиCP-Compare,CPC-ComparewithCarry,CPI-ComparewithImmediate. Выполняется вычитание чисел, формируются признаки, но результат вычитания не фиксируется и исходные числа не изменяются.
Команды сдвиговпозволяют побитно сдвигать код операнда вправо (в сторону младших разрядов), или влево, бывают трех типов: логические, арифметические или циклические.
При логических сдвигах выдвигаемый бит записывается в качестве признака переноса в регистр состояния процессора, а освобождающийся бит заполняется нулем. Положительные числа при логическом сдвиге вправо делятся на 2, а при сдвиге влево – умножаются на 2. Арифметический сдвиг вправо делит на 2 число со знаком, знак числа сохраняется, значение старшего разряда сохраняется прежним (нулем или единицей), младший разряд записывается в качестве флага переноса.
Циклические сдвиги позволяют сдвигать биты кода операнда по кругу, по часовой стрелке при сдвиге вправо, или против часовой стрелки при сдвиге влево. При этом в кольцо сдвига входит флаг переноса. В бит флага переноса записывается значение старшего бита при циклическом сдвиге влево и младшего бита при циклическом сдвиге вправо. Соответственно, значение бита флага переноса будет переписываться в младший разряд при циклическом сдвиге влево и в старший разряд при циклическом сдвиге вправо.
Одноадресные команды модификации данных с регистровой адресацией COM (One.s Complement-обратный кол), NEG - дополнительный код, DEC , TST (Test for Zero or Minus), CLR (Clear Register), SER (Set all bits in Register).
Задание 2.2.В программу 2.1 добавьте подпрограмму формирования признака С=1, если в аккумуляторе заданное двоичное число, в отчете приведите результаты тестирования.
|
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
|
0101хххх |
0011хххх |
1001хххх |
0110хххх |
0111хххх |
1101хххх |
1011хххх |
0001хххх |
|
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
|
0101хххх |
1110хххх |
0001хххх |
0010хххх |
0100хххх |
1000хххх |
001хххх0 |
001хххх0 |
Задание 2.3. Составьте подпрограмму, выполняющую заданную упаковку. Байт аккумулятора «аа», содержащий биты аа7, аа6, … ,аа1 ,аа0, должен быть составлен из отдельных бит аккумуляторов ab, ac.
|
Вариант |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
|
aa7 aa6 |
ab6 ab7 |
ab7 ab6 |
ab5 ab4 |
ac5 ac4 |
ab6 ab7 |
ab3 ab2 |
ac7 ac6 |
ab7 ab6 |
ac0 ac1 |
ab7 ab6 |
ac4 ac5 |
ab7 ab6 |
|
aa5 aa4 |
ac7 ac6 |
ab5 ab4 |
ab3 ab2 |
ac3 ac2 |
ac7 ac6 |
ab1 ac5 |
ac5 ac4 |
ac0 ac1 |
ab7 ab6 |
ab5 ab4 |
ac6 ac7 |
ab5 ab4 |
|
aa3 aa2 |
ac5 ac4 |
ac1 ac2 |
ab1 ab0 |
ac1 ac0 |
ac5 ac4 |
ac4 ac3 |
ab0 ab1 |
ac2 ac3 |
ab5 ab4 |
ab3 ab2 |
ab3 ab2 |
ab3 ac0 |
|
aa1 aa0 |
ac3 ac2 |
ac3 ac4 |
ac1 ac2 |
ab5 ab6 |
ac3 ac2 |
ac2 ac1 |
ab2 ab3 |
ac4 ac5 |
ab3 ab2 |
ac2 ac3 |
ab1 ab0 |
ac1 ac2 |
В основной части программы выполните ввод различных исходных данных и обращение к подпрограмме, выполняющей заданную упаковку.
