|
Порты
A, B, C и D - это двунаправленные
восьмиразрядные порты ввода-вывода.
Они имеют аналогичную структуру.
Каждый порт представлен тремя
регистрами: PORTx, PINx и DDRx.
Каждый бит регистров соответствует
выводу МК. Так, PORTA.0, PINA.0 и DDRA.0
соответствуют выводу 40 МК AT90s8535 (см.
рисунок). Каждый
вывод порта может быть настроен на
ввод или на вывод. Да... Не звучит.
Вывод на вывод. Давайте условимся -
контакт(вывод) МК будем обзывать pin.
Итак - каждый pin может быть настроен
на ввод или вывод в любых комбинациях. Для
того, чтобы pin стал выходом, надо
записать лог. "1" в
соответствующий разряд регистра DDRx.
В этом случае то, что будем
записывать в регистр PORTx - будет
отображаться на pin МК, то есть
управлять внешней схемой, зажигать
светодиод или еще что...
|
 |
|
Если
pin настроен на вход, то состояние pin-а
может быть прочитано МК в регистре PINx.
Регистр PORTx в этом случае управляет
подтягивающим резистором (на Vcc) - при
записи "1" в соответствующий
разряд PORTx он включается. Входное
сопротивление настроенного на ввод pin-а
велико, и если он никуда не
подключен ("болтается в воздухе"),
то достаточно поднести к устройству
руку, чтобы МК начал читать оттуда
все что угодно, но чаще - наводку 50 Гц Почти
каждый pin модет выполнять
альтернативную функцию (а в
некоторых МК - более одной).
Естественно, что использовать его в
качестве обычной линии ввода-вывода
нельзя. Альтернативные функции (на
рисунке - в скобках) включаются при
разрешении и соответствующей
настройке соответствующих им
периферийных устройств. Но режим
ввод/вывод надо настроить самому. Так,
если нужно использовать USART (асинхронный
последовательный интерфейс), то
нужно включить USART, разрешить работу
приемника и передатчика и настроить
PORTD.1 на выход (на вход без
подтягивающих резисторов все линии
всех портов настроены по сбросу). |