2-12_Лабораторная_Основы микропроцессорной техники / ОМТ_lab_2
.docФедеральное Агентство по образованию РФ
Томский Межвузовский Центр дистанционного образования
Томский государственный университет
систем управления и радиоэлектроники (ТУСУР)
Кафедра промышленной электроники (ПрЭ)
Лабораторная работа №2
По дисциплине: «Основы микропроцессорной техники»
Тема: «Отладка прикладных программ для микропроцессора серии МК48»
(Учебные пособия: «Основы микропроцессорной техники» автор: Шарапов А.В., Томск-2002; 2003)
Выполнил:
Студент ТМЦДО
Гр.
Специальность: 210106(200400)
Ф.И.О.
логин
пароль
19 марта 2009 г.
Н-ск 2009
Цель работы: приобретение навыков отладки прикладных программ для однокристальных микроконтроллеров семейства МК48 с помощью программных средств: ассемблера, линковщика и эмулятора.
-
Создадим исходный код программы TEST1.asm, реализующей 8-канальный распределитель логической единицы по линиям порта Р1:
MOV A,#1
M1: OUTL P1,A
RL A
NOP
DJNZ R1,$
JMP M1
END
-
В результате выполнения программы TEST1 , единица в аккумуляторе циклически сдвигается влево, при выполнении команды DJNZ R1,$ содержимое R1 уменьшается от FF до 0. Замена команды NOP командой INC A приводит к изменению содержимого аккумулятора (прибавление 1 к содержимому А с каждым циклом). При замене RL на RR, происходит изменение направления сдвига, состояние триггера переноса С не изменяется.
2.1 В режиме PatchCode запишем программу временной задержки:
MOV R0,#0
DJNZ R0,$
2.2 С помощью счетчика циклов (Set Cycles), определили время выполнения программы задержки, оно составляет 514 циклов.
3.1 Запишем код программы PROG.asm:
EN I
JMP M1
JMP CLOK
M1: STRT CNT
INC A
MOVD P4,A
SWAP A
MOVD P5,A
JMP M1
CLOK: ENT0 CLK
RETR
END
3.2 Изменение содержимого порта Р2 , вызвано использованием четырех младших разрядов (Р2.0 – Р2.3) для подключения расширителя ввода/вывода (4-х разрядные порты Р4, Р5). При работающей программе, имитация программного прерывания (INT=0), вызывает программу обслуживания прерывания CLOK, управление передается по адресу 0003h (JMP CLOK). Прерывание по таймеру можно запретить, выполнив системный сброс или команду DIS TCNTI. При вызове подпрограммы указатель стека изменяется с 00 на 01, а в стек заносится адрес следующей команды. При возврате из подпрограммы по команде RETR – содержимое стека восстанавливается прежним. При наличии внешних событий, каждое событие увеличивает содержимое таймера/счетчика Т1, после того как в Т1 значение превысит FF, таймер/счетчик обнуляется и выставляется в tf единица.
4.1 Проверим на эмуляторе работу программы COMP.asm, формирующей в аккумуляторе двоично-десятичный код числа датчиков, информация с которых превышает пороговое значение, находящееся в аккумуляторе. Код программы 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
4.2 Работа программы COMP.asm: после выполнения команды ADD A,@R0, проверяется наличие флага переноса С, при отсутствии флага – происходит переход на метку М2, при наличии флага переноса (А < @R0) – выполняется обмен А и R2, к содержимому А добавляется #1 выполняется десятичная коррекция и производится обмен содержимого А и R2.
5.2 Разработаем и отладим программу (задание 12) TEST12.asm, которая выводит в линии порта Р1 – «бегущий» 0 меняющий направление. Код программы:
MOV A,#0FEH ;в А 11111110
M1: OUTL P1,A ;А в Р1
RL A ;сдвиг А влево
NOP ;холостая команда
DJNZ R1,$ ;временная задержка
JB7 M1 ;переход если бит А (b=7) единица
M2: OUTL P1,A
RR A ;сдвиг А вправо
NOP
DJNZ R1,$
JB0 M2 ;переход если бит А (b=0) единица
JMP M1 ;зацикливание программы
END
6. Ответы на контрольные вопросы:
-
SEL MB1 ;выбор первого банка ПП
JMP adr ;переход к подпрограмме adr
-
Для условного перехода из первой страницы программной памяти в третью необходимо чтобы команда перехода по условию указывала на команду JMP XXH, где ХХ-8ми разрядный адрес продолжения программы в третьей странице, т.к команда JMP позволяет передать управление в переделах банка памяти.
-
Системный сброс устанавливает PC и SP в нулевое состояние, выбирает RB0 и МВ0, запрещает прерывания, останавливает таймер/счетчик, сбрасывает в нуль флаги пользователя F0 и F1, запрещает выдачу тактовых импульсов на вывод Т0, подготавливает порты Р1 и Р2 для приема информации (выводит в них байт единиц).
-
Время выполнения программы можно оценить с помощью счетчика циклов (Set Cycles).