Foi o que encontrei na folha de dados PIC16F1947:
A leitura do registro PORTB lê o status dos pinos, enquanto a gravação nele é gravada na trava PORT. Todas as operações de gravação são operações de leitura, modificação e gravação. Portanto, uma gravação em uma porta implica que os pinos da porta sejam lidos, esse valor seja modificado e gravado na trava de dados PORT (LATB).
Sou desenvolvedor de firmware e tenho experiência em Ciência da Computação. Ainda luto para entender a eletrônica e a lógica no nível do hardware. Eu só tenho o conhecimento básico.
Então, eu quero entender o que acontece quando os dados são gravados para travar no nível do hardware.
Obrigado.
fonte
Para evitar problemas de leitura, modificação e gravação, você deve gravar na porta como um todo, em vez de definir ou redefinir bits individuais na porta. Um problema de RMW pode resultar em um pouco de não ser definido ou em outra saída alta, especialmente se os pinos de saída estiverem adquirindo ou afundando muita corrente.
Um "registro de sombra" é normalmente usado. Defina ou redefina os bits e envie-o para a porta, para evitar problemas de RMW.
O problema é evitado com os PICs 18F pelo uso de uma trava separada, com bits individuais que podem ser configurados e redefinidos com impunidade.
fonte