Структура и работа портов ввода-вывода МК

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

Вывод через порт

Используется, если к порту подключены приемники сигналов, например, индикаторы, исполнительные устройства (реле) или входы других микросхем.

Действия программиста:

  1. Настройку порта выполнять не нужно, поскольку режим вывода обеспечивается подключением приемника сигнала к линиям порта.
  2. Вывод через порт выполняется командами байтовой пересылки:

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) Подключение кнопок и переключателей нужно выполнять таким образом, чтобы при любом положении контактов на входе порта не было «неопределенного потенциала»:

  1. для сигналов, которые формируются с помощью механических переключателей и обрабатываются очень быстро (как правило, это сигналы прерываний или входы таймеров), нужно предусмотреть защиту от «дребезга» контактов.

Наличие 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 ; запись из аккумулятора во внешнее АП

  1. число из аккумулятора выдается через порт P0 на внешнюю шину;
  2. устанавливается низкий (активный) уровень сигнала WR# = 0;
  3. за счет этого происходит запись информации во внешнее устройство;
  4. устанавливается высокий (неактивный) уровень сигнала WR# = 1.

по команде MOVX A,@DPTR ; чтение из внешнего АП в аккумулятор

  1. устанавливается низкий (активный) уровень сигнала RD# = 0;
  2. за счет этого происходит чтение информации из внешнего устройства;
  3. прочитанный байт через порт Р0 попадает в аккумулятор;
  4. устанавливается высокий (неактивный) уровень сигнала 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, ХАИ

Структура и работа портов ввода-вывода МК