Hola fernando
Hasta donde yo se, y espero que algùn moderador me pueda apoyar o refutar, no sería posible hacer lo que tu quieres, al menos no con ese pic, porque necesitarías lo siguiente:
Dominio absoluto del contador de programa: se encuentra dividido en dos registros, PCL y PCLATH. Para poder hacer lo que tu quieres, tendrías que poder cargar el contador de programa de una sola vez, dos registros de forma simultánea...!! eso ni siquiera en assembler se puede hacer.
Dominio absoluto de la Pila o Stack: En procesadores como el Z80 o el 8085 (si se, dinosaurios informáticos) la pila se ubicaba en la RAM de forma arbitraria por el programador, así que era posible (pero no recomendable) manipular la pila y su puntero al antojo del programador. En los PIC16, la pila no se puede ni siquiera visualizar, ya que tu requieres respaldar completamente la pila para volver a recuperarla despues del corte de energía, y eso no se puede hacer ni al mas bajo nivel de programación (assembler).
Respaldo no volatil de toda la memoria de datos (RAM): Las variables del programa que se ejecuta en el PIC, se encuentran en la RAM, que por definición es una memoria volatil, asi que al cortar la energía, las variables se perderán por completo, a no ser que se manejen siempre desde y hacia una memoria no volátil, como la EEPROM interna del PIC o externa serial, pero esta opción llevaría a que la ejecución del programa sea asquerosamente lento por los tiempos de acceso y escritura de las memorias EEPROM.
Lo que si se puede hacer es dividir el programa en varias subrutinas que se ejecuten en secuencia, y que el programa principal pregunte al inicio el número de la subrutina que se encontraba en ejecución antes del corte de energía (número almacenado en la EEPROM interna), para retomar la ejecución de dicha subrutina, y no la de todo el programa. Pero quedaría el problema de las variables en RAM, que se perderían con el corte de energía.
Espero sirva de orientación, y saludos a quienes nos leen.