![]() |
|
Доступ к портам 3 и 4Доступ к портам 3 и 4 может быть легко выполнен из внутреннего регистра порта 3 и порта 4 (IOPORT34) в ячейке 1FFEH. Обратите внимание, что к портам 3 и 4 можно обращаться только как к слову. Невозможно читать или записывать порт 3 или порт 4 отдельно. Чтобы использовать порты 3 и 4 как порты ввода/вывода, устройство должно быть установлено для внутреннего использования. Так как команды LD и ST требуют использования внутренних регистров, перед использованием данных необходимо сначала переслать информацию из порта в нижний регистровый файл. Если данные уже внутренние, команда LD не нужна. Пример записи слова в порты 3 и 4: LD intreg, portdata ; Регистр <- данные ST intreg, 1FFEH ; Регистр -> порт 3 и 4 Для ввода из портов 3 и 4 требуется, чтобы сначала в регистры портов были записаны единицы, чтобы установить конфигурацию входной схемы порта. Это будет переводить внешние выводы портов в высокоимпедансный режим. Обратите внимание, что по этому входному условию порты сбрасываются. Если в порт были записаны нули, то в разряды, которые должны быть использованы для ввода, должны быть записаны единицы. Условия чтения портов 3 и 4 при заранее записанных нулях следующие: 1) LD intrega, #0FFFFH ; Изменение режима порта 2) ST intrega, 1FFEH ; Регистр -> порты 3 и 4, LD & ST не нужны, если предварительно выводы установлены в 1 3) LD intregb, 1FFEH ; Регистр <- порты 3 и 4 Обратите внимание, что формат команд LD и ST одинаков, но места источника и приемника в команде противоположны. Порты 3 и 4Разряды портов 3 и 4 имеют две функции ввода/вывода. Они функционируют или(и) как двунаправленный порт с открытым стоком (P3.x, P4.x), или(и) как двунаправленная системная шина адреса/данных (ADx) (с сильным низким и высоким выходным драйвером выводов).
![]() Функционирование портов 3 и 4 зависит от состояния вывода EA#(External Access) во время последнего сброса и от потребности обращения к внешней памяти программ/данных. Вывод EA# не только определяет функцию разрядов портов 3 и 4, но также определяет то, что происходит при обращении к портам. Если во время сброса устройства EA=0, то порты 3 и 4 используются для того, чтобы только поддерживать системную шину адреса/данных. Чтение или запись по адресу портов 3 и 4 (1FFEH) интерпретируется как доступ к внешней шине, а не как доступ к порту. Если во время сброса устройства EA=1, то порты 3 и 4 осуществляют две функции: ввод/вывод и системная шина адреса/данных. Обычно функция ввода/вывода портов такая же, как у разрядов с открытым стоком: нуль, записанный в регистр-защелку порта по адресу 1FFEH, включает сильный низкий драйвер, в то время как единица отключает сильный низкий драйвер и переводит внешний вывод в высокоимпедансное состояние. Запись единицы в разряд порта дает возможность использовать его для приема данных. Чтение или запись в порт интерпретируется как внутренний доступ, так что никакой внешний цикл шины не выполняется. Если не выполняется цикл внешней шины, порты 3 и 4 все время остаются портами ввода/вывода с открытым стоком. Любой доступ к адресу, не интерпретируемому как внутренний адрес, приводит к выполнению внешнего цикла шины. Выполняя цикл шины, порты 3 и 4 временно переключаются, чтобы поддерживать функцию системной шины адреса/данных. Это означает, что во время записи адреса и данных в цикле шины выводы порта используют сильные высокие и сильные низкие драйверы, а во время чтения они в высокоимпедансном состоянии. После того, как цикл шины завершается, разряды порта переключаются обратно, выполняя функции порта ввода/вывода. Состояние разряда порта после переключения обратно для выполнения функции ввода/вывода зависит от последнего записанного в регистр-защелку значения. В прикладных программах, которые используют системную шину адреса/данных, значение, программируемое в регистр-защелку порта, имеет определенный смысл. Значение регистра появляется на шине в течение времен простоя (то есть в течение тех времен, когда порты 3 и 4 - не системная шина адреса/данных). Как регистр-защелка порта должен быть записан, зависит от прикладной программы. Запись нуля означает, что при простое шина управляется низким уровнем сигнала (сильный низкий уровень), при записи единицы шина переводится в высокоимпедансное состояние. Высокоимпедансная шина может вызывать чрезмерный ток, но его легко зафиксировать, поместив на шине нагрузочные резисторы. Наличие управления шиной низким уровнем сигнала избавляет от потребности в резисторах, но при этом должна быть гарантия, что в то же самое время никакое другое устройство не может управлять шиной (поскольку может возникнуть короткое замыкание). Когда порты 3 и 4 используются исключительно как шина адреса/данных системы и осуществляется доступ по несуществующему адресу, согласовывающие нагрузочные резисторы устанавливают на шине 0FFFFH. Примечание. Выборка команды из неcуществующей памяти вызывает отказ системы или отказ программного обеспечения, микроконтроллер при этом сбрасывается и останавливает дальнейшую работу. |