Контроллеры подгруппы РIС16F8Х имеют два порта: РОRТА (5 бит) и РОRТВ (8 бит) с побитовой индивидуальной настройкой на ввод или на вывод.
Порт А (РОRТА) представляет собой 5-битовый фиксатор, соответствующий выводам контроллера RА<4:0>. Линия RА4 имеет вход триггера Шмитта и выход с открытым стоком. Все остальные линии порта имеют ТТЛ входные уровни и КМОП выходные буферы. Адрес регистра порта А – 05h.
Каждой линии порта поставлен в соответствие бит направления передачи данных, который хранится в управляющем регистре ТRISА, расположенном по адресу 85h. Если бит управляющего ТRISА регистра имеет значение 1, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра-фиксатора порта. При включении питания все линии порта по умолчанию настроены на ввод.
Операция чтения порта А считывает состояние выводов порта, в то время как запись в него изменяет состояние триггеров порта. Все операции с портом являются операциями типа «чтение-модификация-запись». Поэтому запись в порт предполагает, что состояние выводов порта вначале считывается, затем модифицируется и записывается в триггер-фиксатор.
Вывод RА4 мультиплексирован с тактовым входом таймера ТMR0.
Порт В (РОRТВ) - это двунаправленный 8-битовый порт, соответствующий выводам RB<7:0> контроллера и расположенный по адресу 06h. Относящийся к порту В управляющий регистр ТRISВ расположен на первой странице регистров по адресу 86h. Если бит управляющего ТRISВ регистра имеет значение 1, то соответствующая линия будет устанавливаться на ввод. Ноль переключает линию на вывод и одновременно выводит на нее содержимое соответствующего регистра защелки. При включении питания все линии порта по умолчанию настроены на ввод.
У каждой ножки порта В имеется небольшая активная нагрузка на линию питания (pull-up). Она автоматически отключается, если эта ножка запрограммирована как вывод. Более того, управляющий бит / RBPU регистра ОРТION<7> может отключить) все нагрузки. Сброс при включении питания также отключает все нагрузки.
Четыре линии порта В (RВ<7:4>) могут вызвать прерывание при изменении значения сигнала на любой из них. Если эти линии настроены на ввод, то они опрашиваются и защелкиваются в цикле чтения Q1. Новая величина входного сигнала сравнивается со старой в каждом командном цикле. При несовпадении значения сигнала на ножке и в фиксаторе генерируется высокий уровень. Выходы детекторов «несовпадений» R.В4, RВ5, RВ6, RВ7 объединяются по ИЛИ и генерируют прерывание RBIF (запоминаемое в регистре INTCON<0>). Любая линия, настроенная как вывод, ,в этом сравнении не участвует. Прерывание может вывести кристалл из режима SLЕЕР. В подпрограмме обработки прерывания следует сбросить запрос прерывания одним из следующих способов:
• прочитать (или записать в) порт В. Это завершит состояние сравнения;
• обнулить бит RBIF регистра INTCON<0>.
При этом необходимо иметь в виду, что условие «несовпадения» будет продолжать устанавливать признак RBIF. Только чтение порта В может устранить «несовпадение» и позволит обнулить бит RBIF.
Прерывание по несовпадению и программно устанавливаемые внутренние активные нагрузки на этих четырех линиях могут обеспечить простой интерфейс, например, с клавиатурой, с выходом из режима SLЕЕР по нажатию клавиш.