Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры МПТ 2012 ДИМОН.doc
Скачиваний:
38
Добавлен:
16.04.2019
Размер:
2.02 Mб
Скачать

25. Схема порта аа

Порты ввода-вывода МК AVR имеют число независимых линий "вход-выход" от 3 до 53. МК AVR ATmega16 имеет четыре восьмиразрядных порта. Каждая линия порта может быть запрограммирована на вход или на выход. Мощные выходные драйверы обеспечивают токовую нагрузочную способность 20 мА на линию порта (втекающий ток) при максимальном значении 40 мА, что позволяет, например, непосредственно подключать к микроконтроллеру светодиоды и биполярные транзисторы. Общая токовая нагрузка на все линии одного порта не должна превышать 80 мА (все значения приведены для напряжения питания 5 В).

Обращение к портам производится через регистры ввода-вывода. Под каждый порт в адресном пространстве ввода-вывода зарезервировано по три адреса, по которым размещены следующие регистры: регистр данных порта PORTx, регистр направления данных DDRx и регистр выводов порта PINx. Поскольку с помощью регистров PINx осуществляется доступ к физическим значениям сигналов на выводах поpтa, они доступны только для чтения, тогда как остальные два регистра доступны и для чтения, и для записи.

Схема одного разряда порта ввода-вывода МК ATMega16

PUD – общий сигнал разрешения включения («0») или выключения («1») подтягивающих резисторов;

WDx – запись в регистр DDRx; RDx – чтение регистра DDRx;

WPx – запись в регистр PORTx; RRx – чтение регистра PORTx;

RPx – чтение состояния выводов порта PINx;

Clock – тактовый сигнал подсистемы ввода-вывода. Синхросигналы записи-чтения WDx, WPx, RDx, RRx, RPx являются общими для всех выводов одного порта (x = A, B, C, D). Сигналы Clock и PUD являются общими для всех портов МК.

Разряд регистра DDRx определяет направление передачи данных через контакт ввода-вывода. Если этот разряд уcтaновлен в «1», то n-й вывод порта является выходом, если же сброшен в «0» входом. По начальной установке (по RESET) разряды регистра DDRx устанавливаются в «0».

Разряд регистра PORTx вьполняет двойную функцию. Если разряд функционирует как выход (DDRх = «1»), этот разряд определяет cостояние вывода порта. Если разряд уcтaновлен в «1», на выводе уcтанавливается напряжение ВЫСОКОГО уровня. Если разряд сброшен в «0», на выводе устанавливается напряжение НИЗКОГО уровня. По начальной установке (по RESET) разряды регистра PORTx устанавливаются в «0». Если же вывод функционирует как вход (DDRх = «0»), разряд регистра PORTх определяет состояние внутреннего подтягивающего резистора для данного вывода. При установке разряда регистра PORTх в «1» подтягивающий резистор подключается между выводом микроконтроллера и проводом питания.

Управление подтягивающими резисторами осуществляется на двух уровнях. Общее управление (для всех выводов портов) осуществляется разрядом PUD (2-й разряд) регистра специальных функций SFIOR. Этот регистр располагается по адресу $30 ($50).

Если разряд PUD сброшен в «0» (начальное состояние), состояние подтягивающих резисторов будет определяться состоянием разряда регистра PORTх для каждого входа порта. Если разряд PUD установлен в «1», подтягивающие резисторы отключаются от всех выводов микроконтроллера.

Все возможные сочетания состояний управляющих разрядов и соответственно конфигурации выводов портов приведены в табл.

DDRx

PORTx

PUD

Функция вывода

Подтягивающ. Резистор

Примечания

0

0

Х

Вход

Отключен

Z-состояние

0

1

0

Вход

Подключен

0

1

1

Вход

Отключен

Z-состояние

1

0

Х

Выход

Отключен

Выход - «0»

1

1

Х

Выход

Отключен

Выход - «1»

Состояние вывода микроконтроллера может быть получено путем чтения разряда PINx. При этом следует помнить, что между действительным изменением сигнала на выводе и изменением разряда регистра PINx существует задержка. Эта задержка вносится узлом синхронизации, состоящим из триггера разряда PINx и дополнительного триггера-защелки. Значение сигнала на выводе микроконтроллера фиксируется триггером-защелкой при НИЗКОМ уровне тактового сигнала Clock и переписывается затем в разряд PINx по нарастающему фронту тактового сигнала. Соответственно величина задержки может составлять от 0,5 до 1,5 периода системного тактового сигнала.

По этой же причине между операциями изменения состояния вывода и повторного считывания вывода необходимо вставлять команду NOP.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]