Me respondo a mi mismo.
Luego de haber reinstalado el MPLAB porque no había forma de simularlo correctamente, logré simular mi duda (por eso había echo la pregunta porque el MPLAB se comportaba raro). Si justo quedo en el banco 3, los valores a salvar temporalmente serán guardado en el banco que quedó justo el registro STATUS en el momento de la interrupción. A mi ejemplo anterior los datos salvados quedarán en el banco 3 :( (pensaba que mágicamente, y al tratarse la interrupción, se salvaba en el banco 0, pero no).
¿Algún concejo que me puedan dar para encarar este problema? ¿La única solución factible es que cada vez que trabaje fuera del banco 0 desactive las interrupciones?
Alogic.on si no me equivoco, la familia 24 viene con un solo banco de memoriaesto me lo apunto :mrgreen:
A partir de la familia 18F se cambió la arquitectura, y estas cosas han mejorado mucho...a partir de la 18f tambien¡¡¡'' :shock: si es asi que hago yo con un 16f me parecio leer en un post que habian sacado una familia mejorada de 16f que tenia varias caracteristicas de la 18f :? sabeis a que me refiero??
para zerc79
no puedes volver de la interrupcion en otra posicion de programa, se te van a acumular niveles de la pila si no utilizas un return/retfie al terminar la int. lo que puedes hacer es que haga el codigo dentro de la interrupcion. me parece que pic18 puede alterar los valores de la pila pero.... de eso no tengo ni dea
Si quieres que en alguna parte del código (fuera de la interrupción) no ocurra ninguna, lo que tienes que hacer es desactivar el bit GIE del registro INTCON y por mas que ocurra una interrupción, no hirá al vector 0004h y por ende, no habrá interrupción. Luego de terminar la parte que no quieres en que alla una iterrupción, vuelve a habilitar el bit GIESi es el bit 7 de INTCON, gracias pero lo que quiero es poder reaccionar de inmediato ante una interrupcion es decir trasladarme directamente a otra parte del codigo, pero como me dice alogic y lo que estuve leyendo el PLC no se puede escribir desde el codigo, se puede modificar el PCLAH para redireccionar los bancos pero igual no me sirve porque no se a donde llegue tons nop...
¿Lo que quieres hacer si dentro de una interrupción tener otra interrupción de mayor prioridad?
Una solución sencilla es colocar una demora de menor valor, por ejemplo 100ms y utilizar una variable para contar la cantidad de veces, entonces cuando este llegue a 200 (20seg) guardas en la memoria, pero tui bucle se repite cada 100ms.
Lo de cambiar los pines de I2C, si estas usando el hardware del PIC no puedes cambiar nada, pero si lo estas haciendo por software puedes elegir lo que quieras.