En realidad, son dos dudas que tengo.
Cuando se produce una interrupción, JALv2, ¿salva los contenidos de W; STATUS; FSR, OPTION REG?
En caso negativo, esto quiere decir que hay que hacerlo uno propio. Esto me genera otra duda, ¿cómo hago para indicarle a JALv2 que yo quiero guardar una variable en la posición h'70'?
Como estoy trabajando con el 16F877, la posición de la RAM h'70' se puede acceder desde cualquier banco. Esto es muy útil para guardar los registros antes mencionados y por lo tanto quiero guardarlos ahí cuando se activa una interrupción y restaurarlos antes de salir.
Indicar la posición de una variable, en la RAM es muy fácil. Como siempre, las respuestas fácil, son las más difíciles de encontrar.
Indicar la posición de una variable, en la RAM es muy fácil. Como siempre, las respuestas fácil, son las más difíciles de encontrar.
Por ejemplo, queremos llamar una variable salvar_w y guardarla en la posición 0x70, se hace de la siguiente manera:
var volatile byte salvar_w at {0x70}
var = variable.
volatile = (realmente, no la entiendo. Al final de la respuesta pondré la traducción)(*).
byte es el tipo de variable, pudiendo ser bit, byte, o sbyte.
salvar_w es el nombre de la varible.
at = asginador.
{} = dirección de la memoria.
0x70 = dirección a la que se desea guardar.
Ahora solo me falta saber si JALv2 salva los registros mencionados en una interrupción y lo restaura al salir.
(*)
La palabra VOLATILE garantiza que una variable que es o usada o asignada no será optimizada. y la variable solo se podrá leer cuando una expresión se está evaluando.
Normalmente, si una variable se le asigna un valor no utilizado, la asignación se elimina y la variable no se ha asignado ningún espacio. Si la asignación es una expresión "podrá" ser completamente evaluado. Si se utiliza una variable, pero no asignado, todas las instancias de la variable será reemplazado con la constante 0 (del tipo adecuado) y la variable no se le asignará un espacio.
Perdón a todos. Me olvidé de comentar que si, JAL salva el contenido de W en la memoria RAM en la posición 0x70, para luego salvar STATUS y demás registros muy importantes ante una interrupción. Luego, al salir los restaura en forma correcta.