estoy probando con lo que me habías sugerido anteriormente con el W_TEMP, me funciona solo con los que están parpadeando imagino que es por que para hacerlo pongo a 1 un registro, entonces el W_TEMP guarda el valor de la variable, pero no guarda los pines que e activado con :
BSF PORTB,2
me podrías explicar como hago para guardar estos, lo que estoy haciendo es:
dato_serie EQU 0x53 ; variables
W_TEMP EQU 0x54
STATUS_TEMP EQU 0x55
PCLATH_TEMP EQU 0x56
;**************************************
MUERTO
call salvar
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
call DEMORA
call DEMORA
call volver
goto inicio
;*******************************************
salvar
movwf W_TEMP
swapf STATUS,W
clrf STATUS
movwf STATUS_TEMP
movf PCLATH,W
movwf PCLATH_TEMP
return
volver
movf PCLATH_TEMP,W
movwf PCLATH
swapf STATUS_TEMP,W
movwf STATUS
swapf W_TEMP,F
swapf W_TEMP,W
return
siguiendo el ejemplo del datasheet