Em asm eu faria assim:
asm code
; ' essa rotina de exemplo pega o valor do PORTB, carrega numa variavel temporária (variavel_portb), depois faz a comparação com outra variavel que será um espelho
; de bkp, ela garante (temp_portb) que só irá passar um dado, quando o port b mudar de estado, é tipo um filtro'.
ver_port:
; "PUXA CONSTANTEMENTE PORTB PARA A VARIÁVEL "
movf portb, w
movwf variavel_portb
; " VERIFICA SE HOUVE ALTERAÇÃO NO PORTB"
movf variavel_portb, w
subwf temp_portb, w
btfsc status, z
goto ver_port ; looping, só sai dele quando portb for alterada.
movf variavel_portb, w
movwf temp_portb
; ....executa outras coisas
Como se faz isso em "C"...
obrigado