Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовой проект / КР1816ВЕ48..doc
Скачиваний:
135
Добавлен:
21.02.2014
Размер:
229.38 Кб
Скачать

14. Имитатор.

Внешнее описание. На рисунке показан внешний вид имитатора.

Весь экран разделён на 5 функциональных окон:

Регистры - просмотр двух банков регистров микроконтроллера;

Флаги - все флаги центрального процессора микроконтроллера;

Основные узлы МК48 - линии ввода-вывода, а также содержание аккумулятора, таймера, РС, флаги таймера;

ОЗУ - Внутренняя память данных микроконтроллера - 64 байта;

Программа (ПЗУ) - содержимое программы, которую будет выполнять контроллер.

Внизу имеется длинная командная строка. Она предназначена для ввода команд управления имитатором.

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

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

Программа для МК в имитаторе. Программа находиться в окне ПЗУ. Это:

Адрес - адрес команды;

Код - код команды;

Деассемблер - текстовое представление команды;

Комментарий - комментарий к данной команде.

Однобайтовые команды занимают одну строчку: напротив адреса стоит код этой команды и её текстовое представление. Двухбайтовые команды имеют некие отличия. Второй байт располагается следом за первым. При этом он не деассемблируется, а просто печатается как есть в поле деассемблера. Комментарий ко второму байту не вводится – он игнорируется. На второй байт нельзя поставить точку останова, текущий адрес, его нельзя (не надо) выполнять.

Будьте внимательны! Если в программе подряд стояло 2 однобайтовые команды, а потом первую вы заменили на двухбайтную, то вторая команда уничтожится. Можно было бы конечно отодвинуть вторую команду (и все последующие) на более старшие адреса, но при этом все адреса в командах переходов, указывающих на отодвинутые команды, окажутся неверными. При необходимости серьёзного редактирования текста программы лучше всего внести все необходимые изменения в исходный *.ASM-файл, и потом, оттранслировав его, вновь загрузить в имитатор.

Справочная система. Если в процессе работы с имитатором возникают какие-то проблемы, необходимо обратиться к справочной системе. Для этого можно в любой момент нажать F10. С помощью стрелок можно перемещать курсор по окну помощи. Чтобы перейти по выделенной ссылке, надо навести курсор на неё и нажать Ввод. Backspace - возврат на предыдущую тему. Esc - закрытие окна помощи.

15. Тестирование.

Сначала в качестве теста бралась простая программа для МК48:

Адр.

Команда

Код

0

Mov a,0

35

1

0

2

Outl p1,a

57

3

Mov a,#1

35

4

1

5

Outl p1,a

57

6

Jmp 0

4

7

0

Суть этой программы заключается в том, что на нулевую линию порта номер один выдавалось последовательно то логическая 1, то 0.

Эта программа успешно транслировалась и загружалась в имитатор. Имитатор показывал, что линия 0 порта Р1 действительно постоянно изменяет своё значение.

Однако наиболее убедительным доказательством того, что всё работает правильно, безусловно, является проверка работоспособности этой программы в самом микроконтроллере.

К линии Р1.0 микроконтроллера был подсоединён светодиод. Программа загружалась в ОЗУ программатора и потом отдавалась на выполнение микроконтроллером в пошаговом режиме. Как и следовало ожидать, всё работало правильно.

Для более полной проверки основных узлов контроллера данная программа модифицировалась:

А) Операции условного перехода

Б) Тест таймера

Mov r1,#255

Начальная инициализация

0 jmp Старт

Безусловный переход к началу программы

#define Цикл

Матка адреса

7 mov a,#1

Прерывание от таймера

Djnz r1, Цикл

Декремент и переход, если не 0

Outl p1,a

Мигаем светодиодом

Mov a,#1

Мигание светодиодом

Mov a,#0

 

Outl p1,a

 

Outl p1,a

 

Mov a,#0

 

Retr

Возвращаемся

Outl p1,a

 

#define Старт

Начало программы

Jmp Цикл

Повторяем цикл

Strt t

Запуск таймера

 

 

En tcnti

Разрешение прерываний от таймера

 

 

#defile Ожид

Бесконечный цикл

 

 

Jmp Ожид

 

 

В) Тест входа ЗПР

Г) Датчик случайных чисел 0h-Fh

0 jmp Старт

Безусловный переход к началу программы

En i

Разрешение внешнего прерывания

3 mov a,#1

Мигание светодиодом

jmp Старт

Переход к началу программы

3 Outl p1,a

 

3 Mov a,#15

Загрузка в аккумулятор маски 00001111В

Mov a,#0

 

Anl a,r4

Копирование младшей тетрады r4 в а

Outl p1,a

 

Outl p1,a

Выдача в порт числа

Retr

Возврат

Retr

Возврат

#define Старт

Начальный адрес программы

#define Старт

Начало программы

En i

Разрешение внешних прерываний

Inc R4

Постоянный инкремент R4

#defile Ожид

Бесконечный цикл

Jmp Старт

 

Jmp Ожид

 

 

 

Текст данных тестов не предназначен для прямой записи в МК. Его сначала надо оттранслировать.

А) В этом примере очень долго выполняется цикл декремента регистра. И только тогда, когда в регистре R1 окажется ноль, управление передается подпрограмме, которая быстро мигает светодиодом и вновь передаёт управление на начало цикла. Данную программу на микроконтроллере лучше всего выполнять не в пошаговом режиме, а на полной скорости. При этом получается, что светодиод горит еле-еле.

Б) Данная программа тестирует внутренний таймер в режиме непрерывного счёта. Внешние проявления этой программы почти такие же, как и у предыдущей. Для возникновения прерывания от таймера необходимо, чтобы его значение перевалило (точнее, попыталось перевалить) за 255. Таймер считает лишь каждый 32 такт процессора. В итоге светодиод должен гореть ещё слабее, чем в тесте а). Поэтому не удивительно, что я вообще практически ничего не увидел. Но на экране осциллографа импульсы вывода Р1.0 были хорошо видны. Можно даже примерно рассчитать их частоту:

F = Fпроцессора : 32 : 256 = 49 Гц.

Получается неплохой генератор с довольно высокой точностью (точность кварца 3 знака). Путём установки начального значения таймера можно получить различные частоты с небольшим шагом.

В) Данная программа мигает светодиодом при подаче на МК внешнего прерывания.

Г) На основе этой тестовой программы можно продемонстрировать работу микроконтроллера с более сложным внешним оборудованием, чем светодиод. На этот раз к младшей тетраде порта 1 был подключён двоично-десятичный дешифратор, нагруженный на ЖК-экран.

В основе данной программы лежит бесконечный цикл, в котором постоянно увеличивается регистр R4. В произвольный момент человек нажимает кнопку, соединённую со входом ЗПР. Происходит выполнение подпрограммы обслуживания внешнего прерывания, в ходе которой на порт 1 выводится младшая тетрада регистра R4, после чего управление опять передаётся бесконечному циклу. МК удерживает линии порта ввода/вывода в установленном состоянии, и поэтому всё время между нажатиями кнопок на индикаторе будет видно значение, ранее выведенное в порт.

Следует отметить, что числа, получаемые на описанном устройстве, являются действительно случайными, так как регистр R4 инкрементируется с частотой более 100кГц, а нажатие человеком на кнопку, по сравнению с такими частотами, происходит очень медленно.

Соседние файлы в папке курсовой проект