Контрольная работа Программирование микроконтроллера
Работа добавлена на сайт bukvasha.net: 2015-10-25Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
от 25%
договор
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ВОЗДУШНОГО ТРАНСПОРТА
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
ГРАЖДАНСКОЙ АВИАЦИИ»
Кафедра радиотехнических устройств
Контрольная работа
по дисциплине «Микропроцессорные устройства РЭО»
студента 4 курса заочного факультета
Храпова Владимира Алексеевича
Специальность 160905
Шифр: РС-071511
Адрес: Ростовская область, Чертковский район, пгт Чертково
Москва 2010
Исходные данные.
Таблица 1.
№ | Номер варианта задания | Адресация при пересылке данных из ОЗУ в РОНы | Адресация при пересылке данных из РОНов в ОЗУ | SP |
1 | 1 | Прямая | косвенная | 10F1 |
Таблица 2.
№ | A1 | A2 | A3 | A4 | A5 | A6 | M1 | M2 | M3 | M4 |
1 | 17 | 5 | 67 | 76 | 65 | 12 | 0041 | 0043 | 0044 | 0045 |
Задание на контрольную работу
· Сложить два числа 17, 5 и 67 (без учета единица переноса), результат уменьшить на единицу и записать в ячейку ОЗУ 0041.
· Загрузить ячейки ОЗУ 0043 и 0044 числами 76 и 65 соответственно, используя косвенную адресацию (регистровые пары Y и Z).
· Записать в регистр R16 число 12.
· Осуществить вызов подпрограммы, в которой требуется:
¾ сохранить указатели Y, Z и содержимое регистра R16 в стеке. Начальный адрес стека 10F1;
¾ записать в регистр R16 содержимое ячейки ОЗУ 0045 и сравнить с содержимым ячейки ОЗУ 0043, в случае неравенства прибавить к содержимому регистра R16 на единицу;
¾ извлечь сохраненные данные из стека, поменяв содержимое указательных регистров X и Y местами.
· При пересылке данных из ОЗУ в РОНы использовать прямую адресацию, при пересылке данных из РОНов в ОЗУ использовать косвенную адресацию (если вид адресации не указан в задании явно).
· Все числа и адреса – шестнадцатеричные.
· Выбор команд для программы.
В начале программы необходимо задать адрес стека, где будут сохранены необходимые данные при вызове подпрограммы. Указатель стека реализован в виде двух регистров ввода–вывода, для записи данных в регистры необходимо использовать команду OUT:
· для записи в регистр SPL (младший разряд):
OUT SPL, Rr ;
· для записи в регистр SPH (старший разряд):
OUT SPH, Rr ,
где r – номер регистра, из которого пересылаются данные в стек (r=0…31).
· Для непосредственной записи операндов в РОНы используем команду LDI Rd, k ,
где d – номер регистра, в который записывается операнд (d=16…31);
k – операнд.
· Для пересылки данных из ОЗУ в РОНы используем команду косвенной адресации
LD Rr, X ;
LD Rr, Y ;
LD Rr, Z ,
где X, Y, Z – 16-ти разрядные регистры для хранения адреса ячейки ОЗУ, из которой пересылаются данные. Каждый из этих регистров имеет в своем составе два РОНа. Структура регистров представлена в таблице 3.
Таблица 3
16-ти разрядный регистр | Младший разряд | Старший разряд |
X | R26 | R27 |
Y | R28 | R29 |
Z | R30 | R31 |
| РОН |
· Перед использованием команды LD адрес ячейки ОЗУ должен быть предварительно записан в соответствующий регистр, который используется в команде.
· Для прямой адресации данных из РОНов в ОЗУ используем команду STS n, Rr , где n – адрес ячейки ОЗУ.
· Для косвенной адресации данных из РОНов в ОЗУ используем команду
ST X, Rr ;
ST Y, Rr ;
ST Z, Rr .
· Адрес ячейки ОЗУ должен быть предварительно записан в один из регистров X, Y, или Z.
· Для выполнения операции сложения используем команду ADD Ra, Rb , где a, b – номера регистров, где хранятся операнды (a=0…31, b=0…31). Результат будет записан в регистр Ra.
· Для уменьшения содержимого регистра на единицу используем команду DEC Rr .
· Для выполнения требуемой в задании операции сравнения используем команду CPSE Ra, Rb .
· Команда сравнивает содержимое регистров Ra, Rb, и в случае равенства пропускает следующую команду.
· Для вызова подпрограммы используем команду CALL .
· Для выхода из подпрограммы и возврата в программу используем команду RET .
· В подпрограмме для сохранения содержимого регистра Rr в стеке используем команду PUSH Rr .
· Для извлечения из стека в регистр Rr используем команду POP Rr.
· При этом учитываем то, что данные должны извлекаться из стека в порядке, обратном загрузке – «последний вошел – первый вышел».
· Для «зацикливания» программы используем команду RJMP.
Текст программы.
Инициализация указателя стека:
Адрес стека 10F1, для его задания в регистр SPL помещаем младший байт ; F6, в регистр SPH – старший 10.
· LDI R20, $F1 ; загрузка регистра R20 младшим байтом адреса начала стека
· OUT SPL, R20 ; загрузка младшего байта указателя стека из регистра
· LDI R20, $10 ; загрузка регистра R20 старшим байтом адреса начала стека
· OUT SPH, R20 ; загрузка старшего байта указателя стека из регистра
Выполнение сложения чисел 17, 5 и 67:
· LDI R17, $17 ; загрузка регистра R16 числом 17
· LDI R18, $5 ; загрузка регистра R17 числом 5
· LDI R19, $67 ; загрузка регистра R18 числом 67
· ADD R17, R18; суммирование содержимого регистров R17, R18
· ADD R17, R19 ; суммирование содержимого регистров R17, R19
· DEC R17 ; уменьшение на единицу содержимого регистра R17
· LDI R30, $41 ;
· LDI R31, $00 ;
· ST Z , R17 ; загрузка ячейки ОЗУс адресом 0075 значением из регистра R17
Загрузка ячеек ОЗУ 0043 и 0044 числами 76 и 65 соответственно:
· LDI R20, $76 ; загрузка регистра R19 числом 76
· LDI R21, $65 ; загрузка регистра R20 числом 65
Загрузка в регистровую пару X адреса ячейки ОЗУ 0043:
· LDI R26, $43
· LDI R27, $00
Загрузка в регистровую пару Y адреса ячейки ОЗУ 0044:
· LDI R28, $44
· LDI R29, $00
· ST X, R20 ; загрузка ячейки ОЗУ с адресом 0043 значением из регистра R20
· ST Y, R21 ; загрузка ячейки ОЗУ с адресом 0064 значением из регистра R21
· LDI R16, $12 ; загрузка регистра R16 числом 12
· CALL ROUT ; вызов подпрограммы ROUT
Зацикливание программы:
·
· RJMP
ПОДПРОГРАММА:
· ROUT:
Сохранение указателя X в стеке:
· PUSH R26
· PUSH R27
Cохранение указателя Y в стеке:
· PUSH R28
· PUSH R29
· LDS R16, $0045 ; загрузка регистра R16 содержимым ячейки ОЗУ с адресом 0045
· LDS R17, $0043 ; загрузка регистра R17 содержимым ячейки ОЗУ с адресом 0043
Загрузка в регистровую пару X адреса ячейки ОЗУ 0065:
· CPSE R16, R17 ; пропустить следующую команду, если значения регистров R16 и R17 равны
· INC R16 ; увеличить содержимое регистра R16 на единицу
Извлечение сохраненных данных из стека и замена содержимого указательных регистров:
Извлечение сохраненного содержимого Y в X:
· POP R27
· POP R26
Извлечение сохраненного содержимого X в Y:
· POP R29
· POP R28
· RET ; возврат из подпрограммы.
Литература
1. Яманов Д.Н., Жаворонков С.С. Микропроцессорные устройства РЭО. Пособие по изучению дисциплины и выполнению контрольных работ. – М.: МГТУ ГА, 2008. – 24 с.
2. Калабеков Б.А. Микропроцессоры и их применение в системах передачи и обработки сигналов: Учебное пособие для вузов. – М.: Радио и связь, 1988. – 368 с.