Различие между ПОРТОМ и ФИКСАТОРОМ на PIC 18F

25
задан acemtp 12 April 2010 в 16:05
поделиться

5 ответов

Защелка - это защелка выхода , в которую записываются значения. Порт - это напряжение на фактическом выводе.

Есть несколько ситуаций, в которых они могут быть разными. Тот, с которым я сталкивался чаще всего, - это если у вас (случайно) закорочен штифт на массу. Если вы установите высокий уровень защелки, защелка будет считывать высокий уровень, но порт будет считывать низкий уровень, потому что напряжение на контакте все еще приблизительно равно заземлению.

Другая ситуация, приводящая к тому, что вы описали, - это неправильная настройка вывода порта. Я (и все, с кем я работаю) потратил много часов, пытаясь понять, почему наша PIC не работает так, как ожидалось, чтобы, в конечном итоге, выяснить, что мы, например, упустили из виду отключение аналоговых модулей. Убедитесь, что вы прошли через разделы I / O Ports -> PORT ?, TRIS? И LAT? регистрируется в даташите. Дополнительную информацию можно получить на вики-странице Microchip , где объясняется, как считывать неправильное значение сразу после того, как вы записываете выходной сигнал на вывод, подключенный к емкостной нагрузке.

Эта страница вики также объясняет:

Чтение регистра защелки порта возвращает настройки выходных драйверов, а чтение регистра порта возвращает логические уровни, наблюдаемые на выводах.

Также, вот фрагмент из раздела портов ввода-вывода на 18F14K50 (который должен быть таким же, как и остальные модели серии 18F):

Каждый порт имеет три регистра для своей операции . К этим регистрам относятся:

  • регистр TRIS (регистр направления данных)
  • регистр PORT (считывает уровни на выводах устройства)
  • регистр LAT (защелка выхода)

Таким образом, в большинстве ситуаций вы будете писать к защелке и читаем из порта.

32
ответ дан 28 November 2019 в 18:15
поделиться

Всегда рекомендуется записать в LAT, читать из ПОРТА, причина состоит в том, когда порт будет использоваться в качестве вывода, битовая операция ПОРТА сделает, чтение изменяет инструкцию по записи.

Read изменяет Инструкцию по записи, имеют некоторые ловушки, на основе выходной емкости (время нарастания контактов порта), который может установить контакты порта на неправильное значение, когда два последовательных READ изменяют инструкцию по ЗАПИСИ, выполняется.

Поэтому всегда запись к LAT и чтению от ПОРТА (входные контакты)

0
ответ дан 28 November 2019 в 18:15
поделиться

Вот полезная сводка из таблицы.

11.2.3 Регистры LAT
Регистр LATx, связанный с выводом ввода-вывода, устраняет проблемы, которые могут возникнуть с инструкциями чтения-изменения-записи. Чтение регистра LATx возвращает значения, содержащиеся в выходных защелках порта , вместо значений на выводах ввода-вывода. Операция чтения-изменения-записи в регистре LAT , связанном с портом ввода-вывода, исключает возможность записи значений входных выводов в защелки порта . Запись в регистр LATx имеет тот же эффект, что и запись в регистр PORTx.

Различия между регистрами PORT и LAT можно резюмировать следующим образом:

  • Запись в регистр PORTx записывает значение данных в защелку порта .
  • Запись в регистр LATx записывает значение данных в защелку порта .
  • При чтении регистра PORTx считывается значение данных на контакте ввода-вывода .
  • При чтении регистра LATx считывается значение данных, содержащееся в защелке порта.
10
ответ дан 28 November 2019 в 18:15
поделиться

Да, нормально читать PORTx и LATx и иногда обнаруживать, что они имеют разные значения.

Если вы хотите узнать, управляет ли какое-либо внешнее оборудование высоким или низким выводом, вы должны установить вывод в режим ввода (с TRIS или регистром DIR), и вы должны прочитать PORTx. Это показание говорит вам, высокое или низкое фактическое напряжение на выводе.

Если вы хотите установить на вывод высокий или низкий уровень, вы должны установить вывод на вывод (с помощью TRIS или регистра DIR); вы должны записать бит в регистр LATx.

(Запись этого бита в регистр PORTx может показаться правильным решением: этот вывод - в конце концов - перейдет в высокий или низкий уровень в соответствии с командой.Но во многих случаях - например, когда какой-либо другой вывод на этом порту подключен к шине с открытым коллектором - запись в один бит регистра PORTx испортит состояние других выводов на этом порту, что приведет к к трудным для отладки задачам).

Открытые схемы: чтение перед записью

4
ответ дан 28 November 2019 в 18:15
поделиться

Я рекомендую рассматривать значения PORT только для чтения. Значения LAT могут быть прочитаны или записаны, но считанное значение будет последним записанным значением, а не входным значением вывода.

На старых PIC значения LATx не существовали; единственный способ записи в порт - это регистры PORTx. Любопытно, что некоторые из действительно старых PIC, еще со времен General Instruments (до Microchip), поддерживали LATx, но Microchip не добавляла эту функцию до линейки PIC18x.

3
ответ дан 28 November 2019 в 18:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: