Параллельные порты
Все линии ввода/вывода микроконтроллеров семейства MCS-51 сгруппированы в несколько двунаправленных параллельных 8-разрядных портов. Микроконтроллеры типа 8051 АН имеют четыре параллельных порта Р0-Р3. Эти порты могут использоваться как для выполнения функций обмена данными (допуская при этом поразрядное программирование на ввод или на вывод), так и для выполнения альтернативных функций, таких как обращение к внешней памяти, прием запросов прерываний и другие.
При обращении к внешней памяти используются порты Р0 и Р2. Через порт Р0 выдается младший байт адреса, который должен быть зафиксирован во внешнем регистре, поскольку вслед за ним на линиях порта появляются данные для записи или чтения. Через порт Р2 выдается старший байт адреса. В микроконтроллерах типа 8051 и 8751 с внутренней памятью программ в условиях, когда внешняя память программ не используется, порты Р0 и Р2 могут служить для обмена данными как порты общего назначения. В микроконтроллерах с программируемой внутренней памятью программ порт РО используется для ввода или вывода байта кода при записи и верификации. Младший байт адреса при программировании и чтении внутренней памяти вводится через порт Р1, а старший байт адреса — через порт Р2.
На рис. 3.10 приведены структурные схемы аппаратных средств, обслуживающих одну линию каждого из портов Р0-РЗ. Все линии параллельных портов имеют защелки (типа D-триггера), которые объединены в группы по восемь и рассматриваются как регистры специальных функций Р0-РЗ. Кроме защелки, каждая линия ввода/вывода имеет входной буфер и формирователь выходного сигнала. На рис. 3.10 видно, что на внутреннюю шину микроконтроллера может быть прочитано как состояние каждой из защелок, так и значения сигналов на внешних выводах. Часть команд микроконтроллера во время выполнения читают защелки (регистры портов), а другие — значение сигналов на линиях портов.
Для выполнения портом Р3 альтернативных функций в соответствующий разряд регистра порта должна быть записана «1». Во время обращения к внешней памяти во все разряды порта Р0 автоматически записываются «1», значения защелок порта Р2 не изменяются.
Чтобы вывести значение «0» или «1» на внешний вывод, необходимо записать это значение в соответствующий разряд регистра параллельного порта. Значение появится на внешнем выводе на фазе S1P1 первого машинного цикла следующей команды. Для использования линии порта в качестве входа, ее защелка должна содержать «1». При этом у портов Р1, Р2, Р3 соответствующая линия внутри подтягивается к уровню «1», но может быть внешним источником переведена в состояние «0». Из-за такого механизма порты Р1-РЗ называют «квазидвунаправленными».
Порт Р0 элементов постоянного подтягивания к уровню «1» не имеет. Запись «1» в защелку порта Р0 переводит соответствующую линию в высокоимпедансное состояние, поэтому этот порт является действительно двунаправленным. Верхний транзистор выходного формирователя открыт только при выдаче «1» на линию в качестве бита адреса внешней памяти. При работе порта Р0 на ввод/вывод данных его линии должны быть подтянуты к уровню «1» внешними резисторами.
Поскольку функция записи «1» и функция чтения для выходного формирователя представляют собой одно и то же состояние с малым выходным
Рис. 3.10 - Аппаратные средства, обслуживающие линии портов Р0..Р3
током, для ускорения переключения внешних устройств выходные формирователи портов обеспечивают в течение первого машинного такта (S1P1-S1P2) увеличенный ток.