Структура и работа портов ввода-вывода МК
PAGE 3
Дисциплина «Микроконтроллеры в системах управления», 3-й курс, семестр 6. Модуль 2 Тема 4
Модуль 2 Тема 4 Структура и работа портов ввода-вывода МК
4.1 Назначение, и структура параллельных портов в составе МК MCS-51
Порты ввода-вывода это буферные ячейки памяти. Функционально они похожи на традиционные регистры, т.е. одна группа их информационных линий подключена к внутренней шине МК, а другая на внешние выводы микросхемы МК (см. рис. 2.1).
Порты ввода-вывода используются для временного хранения данных во время пересылки информации между микроконтроллером и внешними устройствами.
Порты построены на основе регистров, но для программиста выглядят как обычные ячейки памяти. Таким образом, в программе обращение к любому внешнему устройству реализуется как обращение к порту ввода-вывода, к которому подключено данное внешнее устройство.
МК МCS-51 имеет 32 линии ввода-вывода, объединенные в четыре восьмиразрядных порта Р0, P1, P2 и Р3. Каждая линия может быть использована как для ввода, так и для вывода данных под управлением программы.
Каждый порт параллельного ввода-вывода состоит из буферных усилителей с третьим состоянием и регистра-фиксатора. Именно этот регистр имеет имя РХ.
4.2 Использование портов в минимальной конфигурации МК-системы
Как обсуждалось в теме 2 (раздел 2.2), вычислительная система на основе микроконтроллера (МК-система) может быть построена в двух вариантах минимальная и шинная.
Минимальная конфигурация все внешние устройства системы (датчики, исполнительные устройства, элементы индикации и управления) подключаются непосредственно к портам МК или к отдельным выводам портов.
При минимальной конфигурации МК-системы использование портов полностью определяется программистом (что передавать и в каком направлении). Поэтому рассмотрим два базовых режима:
- ввод из порта (чтение порта);
- вывод через порт (запись в порт).
Ввод из порта
Используется, если к порту подключены источники сигналов, например, кнопки, тумблеры, концевые датчики или выходы других микросхем.
Действия программиста:
1) Настроить порт на режим ввода нужно записать в порт число FFh (все “1”):
например, для порта Р0 это можно сделать командой (один раз в программе)
MOV P1, #0FFh
Примечание: такая пересылка будет настраивать порт на режим ввода только в случае, если к порту подключены источники сигнала.
2) Далее можно много раз читать текущую информацию с внешних линий порта (т.е. от источника сигнала), например, командами
MOV A, P1 или MOV R3, P1
Важно понимать, что такая команда пересылает в (А) или в (R3) именно уровни сигналов с внешних линий МК, а не “1”, только что записанные в регистр-фиксатор порта.
Аналогичные действия можно выполнять для отдельных линий порта, обращаясь к ним с помощью битового селектора, например:
SETB P1.3 ; настроить линию 3 порта Р1 на ввод
MOV C, P1.3 ; прочитать сигнал на линии P1.3 в бит С (регистр PSW)
или
JB P1.3, m1 ; если сигнал на линии P1.3 равен “1”, перейти на m1
Вывод через порт
Используется, если к порту подключены приемники сигналов, например, индикаторы, исполнительные устройства (реле) или входы других микросхем.
Действия программиста:
- Настройку порта выполнять не нужно, поскольку режим вывода обеспечивается подключением приемника сигнала к линиям порта.
- Вывод через порт выполняется командами байтовой пересылки:
MOV P1, #0FFh ; такая команды выведет “1” на все линии порта Р1
Сравните: при подключении источников сигнала эта команда нужна для настройки порта на ввод
или MOV P2, A ; вывод байта из аккумулятора в порт Р2
Также можно использовать команды битовых операций, например:
SETB P0.2 ; Установка “1” на линии 2 порта Р0
CLR P3.4 ; Установка “0” на линии 4 порта Р3
Важно: информация, выданная в порт, удерживается на внешних выводах до тех пор, пока новая информация не будет записана в этот же порт.
4.3 Подключение простых устройств к портам МК
1) Микросхемы, выполненные по технологии ТТЛ, можно подключать непосредственно к портам МК. При этом нужно соблюдать паспортную нагрузочную способность портов по выходу: 8-ТТЛ для порта Р0 и 4-ТТЛ для других портов.
2) Подключение кнопок и переключателей нужно выполнять таким образом, чтобы при любом положении контактов на входе порта не было «неопределенного потенциала»:
- для сигналов, которые формируются с помощью механических переключателей и обрабатываются очень быстро (как правило, это сигналы прерываний или входы таймеров), нужно предусмотреть защиту от «дребезга» контактов.
Наличие RS-триггера в такой схеме позволяет сформировать на входе INT0 однократный переход в “0” при переключении тумблера вверх (R=0) и однократный переход в “1” при переключении тумблера вниз (S=0). Если ключ в среднем положении из-за вибрации, то на обоих входах неактивный уровень (S=R=1).
4) Подключение элементов индикации можно выполнить так, чтобы свечение обеспечивалось или “1”, или “0” на выходе порта:
5) При подключении семисегментных индикаторов (ССИ) нужно:
- на линию управления каждым сегментом включить ограничивающий резистор (390 Ом) или использовать шинный формирователь (см. Модуль 1 тема 9);
- учесть, что ССИ могут быть выполнены по схеме с общим анодом (включение сегмента “0”), или с общим катодом (включение сегмента “1”);
- для отображения числовой информации нужно сформировать таблицу перекодировки: например, для отображения значения “0” нужно передать на индикатор код “hgfedcba” = 00111111, для отображения “1” “hgfedcba” = 00000110, если сегмент “a” подключен к младшему биту порта и т.д.
6) При управлении реле (даже маломощными) рекомендуется включать транзисторный каскад между выходом контроллера и обмоткой реле. Параллельно с обмоткой реле обязательно нужно включить диод для гашения тока самоиндукции обмотки. Может потребоваться ограничительный резистор в коллекторной цепи.
4.4 Специфические особенности использования портов
По сигналу Reset в регистры-фиксаторы всех портов автоматически записывается "0FFh" (“1” в каждый бит), то есть порты переводятся в режим ввода.
Порт Р3, как правило, используют для реализации периферийных функций с назначением линий порта, указанным в разд. 2.2. Сигналы периферийных функций на выходах порта генерируются автоматически, но для этого в регистры-фиксаторы порта должны быть записаны "1" (команда MOV P3,#0FFh).
Если к порту Р0 подключены микросхемы n-MOП, то нужно подключить резисторы 1кОм между каждым выводом порта и цепью +5В.
В системе команд микроконтроллера есть несколько команд, в которых порт ввода-вывода используется как источник операнда и приемник результата:
Например:
ANL P1,A ; (Р1) (P1) and (A)
ORL P2,A ; (Р2) (P2) or (A)
XRL P0,A ; (Р0) (P0) xor (P0)
JBC P1.1, m2 ; если Р1.1 = 1, то сбросить Р1.1 и перейти на m2
INC P2 ; (Р2) (P2) + 1
DEC P1 ; (Р1) (P1) + 1
Важно: при выполнении таких команд, независимо от режима работы порта (ввод или вывод), информация всегда берется из регистра-фиксатора порта (а не с внешних выводов) и записывается в регистр-фиксатор порта.
4.5 Использование портов в шинной конфигурации МК-системы
Шинная конфигурация на основе портов Р0 и Р2 могут быть организованы системные шины адреса и данных; все внешние устройства системы подключаются к системным шинам через регистры, адресуемые процессором; таким же образом в системе может быть реализована внешняя дополнительная память.
Сначала рассмотрим программный аспект применения шинной конфигурации.
Основной способ пересылки данных во внешнее адресное пространство (во внешнюю память или внешние регистры ввода-вывода) это использование специальных команд:
MOVX A,@DPTR ; Чтение из внешнего АП в аккумулятор (ввод)
MOVX @DPTR,A ; Запись во внешнее АП из аккумулятора (вывод)
В этих командах для указания ячейки внешнего АП использована косвенная адресация на основе регистра DPTR (см. также табл. 2.1). Этот регистр 16-битовый, поэтому в него можно записать адрес любой ячейки внешнего АП от 0000h до FFFFh.
В этих пересылках со стороны МК можно использовать только аккумулятор.
Например, для пересылки значения 15 в ячейку внешнего АП по адресу 01A7h нужно написать следующие команды:
MOV A,#15 ; Задаем значение 15 в аккумуляторе
MOV DPTR,#01A7h ; Задаем адрес ячейки внешнего АП в DPTR
MOVX @DPTR,A ; Записываем во внешнее АП из аккумулятора
Для чтения данных из ячейки 028Ch внешнего АП в регистр-аккумулятор МК:
MOV DPTR,#028Сh ; Задаем адрес ячейки внешнего АП в DPTR
MOVX A,@DPTR ; Читаем из внешнего АП в аккумулятор
Теперь перейдем к аппаратному аспекту шинной конфигурации.
Как только микроконтроллер выполняет команду MOVX, адрес, заданный в регистре DPTR, автоматически выдается из МК через порты Р2 и Р0:
порт Р2 выдает старшую часть адреса (разряды A8…A15);
порт Р0 выдает младшую часть адреса (разряды А0…А7).
Для рассмотренного выше примера с адресом 01A7h через порты будет выдана информация: (Р2) = 01h = 00000001b (P0) = A7h = 10100111b
Важно: момент выдачи адреса через порты Р2 и Р0 сопровождается активным уровнем сигнала ALE = 1 (см. также рис. 2.2).
Дальнейшие действия зависят от адресной части команды MOVX:
по команде MOVX @DPTR,A ; запись из аккумулятора во внешнее АП
- число из аккумулятора выдается через порт P0 на внешнюю шину;
- устанавливается низкий (активный) уровень сигнала WR# = 0;
- за счет этого происходит запись информации во внешнее устройство;
- устанавливается высокий (неактивный) уровень сигнала WR# = 1.
по команде MOVX A,@DPTR ; чтение из внешнего АП в аккумулятор
- устанавливается низкий (активный) уровень сигнала RD# = 0;
- за счет этого происходит чтение информации из внешнего устройства;
- прочитанный байт через порт Р0 попадает в аккумулятор;
- устанавливается высокий (неактивный) уровень сигнала RD# = 1.
Обращение к внешнему АП может происходить также при чтении команд, если в системе реализована внешняя память программ. При этом адрес нужной ячейки внешнего АП берется из регистра PC, а вместо сигнала RD# микроконтроллер формирует сигнал PSEN# = 0 (см. рис. 2.2). Порты Р2 и Р0 используются так же, как при выполнении команд MOVX.
Обращение к внешнему АП для чтения команды будет автоматически выполняться тогда, когда адрес, находящийся в PC, больше верхнего адреса резидентной памяти программ.
Анализ использования портов показывает, что порт Р0 выполняет две функции передача младшей части адреса внешнего АП и пересылка байта данных (такой режим работы называется мультиплексным). Для того, что выделить информацию об адресе и данных на отдельные внешние шины, к портам микроконтроллера нужно подключить внешние регистры и шинный формирователь. Функциональная схема стандартного шинного интерфейса для MCS-51 и временная диаграмма выполнения команд MOVX @DPTR,A и MOVX A,@DPTR показаны на рис. 4.1.
Рисунок 4.1 Принцип построения и работы системного интерфейса МК-системы
на основе микроконтроллера MCS-51
На рис. 4.1 использованы сокращения: БР буферный регистр, ШФ шинный формирователь. Сигнал ALE использован для записи адреса в буферные регистры. Таким образом, на входах нижнего БР адрес (А0-А7) присутствует только часть фазы выполнения команды, а на выходах этого регистра все время обращения к внешнему АП.
Блок управления ШФ это логическая схема, которая на основании сигналов PSEN#, RD# и WR# формирует сигналы для переключения направления передачи через ШФ (сигнал Т) и разрешения его работы (сигнал OE#).
Показанные на временной диаграмме фазы записи и чтения в действительности не следуют плотно друг за другом, поскольку команды чтения и записи внешнего АП не обязательно стоят рядом в программе.
Способы подключения устройств во внешнем АП будут детально рассмотрены в следующем модуле при изучении структуры универсальной управляющей микроконтроллерной системы УУМС-2.
Автор конспекта Джулгаков В.Г., доцент каф. 301, ХАИ
Структура и работа портов ввода-вывода МК