Рефетека.ру / Информатика и програм-ие

Контрольная работа: Программирование микроконтроллера

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ВОЗДУШНОГО ТРАНСПОРТА

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

ГРАЖДАНСКОЙ АВИАЦИИ»

Кафедра радиотехнических устройств


Контрольная работа

по дисциплине «Микропроцессорные устройства РЭО»


студента 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

Зацикливание программы:

LOOP:

RJMP LOOP

ПОДПРОГРАММА:

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 ; возврат из подпрограммы.


Литература


Яманов Д.Н., Жаворонков С.С. Микропроцессорные устройства РЭО. Пособие по изучению дисциплины и выполнению контрольных работ. – М.: МГТУ ГА, 2008. – 24 с.

Калабеков Б.А. Микропроцессоры и их применение в системах передачи и обработки сигналов: Учебное пособие для вузов. – М.: Радио и связь, 1988. – 368 с.

Похожие работы:

  1. Программирование микроконтроллеров
  2. • Работа микроконтроллера и его программирование
  3. • Микроконтроллеры AVR
  4. • Структура микроконтроллера
  5. • Архитектура микроконтроллеров
  6. • 8-разрядные КМОП RISC микроконтроллеры с ...
  7. •  ... к методическим указаниям Программирование микроконтроллеров
  8. •  ... системы на базе микроконтроллера для терморегулятора ...
  9. •  ... системы на базе микроконтроллера для спортивного ...
  10. • Организация обмена информацией между микроконтроллером ...
  11. • Разработка часов на микроконтроллере PIC16F84
  12. • Микроконтроллеры семейства AVR фирмы Atmel
  13. •  ... системы АОНа на базе микроконтроллера
  14. • Система управления механизмом зажигания
  15. •  ... термометра на основе микроконтроллера ATmega 128 (с ...
  16. • Разработка системы теплоснабжения
  17. • Микроконтроллерный регулятор температуры
  18. • Программа-отладчик микроконтроллера I8051 (К1816ВЕ51)
  19. • Цифровой термометр на микропроцессоре AVR-MEGA 128
Рефетека ру refoteka@gmail.com