Защелка выход защелка, на которую записаны значения. Порт - это напряжение на фактическом контакте.
Есть несколько ситуаций, когда они могут быть разными. Тот, с которым я столкнулся чаще всего, - это если у вас булавка (случайно) закорочена на землю. Если вы установили защелку на высокий уровень, защелка будет считываться высоко, но порт будет считаться низким, потому что напряжение на штыре все равно приблизительно заземлено.
Другая ситуация, ведущая к тому, что вы описали, - это когда контакт порта неправильно настроен. Я (и каждый, с кем я работаю) провел много часов, пытаясь понять, почему наш ПОС не работает с ожиданиями, чтобы в конечном итоге выяснить, что мы замаскировали, например, отключив аналоговые модули. Убедитесь, что вы переходите через порты ввода/вывода раздела -> PORT ?, TRIS ?, и LAT? регистры в техническом описании. Вы можете получить дополнительную информацию в Microchip wiki page, в которой объясняется, что вы читаете неправильное значение сразу после записи вывода на вывод, подключенный к емкостной нагрузке.
Это вики страница также объясняет:
Считывание из регистра защелки порта возвращает настройки выходных драйверов, в то время чтения регистра порта возвращает логические уровни увиденные на булавки.
Кроме того, вот отрывок из портов ввода/вывода раздела I на 18F14K50 (которые должны быть такими же, как и остальные серии 18F):
Каждый порт имеет три регистров для ее работа. Эти регистры являются:
- ТРИСЫ регистр (данные направления регистр)
- ПОРТА регистра (считывает уровни на контактах устройства)
- LAT регистр (выход защелка)
Поэтому в большинстве ситуаций вы будете писать на защелку и читать из порта.
Итак, если PIN-код находится в режиме INPUT, что я должен использовать? LATCH или PORT? И если PIN-код находится в режиме OUPUT, что я должен использовать? LATCH или PORT? – acemtp
@acemtp: ответ обновлен. –