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

 
 
 
«Си позволяет легко выстрелить себе в ногу; с C++ это сделать сложнее, но, когда вы это делаете, вы отстреливаете себе ногу целиком.»
Bjarne Stroustrup
Русский | Українська


Микропроцессоры и микроконтроллеры :: Принципы программирования 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", чем обеспечивается настройка линий порта на ввод.

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