Микропроцессоры и микроконтроллеры

 
 
 
«Отладка кода вдвое сложнее, чем его написание. Так что если вы пишете код настолько умно, насколько можете, то вы по определению недостаточно сообразительны, чтобы его отлаживать.»
Brian W. Kernighan.
Русский | Українська


Микропроцессоры и микроконтроллеры :: Принципы программирования MSC-51 :: Назначение, структура и использование портов в составе МК51

Назначение, структура и использование портов в составе МК51

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

МК51 имеет 32 линии ввода-вывода, объединенные в четыре восьмиразрядных порта Р0...Р3. Каждая линия может быть использована как для ввода, так и для вывода данных под управлением программы.

Схемотехника портов ввода-вывода для одного бита показана на рис.4.1,а - для порта Р0, на рис.4.1,б - для порта Р3 в пособии. Порты Р1 и Р2 имеют приблизительно такую же структуру, как и порт Р3 (за исключением управления альтернативными функциями). Каждый порт содержит:

- регистр-фиксатор (так называемую «защелку») на основе D-триггера;

- входной буфер;

- выходной буфер.

Порт Р0 содержит переключатель MUX, что позволяет организовать выдачу младшего байта адреса и прием-передачу байта данных при операциях с внешней памятью без изменения содержимого регистра-фиксатора, то есть в обход его. В регистр-фиксатор при этом загружается код OFFH. Выходные буферы портов 0 и 2, а также выходной буфер порта 0 используются при обращении к ВП. Через порт Р0 в начале цикла обращение к ВП выводится младший байт адреса ВП одновременно с сигналом ALE, а потом осуществляется прием или передача байта данных. По стробу ALE через порт Р2 выдается старший байт адреса, если разрядность адреса равняется 16 битам. В интервалах между стробами ALE и при отсутствии сигналов #RD или #WR линии портов Р0, Р2 находятся в третьем состоянии.

Фиксированный ввод-вывод через порт Р0

Если внешняя память не подключается, то порт Р0 может использоваться для т.н. фиксированного ввода-вывода информации, то есть как обычный порт ввода-вывода. Такой режим реализуется командами пересылки, в которых порт обозначен как приемник данных, например, MOV Р0,А. Выходные транзисторы порта включенные по схеме "открытый коллектор" и требуют подключения внешних резисторов между ними и линией "+5 В" в случае работы на внешние n-MOП-схемы.

Фиксированный ввод-вывод не сопровождается стробами #RD и #WR, а информация, которая выводится на линии, содержится на них продолжительное время и изменяется только следующими командами ввода-вывода. Для использования отдельных линий порта (или всех) в режиме фиксированного ввода в регистры-фиксаторы порта должны быть программно записаны 1. Таким образом, порт Р0 является двунаправленным. Запись 1 в фиксатор (D-триггер) порта закрывает выходной МОП-транзистор и настраивает линию порта на режим ввода.

Функционирование портов Р1, Р2, Р3

В отличие от порта Р0 выходные буферы портов Р1, Р2, Р3 имеют встроенный резистор, который ограничивает погрузочную способность портов одним ТТЛ - или МОП-входом.

Для перевода любой линии порта в режим ввода информации в регистр-фиксатор должна быть записана "1". Таким образом каждая линия может быть независимо настроена или на ввод, или на вывод, и потому порты Р1...Р3 называют "квазидвунаправленными".

По сигналу RST в регистры-фиксаторы всех портов автоматически записывается "1", то есть порты переводятся в режим ввода.

Порт Р3, как правило, используют для реализации периферийных функций с таким назначением линий порта, какое дано в табл. 11.1. Сигналы периферийных функций на выходах порта генерируются автоматически, но для этого в фиксаторы порта должны быть записаны "1".

Таким образом, в МК-системе, которая имеет внешнюю память, для организации связи с датчиками и объектами управления непосредственно может использоваться лишь порт Р1 - прием байтов или единичных сигналов, а также биты порта Р3, которые отвечают за работу таймеров, последовательного порта (УАПП) и обслуживание прерываний. При этом наиболее удобным является вариант, если порт Р1 используют для обмена числовой информацией, а порт Р3 – для реализации периферийных функций, например:

- синхронизация внешних событий и режим реального времени;

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

- обслуживание асинхронных объектов через прерывание.

Если МК-система не имеет ВП, для связи с объектами управления или контроля могут использоваться также порты Р0, Р2.

Информационный аспект пересылки через порты

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

Если к некоторой линии порта подключенная схема-источник (то есть передатчик данных), то со стороны микроконтроллера данная линия должна быть настроена на ввод путем записи "1" в регистр-фиксатор линии (команда SETB Px.y). Далее для чтения данных, которые передаются внешней схемой, можно применить команды пересылки битов или байтов, проверки значения битов. Во всех случаях (кроме описанных в следующем подпункте) в операциях будет использованное значение сигнала с внешней линии порта!

Если к некоторой линии порта подключена схема-потребитель, то данная линия будет функционировать в режиме вывода, то есть будет выполняться пересылка содержимого регистра-фиксатора на внешний вывод. Таким образом, команда, например, SETB Px.y будет означать пересылку "1" внешней схеме-потребителю (а не перевод линии порта в режим ввода!), а команда CLR Px.y - пересылка сигнала низкого уровня этой внешней схеме.

Особенности модификации содержимого портов

Обращение к портам ввода-вывода возможно с использованием команд, которые оперируют байтом или отдельным битом. При этом в тех случаях, если порт одновременно является и операндом, и местом назначения результата, устройство управления автоматически реализует специальный режим, который носит название "чтение-модификация-запись". Этот режим обращения предусматривает ввод сигналов не из внешних выводов порта, а с его регистра-фиксатора, что исключает ошибочное считывание информации, выведенной ранее. Подобный механизм обращения к портам реализуется при выполнении таких команд:

ANL - например ANL P1,A

ORL - ORL P2,A

XRL - XRL P3,A

JBC - JBC P1.1, LABEL

INC, DEC INC P2, DEC P1

DJNZ - DJNZ P1, LABEL

MOV PX.Y,C MOV P2.7,C

SETB PX.Y; CLR PX.Y; CPL PX.Y

Во всех указанных командах содержимое регистра-фиксатора считывается в АЛУ, выполняется нужное действие, а потом результат записывается в регистр-фиксатор порта.

Обычные команды чтения порта (например, MOV A,P2) реализуют ввод информации только с внешних выводов порта. В соответствующие регистры-фиксаторы при этом предварительно должны быть записаны "1", чем обеспечивается настройка линий порта на ввод.

Таким образом, если порт указан как операнд-источник в любых командах, кроме приведенных, то данные берутся с внешних выводов порта. Если порт указан как операнд-приемник, то данные в любом случае записываются в регистры-фиксаторы порта.