Tienes razón, los PIC antes de PIC18 no permitían cambiar la parte superior de la pila.
Usted está haciendo una de las preguntas clásicas que me han hecho evitar los PIC, y especialmente todo lo anterior a PIC18, como la plaga proverbial. pila de PIC de wikipedia
Es una cosa perfectamente normal que hacer, siempre que entiendas lo que estás haciendo y no sea ilógico. Es un mecanismo central para los sistemas operativos multitarea o de proceso múltiple.
La razón normal para hacer algo así es hacer un cambio de contexto del sistema operativo (OS). Esto permitiría al software crear la ilusión de muchos procesos concurrentes. Cuando se ha reparado una interrupción, es posible que el sistema operativo no quiera volver al proceso interrumpido, sino que deba ejecutar un fragmento de código diferente. Parte del mecanismo es cambiar el puntero de pila a la pila de un proceso diferente, y luego ejecutar el retorno desde la interrupción.
Consulte AN818 que manipula la pila del microcontrolador PIC18 para saber cómo cambiar la dirección de devolución. Tenga en cuenta que es un documento PIC18.
Lamentablemente, AFAICT dice que PIC no es capaz de hacer eso.
Una técnica alternativa inferior es hacer que el bucle de control principal verifique una variable para detectar cuándo necesita salir y ejecutar ese otro código.
¿Hay alguna forma de forzar un RESET?