Порты P0, P1, P2, P3 являются квазидвунаправленными портами ввода- вывода и предназначены для обеспечения обмена информацией микроконтроллера с внешними устройствами, образуя 32 линии ввода- вывода. Каждый из портов содержит восьмиразрядный регистр, имеющий байтовую и битовую адресацию для установки (запись '1') или сброса (запись '0') разрядов этого регистра с помощью программного обеспечения. Выходы этих регистров соединены с внешними ножками микросхемы. Упрощенная схема одного разряда порта показана на рис. 1
Рисунок 1. Упрощенная схема одного бита порта |
Один разряд регистра-защелки порта представляет собой D-триггер. Данные с внутренней шины микроконтроллера записываются в регистр-защелку по сигналу "запись в защелку". Выход "Q" D-триггера подключается к внутренней шине (считывается) по сигналу "чтение защелки". Значение сигнала непосредственно с внешнего вывода порта считывается по сигналу "чтение вывода". Некоторые команды чтения порта используют сигнал "чтение защелки ", другие "чтение выода". Чтение внешних ножек микросхемы осуществляется командами: |
MOV A, P3 ;Скопировать состояние ножек порта P3 в аккумулятор JB P3.4, Metka ;Если на 4 ножке порта P3 логическая ‘1’, то перейти на метку Чтение регистра - защелки осуществляется командами чтение - модификация - запись. Например: CPL P3.1 ;Проинвертировать сигнал на первой ножке порта P3 ORL P2,#56h ;Установить единичный сигнал на ножках 1,2,4 и 6 порта P2 ANL P3,#03h ;Установить нулевой сигнал на ножках 0 и 1 порта P3 |
Порты микросхемы служат для управления внешними устройствами, подключенными к микроконтроллеру. Схема подключения простейших внешних устройств приведена на рисунке 2. Этот рисунок иллюстрирует особенности подключения индикаторов к параллельным портам микроконтроллера MCS-51.
Рисунок 2. Схема подключения светодиодных индикаторов к параллельному порту
Присутствие в схеме мощного транзистора позволяет подключать к выводам порта светодиодные индикаторы непосредственно без усилителя мощности. Однако при этом необходимо следить за максимальной допустимой мощностью, рассеиваемой на микросхеме и напряжением, подаваемом на светодиод. Эквивалентная схема, на которой показан путь протекания выходного тока порта приведена на рисунке 3. Как видно из этой схемы именно этот ток используется для зажигания светодиода.
Рисунок 3. Эквивалентная схема подключения светодиодного индикатора к параллельному порту
Для умощнения выводов порта можно применить транзисторный ключ, показанный на рисунке 2. Обратите внимание, что база транзистора подключена непосредственно к выводу порта. Это стало возможным только благодаря использованию в схеме порта генератора тока в верхнем плече выходного каскада (Схему подключения устройств к портам с TTL выходами можно посмотреть здесь). Если выходного тока достаточно для открывания транзисторного ключа, то резистор R2 не используется. Этот резистор подключается для увеличения базового тока транзисторного ключа. На максимальное значение тока через этот резистор накладываются те же ограничения, что и для непосредственного подключения светодиодного индикатора к выводам порта.
Микроконтроллеры предназначены для управления внешними устройствами, однако управлять напряжением на выходе параллельного порта микроконтроллера можно только при помощи программы, записанной в память программ. Какие напряжения необходимо подавать на выходы микросхемы зависят от схемы подключения индикатора. В приведённой на рисунке 2 схеме, для зажигания светодиода VD1, в шестой вывод порта P0 необходимо записать логический 0. Для зажигания светодиода VD2 необходимо в седьмой разряд порта P2 записать логическую единицу, а для его гашения — логический ноль.
Для записи числа в порт (изменения потенциалов на ножках микросхемы) можно воспользоваться командами с байтовой адресацией:
-
MOV (пересылка), например
-
ANL (логическое 'И'), например
-
XRL (исключающее 'ИЛИ'), например
- ORL (логическое 'ИЛИ'), например
MOV P2, #56h ;Установить единичный сигнал на ножках 1,2,4 и 6 порта P2 ;и нулевой потенциал на ножках 0,3,5 и 7 MOV P1, #01110011b ;Выдать на все восемь выводов порта P1 число 011100112 MOV P3, A ;Выдать на все восемь выводов содержимое аккумулятора
ANL P1, #11110011b ;выдать низкий потенциал на ножках P1.2 и P1.3
XRL P3, #01000100b ;инвертировать состояние ножек P3.2 и P3.6
ORL P1, #00001100b ;выдать высокий потенциал на ножках P1.2 и P1.3
Эти команды изменяют потенциал сразу на нескольких выводах порта. Кроме того, для изменения потенциалов на ножках микросхемы, можно воспользоваться командами с битовой адресацией:
-
MOV (пересылка), например
-
CPL (инверсия), например
-
SETB (установить бит), например
-
CLR (сбросить бит), например
MOV P1.2, C ;выдать содержимое бита переноса через 2-й бит порта P2
CPL P1.2 ;проинвертировать второй бит порта P2
SETB P2.3 ;выдать высокий потенциал на 3-й ножке порта P2
CLR P2.3 ;выдать низкий потенциал на 3-й ножке порта P2
При записи в разряд порта (в триггере Т) логического '0' выходной транзистор открывается и на выводе микросхемы появляется низкий потенциал, изменить который извне невозможно. Поэтому при опросе ножки микросхемы входная информация в этом случае всегда будет восприниматься как логический '0' независимо от состояния выходов внешних устройств. Если в указанный разряд записать логическую '1', то выходной транзистор закрывается и на выводе микросхемы появляется высокий потенциал за счет генератора тока. Он может извне изменен на нулевой потенциал (замыканием этой ножки микросхемы на корпус). В этом случае, считываемая микроконтроллером информация, будет соответствовать информации на выходе внешнего устройства. Поэтому, перед тем как осуществить ввод информации по какому-либо выводу порта, соответствующий разряд необходимо настроить на ввод - записать в него логическую '1'.
По той же причине при настройке выводов порта на выполнение альтернативных функций в соответствующие разряды должны быть записаны логические '1'.
Кроме работы в качестве обычных портов ввода-вывода, внешние выводы портов Р0 .. Р3 могут выполнять ряд дополнительных (альтернативных) функций:
-
Порт P0 может быть использован для организации шины данных при работе микроконтроллера с внешней памятью данных или программ, при этом через него выводится младший байт адреса A0 - A7, выдается из микроконтроллера или принимается в микроконтроллер байт данных. Во время доступа к внешней памяти во все триггеры - защелки порта P0 аппаратно записываются "1" (т.е. содержимое порта теряется). Кроме того, через порт P0 передаюься данные при программировании внутреннего ППЗУ, и читается содержимое внутренней памяти программ при работе с программатором. При сбросе микросхемы во все разряды порта записываются '1'. Схема порта P0 отличается от всех других портов тем, что у этого порта нет внутреннего генератора тока. Поэтому при работе с этим портом приходится подключать внешние резисторы.
Рисунок 3. Использование порта P0 в качестве шины данных.