2-Лабораторная_Основы микропроцессорной техники_5 / laba_2omt1
.docМинистерство общего образования Российской Федерации
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра ПрЭ
«Отладка прикладных программ для микроконтроллера МК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 с помощью программных средств инструментальной ЭВМ, а также познакомились с использованием ассемблера, линковщика, и эмулятора.