МК, как и любое другое уважающее себя электронное устройство, не может в одночасье работать и на ввод, и на вывод. Только последовательно во времени, сначала ввод, затем вывод, или наоборот. Однако оперативно переключать режимы «Вход/Выход» МК может, чем широко пользуются программисты.
Электрическая схема совмещённого порта ввода/вывода показана на Рис. 2.38. Она получается как суперпозиция схем, изображённых на Рис. 2.25 и Рис. 2.32, а.
Переключатель Sq^j имеет две взаимосвязанные группы контактов. Он отвечает за коммутацию НИЗКОГО и ВЫСОКОГО уровней, а также за подключение и отключение резистора R^p. Переключатель выбирает режим ввода (верхнее по схеме положение) или режим вывода данных (нижнее по схеме положение).
Переключатель действует независимо от ^оит- ^^^ переключателя управляются двумя программно-доступными регистрами из области SFR. В разных семействах МК они имеют разные названия (Табл. 2.7). Здесь регистр PORTx эквивалентен переключателю Sq^j, а регистры DDRx, TRlSx — переключателю S^^. Изменение битов в регистрах вызывает соответствующее замыкание контактов.
Таблица 2,7. Управление режимами в AVR- и Р1С-коитроллерах |
Если сравнивать AVR- и Р1С-контроллеры, то заметна большая разница в сочетаниях битов, переключающих направление «Вход/Выход» и уровни «ВЫСОКИЙ/НИЗКИЙ». Стандартизация, к сожалению, отсутствует, что следует учитывать при переходе от одного семейства МК к другому
Наличие совмещённых портов ввода/вывода является большим достоинством МК, тк. позволяет конструировать гибкие по функциональным возможностям изделия. Изредка встречаются МК, у которых часть выводов жёстко настроена только на приём или только на передачу информации, например, Zilog Z86L33, но их меньшинство.
Идеализированный М К должен иметь усреднённые характеристики, поэтому базовой для него предлагается схема, приведенная на Рис. 2.38. Программной настройкой управляющих регистров контроллер может перестроиться в режимы, аналогичные Рис. 2.32, а. Рис. 2.34, а. Рис. 2.35, а. В последнем случае НИЗКИЙ уровень формируется «нулевым» напряжением на выходе, а ВЫСОКИЙ — переводом МК в режим входа с «pull-up» резистором.
Важное замечание. При начальном включении питания или подаче сигнала сброса все линии портов обычного МК независимо от желания программиста переходят в «оборванное» высокоимпедансное Z-состояние, что эквивалентно режиму входа без «pull-up» резистора (Рис. 2.34, а). Исключение из правила составляют МК, совместимые с MCS-51, у которых при сбросе резистор не отключается (Рис. 2.35, а).
Данный момент надо учитывать при разработке реальных схем. В частности, если нагрузкой выходной линии М К служит транзисторный ключ, то, чтобы его база или затвор при сбросе не «висели в воздухе», в AVR- и Р1С-контроллерах ставят дополнительные внешние резисторы сопротивлением 10…100 кОм на общий провод или на цепь питания. Для МК с ядром MCS-51 этого делать не надо из-за постоянного присутствия на выходе внутреннего резистора R^^.