Bueno, pues cuando se añade al guna interru`ción en un PIC es muy recomendable salvar los registros "w", "status" y "pclath" antes de hacer nada en el vector de interrupción, porque puede ser que la interrupción salte cuando estes enviando información al lcd, y esta información cambie en la rutina de interrucpión. Aqui te paso el código necesario para salvar/restaurar estos registros cada vez que se atiende a una interrucpión:
Codigo:
org 0x04 ;Vector de interrupción
movwf w_temp ;Copy W to TEMP register
swapf status,w ;Swap status to be saved into W
clrf status ;bank 0, regardless of current bank, Clears IRP,RP1,RP0
movwf status_temp ;Save status to bank zero STATUS_TEMP register
movf pclath,w ;Only required if using pages 1, 2 and/or 3
movwf pclath_temp ;Save PCLATH into W
clrf pclath ;Page zero, regardless of current page
goto interr ;Salta a la rutina de interrupción
interr
;*****
;Aqui la rutina de interrupción (no olvides borrar los flags de interrupción antes de salir)
;*****
movf pclath_temp,w ;Restore PCLATH
movwf pclath ;Move W into PCLATH
swapf status_temp,w ;Swap STATUS_TEMP register into W (sets bank to original state)
movwf status ;Move W into STATUS register
swapf w_temp,f ;Swap W_TEMP
swapf w_temp,w ;Swap W_TEMP into W
retfie ;Fin de interrupción
Si con esto sigue sin funcionar, peganos el código aqui para que podamos ver lo que falla.