POR FIN LO ARREGLE!!!!… 24hs para salucionario...
El tema era así…
Como estoy trabajando con el 16F877A tiene cuatro bancos de memoria, y si se trabaja con interrupciones no sirve el solo hecho de guardar primero el registro W y el STAUTS…
….
….
INTERRUPCION MOVWF REG_W
SWAPF STATUS,W
MOVWF REG_status
BCF STATUS,RP0 ;VOY AL BANCO 0
BCF STATUS,RP1
::::::::::
::::::::::
SALIDA SWAPF REG_status,W
MOVWF STATUS
SWAPF REG_W,F
SWAPF REG_W,W
RETFIE
… no sirve porque no se sabe de qué banco se viene.
Sabiendo esto de antemano había hecho lo siguiente,,,,,
INTERRUPCION MOVWF REG_W
SWAPF STATUS,W
MOVWF REG_status
MOVF STATUS,W
MOVWF REG_status2
BCF STATUS,RP0 ;VOY AL BANCO 0
BCF STATUS,RP1
::::::::::
::::::::::
SALIDA MOVF REG_status2,F
MOVWF STATUS
SWAPF REG_status,W
MOVWF STATUS
SWAPF REG_W,F
SWAPF REG_W,W
RETFIE
Si bien funcionaba esta mal porque la copia del registro status no se en donde la estoy guardando y si se va a una interrupción desde un banco que no sea 0 se van a cambiar los registros en la interrupción.
Entonces porque mi programa funcionaba si se accedía a la interrupción por medio de tmr1
Y tenía continuos saltos a los de mas bancos y dejaba de funcionar bien cuando le agregaba parte mencionada antes ….?????????
AUTORESPUESTA: por el simple hecho de que la parte agregada esta en la parte principal del programa y hay mas posibilidades de que se produzca un llamado de interrupción en ese momento que se encuentra en el banco 0….
INTERRUPCION MOVWF REG_W
SWAPF STATUS,W
MOVWF REG_status
MOVF STATUS,W
BCF STATUS,RP0 ;VOY AL BANCO 0
BCF STATUS,RP1
MOVWF REG_status2
::::::::::
::::::::::
SALIDA MOVF REG_status2,F
MOVWF STATUS ;voy al banco donde guarde los registro.......
SWAPF REG_status,W
MOVWF STATUS
SWAPF REG_W,F
SWAPF REG_W,W
RETFIE
Para finalizar los registros REG_W, REG_status y REG_status2, deben tener la misma dirreccion para los 4 bancossss o sea dejar espacios en blanco reservados....