Вот что я нашел в паспорте PIC16F1947:
Чтение регистра PORTB считывает состояние контактов, тогда как запись в него записывает в защелку PORT. Все операции записи являются операциями чтения-изменения-записи. Следовательно, запись в порт подразумевает, что контакты порта считываются, это значение изменяется, а затем записывается в защелку данных PORT (LATB).
Я разработчик прошивок и мой опыт работы в области компьютерных наук. Я все еще пытаюсь понять электронику и логику на аппаратном уровне. У меня есть только базовые знания.
Итак, я хочу понять, что происходит, когда данные записываются на аппаратном уровне.
Спасибо.
источник
Чтобы избежать проблем чтения-изменения-записи, следует записывать данные в порт целиком, а не устанавливать или сбрасывать отдельные биты в порту. Проблема RMW может привести к тому, что бит не будет установлен или другой выходной сигнал станет высоким, особенно если выходные контакты имеют источник питания или имеют большой ток.
Обычно используется «теневой регистр». Установите или сбросьте в нем биты и выведите их на порт, чтобы избежать проблем с RMW.
Эту проблему можно избежать с помощью PIC 18F благодаря использованию отдельной защелки, отдельные биты которой можно устанавливать и сбрасывать безнаказанно.
источник