Скачиваний:
22
Добавлен:
23.06.2014
Размер:
37.38 Кб
Скачать

Министерство общего образования Российской Федерации

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра ПрЭ

«Отладка прикладных программ для микроконтроллера МК48»

Лабораторная работа по дисциплине «Основы микропроцессорной техники»

Выполнил студент

XXXXXXXX

Проверил преподаватель

Шарапов А. В.

XXXX 2005

1. Цель работы:

Целью лабораторной работы является приобретение навыков отладки прикладных программ для однокристальных микроконтроллеров семейства МК48 с помощью программных средств инструментальной ЭВМ, в качестве которой используется компьютер IBM PC: ассемблера, линковщика, и эмулятора.

2. Согласно пункта 6.2 методических указаний подготовил исходный текст исследуемой программы TEST.asm.

MOV A,#1

M1: OUTL P1,A

RL A

NOP

DJNZ R1,$

JMP M1

END

С помощью ассемблера и редактора связей были сформирован файл TEST.hex. данный файл был загружен в эмулятор AVOSET SISTEMS INC

При выполнении программы в пошаговом режиме наблюдаем за работой эмулятора, размещением ресурсов микроконтроллера на экране, значением регистров и состоянием портов ввода-вывода, а также за изменениями, происходящими в процессе выполнения программы.

В регистр А загружается 1 при выполнении второй команды 1 выводится в порт Р1, далее по команде RL A содержимое аккумулятора циклически сдвигается влево, после задержки вызванной командой DJNZ R1,$ содержимое аккумулятора загружается в порт р1. Содержимое регистра R1 изменяется в цикле DJNZ R1,$ от 0FFH до 0H. Далее управление передаётся команде безусловного перехода JMP. В результате выполнения программы биты порта Р1 поочерёдно, начиная с младшего, принимают единичное значение, что создает эффект бегущего огня.

Модифицируем программу, как указано в задании в режиме дизассемблирования, для чего заменяем машинный код команды NOP на код 17Н. После замены команды NOP командой INC A, число в аккумуляторе после сдвига увеличивается на единицу и после задержки выводится в порт.

Устанавливаем в программном счетчике PС адрес команды RL A 0003H, входим с помощью меню в режим PatchCode и изменяем команду на RR A восстановив команду NOP, после изменения команды сдвиг происходит в обратном направлении от старшего бита к младшему. Состояние триггера переносов не изменяется.

В режиме Patch Code записываем программу временной задержки:

MOV R0,#0

DJNZ R0,$

Счетчик циклов показал 514 циклов.

Запишем программу prog.asm.

EN I ; Разрешение прерываний

JMP M1 ; Переход к основной программе

JMP CLOK ; Переход к п/п обслуживания I

M1: STRT CNT ; Старт счетчика внешних событий

INC A ; Двоичный счетчик в

; аккумуляторе

MOVD P4,A ; В дополнительный порт Р4

SWAP A ; Обмен полубайтов аккумулятора

MOVD P5,A ; В дополнительный порт Р5

SWAP A ; Восстановление содержимого А

JMP M1 ; Зацикливание программы

CLOK: ENT0 CLK ; Выдача синхросигналов на Т0

RETR ; Возврат из п/п прерывания

END ; Конец программы

Состояние порта Р2 меняется потому что младшая тетрада аккумулятора поступает на порты Р4,Р5 через порт Р2.

При INT=0 выполняется подпрограмма обслуживания clok.

При наличии прерывания управление программы передаётся по адресу 03Н который является базовым адресом обслуживания прерываний.

Запретить прерывание можно командой DIS I.

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

При переполнении таймера/счётчика флаг таймера устанавливается в 1. После переполнения устанавливаются флаги TOV и TF.

Проверить на эмуляторе работу программы COMP.asm, формирующей в аккумуляторе двоично-десятичный код числа датчиков, информация с которых превышает пороговое значение, находящееся в аккумуляторе.

MOV R2,#0 ; Накопитель результата

MOV R0,#32 ; Начальный адрес массива

MOV R7,#32 ; Число элементов массива

CPL A ; Инверсный код константы

MOV R1,A ; в R1

M1: MOV A,R1 ; Сравнение очередного

ADD A,@R0 ; элемента с константой

JNC M2 ; Переход, если < или =

XCH A,R2 ; Двоично-десятичный

ADD A,#1 ; счетчик в R2

DA A

XCH A,R2

M2: INC R0 ; Наращивание адреса

DJNZ R7,M1 ; Цикл обработки массива

MOV A,R2 ; Число N в аккумуляторе

Программа COMP.ASM, просматривает 32 ячейки памяти, начиная с адреса 20Н, сравнивая их содержимое с константой, инверсный код которой находиться в R1.

Количество элементов массива, значение которых превышает значение константы, записывается в регистр R2, а по окончании программы в аккумулятор.

Для наглядности добавляем после команды :

MOV R0,#32

MOV @R0,#1

В результате выполнения программы в аккумулятор записалось число 1.

Индивидуальное задание:

Необходимо заполнить все четные элементы РПД логическими нулями, а нечетные – единицами;

MOV R0,#32 ; Начальный адрес массива

MOV R7,#32 ; Число элементов массива

M1: CPL A ; инверсия аккумулятора

XCH A,@R0 ; обмен аккумулятора и ячейки РПД

INC R0 ; Наращивание адреса

DJNZ R7,M2 ; Цикл обработки массива

JMP M3 ; безусловный переход

M2: INC R0 ; Наращивание адреса

DJNZ R7,M1 ; Цикл обработки массива

M3: END ; останов программы

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

1. Каким образом можно вызвать подпрограмму, находящуюся в первом банке памяти программ, из программы, расположенной в нулевом банке?

Командой SEL MB1 ; Выбираем первый банк ПП

CALL prog ; Вызов подпрограммы

2. Как можно организовать условный переход из первой страницы программной памяти к третьей?

По команде CALL

3. Какие действия происходят при системном сбросе микроконтроллера?

Системный сброс устанавливает PC и SP в нулевое состояние, выбирает RB0 и MB0, запрещает прерывания, останавливает таймер/счётчик, сбрасывает в нуль флаги пользователя F0 и F1, запрещает выдачу тактовых импульсов на вывод T0, подготавливает порты P1 и P2 для приёма информации (выводит в них байт единиц).

4. Каким образом можно воспользоваться эмулятором для определения времени выполнения программы?

С помощью счётчика циклов (Set Cycles) можно узнать количество циклов программы, зная частоту кварцевого резонатора узнаем время выполнения программы в микросекундах.

Вывод:

В результате выполнения данной лабораторной работы мы приобрели навыки отладки прикладных программ для однокристальных микроконтроллеров семейства МК48 с помощью программных средств инструментальной ЭВМ, а также познакомились с использованием ассемблера, линковщика, и эмулятора.

Соседние файлы в папке 2-Лабораторная_Основы микропроцессорной техники_5
  • #
    23.06.2014656 б14comp1.asm
  • #
    23.06.201437.38 Кб22laba_2omt1.doc
  • #
    23.06.2014127 б15prog.asm
  • #
    23.06.2014520 б14proga.asm
  • #
    23.06.201494 б14test.asm