![]() |
|
Организация портов выводаЗапись в порт ввода/вывода устанавливает или очищает соответствующий регистр-защелку порта. Выход регистра-защелки порта затем используется драйвером разряда. Операция записи воздействует на разряды "только для вывода" или на двунаправленные (квазидвунаправленные или с открытым стоком) разряды. Запись в разряды "только для ввода" не выполняет никакой операции (то есть никакая регистр-защелка не устанавливается и не сбрасывается). Существует несколько способов записи в порт ввода/вывода. Порт может быть записан непосредственно с использованием следующих команд:
Или
Обычно порт непосредственно записывается только при инициализации или когда должны измениться сразу все разряды порта. Более часто должен устанавливаться, очищаться или переключаться только один разряд. Для того, чтобы выполнить однобитовые операции, выполняется операция "чтение-модификация-запись" (read-modify-write) следующим образом:
Такая же операция может быть выполнена одной командой:
Следующая операция может быть использована для дополнения значения разряда порта:
Во всех описанных операциях значение порта читается, изменяется и затем записывается обратно. Однако следует помнить о случаях, в которых выполнение описанных операций "чтение-модификация-запись" приводит к неопределенным ситуациям. Например:
Для решения таких проблем в память копируется содержимое порта и операция (установка, очистка, инвертирование) выполняется на этом образе в памяти, который затем непосредственно записывается в порт. Например, следующая операция используется для инвертирования P1.7:
Существуют другие способы избежать проблемы, например, убедиться, что операция OR содержит единицы для любых двунаправленных разрядов, используемых для ввода. Однако важно помнить, что смешивание входов и выходов на одном порте требует особого внимания при изменении значения разряда. Порт 1Аббревиатура - IOPORT1 Размер - 1 байт Находится по адресу 0FH Использовать для записи/чтения в окне HWindow 0
![]() Все разряды порта 1 - квазидвунаправленные, пока не выбрана их альтернативная функция. Если разряды порта сконфигурированы как выводы для приема и передачи данных, то их можно читать или записывать. Если выбрана альтернативная функция разрядов, их можно только читать. Альтернативная функция разрядов порта выбирается соответствующим управляющим регистром (см. табл. 4.2). Альтернативные функции рассматриваются в описании периферийных модулей микропроцессора. Порт 2Порт 2 содержит разряды "только для ввода", "только для вывода" и квазидвунаправленные. Альтернативная функция разрядов порта выбирается соответствующим управляющим регистром (см. табл. 4.2). Альтернативные функции рассматриваются в описании периферийных модулей микропроцессора. Аббревиатура - IOPORT2 Размер - 1 байт Находится по адресу 10H Использовать для записи/чтения в окне HWindow 0
![]() |