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

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

Томский Университет Систем Управления и Радиоэлектроники (ТУСУР)

Лабораторная работа №2

по предмету "Основы микропроцессорной техники"

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

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

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

2. Подготовить исходный текст исследуемой программы test.asm, реализующий 8-канальный распределитель уровня логической 1 по линиям порта p1:

mov a,#1

m1: outl p1,a

rl a

nop

djnz r1,$

jmp m1

end

В регистр a загружается 1 и в процессе выполнения программы циклически сдвигается влево, после задержки, вызванной командой djnz r1,$ содержимое аккумулятора загружается в порт р1. Регистр r1 изменяется в цикле djnz r1,$ от 0ffh до 0h. Далее управление передаётся следующей команде.

Модифицируем программу, как указано в задании.

mov a,#1

m1: outl p1,a

rl a

inc a

djnz r1,$

jmp m1

end

Аккумулятор в цикле стал заполняться единицами и обнуляться. Так как после сдвига 1 влево самый младший бит аккумулятора обнуляется, команда inc a добавляет единицу в этот бит, и так до полного заполнения регистра a. Когда аккумулятор заполнен единицами, команда inc a обнуляет его (0ffh + 1h = 0h).

mov a,#1

m1: outl p1,a

rr a

nop

djnz r1,$

jmp m1

end

Триггер переноса с при выполнении циклических сдвигов не изменяется.

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

mov r0,#0

djnz r0,$

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

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

en i

jmp m1

jmp clock

m1: strt cnt

inc a

movd p4,a

swap a

movd p5,a

swap a

jmp m1

clock: ent0 clk

retr

end

Порт р2 меняется потому что сигнал на порт р4 идёт через порт р2.

Действительно, при int=0 выполняется подпрограмма обслуживания clock.

При наличии прерывания управление программы передаётся по адресу 0dh.

Запретить прерывание может команда dis i.

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

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

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

mov r2,#0

mov r0,#32

mov r7,#32

cpl a

mov r1,a

m1: mov a,r1

add a,@r0

jnc m2

xch a,r2

add a,#1

da a

xch a,r2

m2: inc r0

djnz r7,m1

mov a,r2

Программа подсчитывает количество ненулевых элементов массива, находящегося во внутреннем ОЗУ по адресам 20h – 3fh. Результат выполнения хранится в регистре r2.

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

Массив 20h – 27h переместить в массив 28h – 2fh внутреннего ОЗУ данных в обратной последовательности.

Текст программы prg.asm:

mov r0,#20h ; Начальный адрес первого массива

mov r1,#2fh ; Конечный адрес второго массива

mov r7,#8h ; Число элементов массива

m1: mov a,@r0 ; Пересылка байта из РПД в А

mov @r1,a ; Пересылка байта из А в РПД

inc r0 ; Наращивание адреса первого массива

dec r1 ; Декремент адреса второго массива

djnz r7,m1 ; Цикл обработки массивов

end ; Конец трансляции

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

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

О. sel mb1 ; Выбор первого банка ПП

call delay ; Вызов подпрограммы

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

О. Системный сброс устанавливает pc и sp в нулевое состояние, выбирает rb0 и mb0, запрещает прерывания, останавливает таймер/счётчик, сбрасывает в нуль флаги пользователя f0 и f1, запрещает выдачу тактовых импульсов на вывод t0, подготавливает порты р1 и р2 для приёма информации (выводит в них байт единиц).

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

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