Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MPS_kaf12_8 / MPS_kaf12_8.doc
Скачиваний:
114
Добавлен:
27.03.2016
Размер:
3.27 Mб
Скачать

Назначение разрядов порта р1

Вывод порта

Альтернативная функция

Р1.0

Р1.1

Р1.2

Р1.3

Р1.4

Р1.5

Р1.6

Р1.7

CT0I С-вход регистра-защелки 0

CT1I С-вход регистра-защелки 1

CT2I С-вход регистра защелки 2

CT3I С-вход регистра-защелки 3

T2 Вход таймера Т2

RT2 Сброс таймера Т2

SCL Линия синхронизации I2C

SDA Линия данных I2C

Именно в соответствии с приведённой таблицей в коде программы, загруженной в симулятор dScope, обозначения P1.i заменены на соответствующие CTiI и обозначения (0х90.i). К обозначению порта Р1 добавляется адрес этого порта – (0х90) (рис. 1.9).

Рис. 1.9. Окно отладки программы, запись в аккумулятор

Выполняя программу по шагам, не только можно, но и нужно отслеживать изменение регистров и памяти. Так, результатом выполнения команды MOV A, P1, расположенной по адресу 8006H, является запись кода 00111111b (или 3Fh), находящегося в регистре P1, в регистр аккумулятора (см. рис. 1.9). Выполненные команды отмечаются знаком «+» в левой части строки. Красным цветом выделяется следующая по порядку выполнения команда.

Ход выполнения программы в МК зависит от значений сигналов от внешнего устройства. Для имитации изменения состояний сигналов от периферийного устройства на внешних контактах порта МК нужно во вкладке меню «Peripherals» выбрать «I/O-Ports», затем «Port1».

В исходном состоянии (до начала выполнения программы) в регистре порта P1 находятся одни «1», что соответствует настройке «по умолчанию» всех разрядов порта на ввод (рис. 1.10). После выполнения первой команды, расположенной по адресу 8000H, в окне Р1 отображается записанное в него значение 00111111, а после команды выдачи сигнала подтверждения ввода по адресу 800ЕH отображается код 01111111 (рис. 1.11).

Рис. 1.10. Исходное состояние порта Р1

Рис. 1.11. Загрузка кода в порт Р1

На рис. 1.12 показано окно кода программы в ситуации, когда после исполнения команды, расположенной по адресу 8010Н, микроконтроллер ждёт снятия сигнала разрешения, т.е. установки нулевого значения на контакте Р1.3.

Для изменения содержимого порта можно либо левой кнопкой мыши установить в нижней строке нужное (в данном случае нулевое) значение на соответствующем контакте порта, либо в окошке «Pins:» записать новое значение (рис. 1.13).

Рис. 1.12. Окно кода программы, ожидание снятия сигнала разрешения

Рис. 1.13. Установка кода «0» на контакте 3 порта Р1

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

Теперь о том, как составить программу для того, чтобы её можно было выполнять на МК в составе УЛС.

Несколько усложним задание. Значения результатов вычисления функции от трёх переменных должны засылаться во внутреннюю память данных, начиная с адреса, находящегося в регистре R0 (или R1). Эти регистры имеются во всех четырёх банках данных. Номер банка определяется значением битов 4 и 3 (S1 и S0) в слове состояния PSW. Программа должна выполняться на МК, входящим в состав УЛС. Внешнее устройство имитируется элементами, расположенными в ПЛИС и на стенде. Задать входные сигналы на стенде можно на регистрах 1-3 (12 сигналов), а для индикации имеется 16 светодиодов на индикаторах A, B, C, D, E и F. Подключение этих элементов к некоторой схеме на ПЛИС выполняется с помощью макроэлементов, входящих в библиотеку Maket. Но в составе стенда имеется уже законченная микропроцессорная система с подключенными к микроконтроллеру различными устройствами. Из портов для связи с ПЛИС и через неё с регистрами и индикаторами стенда может использоваться только порт Р4 [3].

Для порта Р4 можно сохранить выбранное ранее распределение разрядов для порта Р1. Данные вычислений должны записываться в память по адресу, находящемуся в регистре R0 (или R1) заданного банка регистров. Номер банка, с которым нужно будет работать, будет задаваться на входах Р4.5, Р4.4 (рис. 1.14).

Рис. 1.14. Распределение разрядов порта Р4 между входными и выходными сигналами

Чтобы видеть результат выполнения программы – запись в то или иное место памяти в зависимости от того, с каким банком работает программа, нужно в регистры R0 (или R1), относящиеся к разным банкам, записать разные начальные значения. Однако симулятор dScope не позволяет редактировать содержимое внутренней памяти данных. Потому необходимо в начале программы добавить команды начальной загрузки ячеек памяти, которые являются одновременно и регистрами R0 разных банков. Регистр R0 бан- ка 0 – это ячейка памяти с адресом 00h, регистр R0 банка 1 – ячейка с адресом 08h, регистр R0 банка 2 – 10h, регистр R0 банка 3 – 18h [1].

В имеющемся в настоящее время программном обеспечении поддерживаются только символические имена портов, имеющихся в базовой конфигурации МК (порты Р0-Р3). Для обращения к порту Р4 необходимо использовать его адрес, а именно 0C0h. При этом адрес отдельного контакта этого порта, например первого, будет иметь вид 0C0h.1. С учётом сказанного программа будет выглядеть следующим образом (рис. 1.15).

Рис. 1.15. Текст программы

В приведённом тексте программы нет комментариев, но и без этого нетрудно понять, каким образом номер банка регистров с входных контактов порта Р4 передаётся в слово состояния. Возможен и иной вариант организации пересылки. Для банка 0 начальное содержимое регистра R0 следует задавать не 3d, а, например, 60d. Это вызвано тем, что ячейки памяти данных, начиная с адреса 08h, отводятся по стек.

Именно в таком виде и должна быть оформлена программа при подготовке к лабораторной работе.

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