Порты ввода/вывода информации
Все четыре порта МК51 предназначены для ввода или вывода информации побайтно. Схемотехника портов ввода/вывода МК51 для одного бита показана на рис. 3.4 (порты 1 и 2 имеют примерно такую же структуру, как и порт 3). Каждый порт содержит управляемые регистр-защелку, входной буфер и выходной драйвер.
Выходные драйверы портов 0 и 2, а также входной буфер порта О используются при обращении к внешней памяти (ВП). При этом через порт 0 в режиме временного мультиплексирования сначала выводится младший байт адреса ВП, а затем выдается или принимается байт данных. Через порт 2 выводится старший байт адреса в тех случаях, когда разрядность адреса равна 16 бит,
Все выводы порта 3 могут быть использованы для реализации альтернативных функций, перечисленных в табл. 3.3. Альтернативные функции могут быть задействованы путем записи 1 в соответствующие биты регистра-защелки (РЗ.О—Р3.7) порта 3.
Порт 0 является двунаправленным, а порты 1, 2 и 3 - квазидвунаправленными. Каждая линия портов может быть использована независимо для ввода или вывода информации. Для того чтобы некоторая линия порта использовалась для ввода, в D-триггер регистра-защелки порта должна быть записана 1, которая закрывает МОП-транзистор выходной цепи.
По сигналу СБР в регистры-защелки всех портов автоматически записываются единицы, настраивающие их тем самым на режим ввода.
Все порты могут быть использованы для организации ввода/вывода информации по двунаправленным линиям передачи. Однако порты О и 2 не могут быть использованы для этой цели в случае, если МК-система имеет внешнюю память, связь с которой организуется через общую разделяемую шину адреса/данных, работающую в режиме временного мультиплексирования.
Запись в порт.При выполнении команды, которая изменяет содержимое регистра-защелки порта, новое значение фиксируется в регистре в момент S6P2 последнего цикла команды. Однако опрос- содержимого регистра-защелки выходной схемой осуществляется во время фазы Р1 и, следовательно, новое содержимое регистра-защелки появляется на выходных контактах порта только в момент S1P1 следующего машинного цикла.
Рис. 3.4. Схемотехника портов ввода/вывода МК51: а ~ порт 0; б - порт 3
Нагрузочная способность портов.Выходные линии портов 1, 2 и 3 могут работать на одну ТТЛ-схему. Линии порта 0 могут быть нагружены на два входа ТТЛ-схем каждая. Линии порта 0 могут работать и на «-МОП-схемы, однако при этом их необходимо подключать на источник электропитания через внешние нагрузочные резисторы за исключением случая, когда шина порта 0 используется в качестве шины адреса/данных внешней памяти.
Входные сигналы для МК51 могут формироваться ТТЛ-схемами или я-МОП-схемами. Допустимо использование в качестве источников сигналов для МК51 схем с открытым коллектором или открытым стоком. Однако при этом время изменения входного сигнала при переходе из О в 1 окажется сильно затянутым.
Особенности работы портов.Обращение к портам ввода/вывода возможно с использованием команд, оперирующих с байтом, отдельным битом и произвольной комбинацией бит. При этом в тех случаях, когда порт является одновременно операндом и местом назначения результата, устройство управления автоматически реализует специальный режим, который называется "чтение-модификация-запись". Этот режим обращения предполагает ввод сигналов не с внешних выводов порта, а из его регистра-защелки, что позволяет исключить неправильное считывание ранее выведенной информации.
Подобный механизм обращения к портам реализован в следующих командах:
ANL — логическое И, например ANL Р1,А;
ORL - логическое ИЛИ, например ORL Р2,А;
XRL — исключающее ИЛИ, например XRL РЗ,А;
JBC — переход, если в адресуемом бите единица, и последующий сброс бита, например JBC P1.1, LABEL;
CPL — инверсия бита, например CPL РЗ.З;
INC — инкремент порта, например INC P2;
DEC - декремент порта, например DEC P2;
DJNZ — декремент порта и переход, если его содержимое не равно нулю, например DJNZ P3, LABEL;
MOV PX.Y, С - передача бита переноса в бит Y порта X;
SET PX.Y — установка бита Y порта X;
CLR PX.Y - сброс бита Y порта X.
Совсем не очевидно, что последние три команды в приведен,списке являются командами "чтение-модификация-запись". Однако это именно так. По этим командам сначала считывается байт из порта, а затем записывается новый байт в регистр-защелку.
Причиной, по которой команды "чтение-модификация-запись" обеспечивают раздельный доступ к регистру-защелке порта и к внешним выводам порта, является необходимость исключить возможность неправильного прочтения уровней сигналов на внешних выводах. Предположим для примера, что линия Y порта X соединяется с базой мощного
Рис 3.5. Временные диаграммы операций ввода/вывода
транзистора и выходной сигнал на ней предназначен для его управления. Когда в данный бит записана 1, то транзистор включается. Если для проверки состояния исполнительного механизма (в нашем случае — мощного транзистора) прикладной программе требуется прочитать состояние выходного сигнала в том же бите порта, то считывание сигнала с внешнего вывода порта, а не из D-триггера регистра-защелки порта приведет к неправильному результату: единичный сигнал на базе транзистора имеет относительно низкий уровень и будет интерпретирован в МК как сигнал 0. Команды "чтение-модификация-запись" реализуют считывание из регистра-защелки, а не с внешнего вывода порта, что обеспечивает получение правильного значения 1.
На рис.3.5 приведены временные диаграммы, иллюстрирующие процесс выполнения операций ввода/вывода информации через порты МК51.