Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_AVR_2013_1-2.doc
Скачиваний:
24
Добавлен:
15.04.2015
Размер:
252.93 Кб
Скачать

Контрольные вопросы

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

программе 2.1 – использованы подпрограммы, начало аналогично программе 1.1 (строки 1-10). Основная программа содержит вызовы подпрограмм, которые выполняют ввод данных (wwod:), логические операции (logic:), упаковку (pack:), битовые операции (bit_op:), а завершается бесконечным циклом (строки 11-16).

Операция «И»(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

В основной части программы выполните ввод различных исходных данных и обращение к подпрограмме, выполняющей заданную упаковку.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]