Una manera diferente de responder a las interrupciones inesperadas, sería restablecer el indicador de
pila (con una instrucción RSP) y entonces saltar a la misma dirección como si hubiera ocurrido un 'reset'. Esto
quiere decir que si ocurre una interrupción inesperada, puede haber otro serio problema. Restableciendo el
puntero de pila y volviéndolo a iniciar todo, es la forma de corregir cualquier cosa causada por una interrupción
inesperada.
Mientras se depura un programa en un simulador, hay otra manera posible de manejar las interrupciones sin uso:
"
" "
"
0351
BADINT
"
" "
"
"
" "
"
07FA
03 51
VECTOR
"
" "
"
En este esquema, una interrupción inesperada causará a la CPU que vaya al vector a BADINT. La
instrucción a BADINT es un retorno a un bucle infinito a BADINT, para que el sistema se quede colgado en ese
bucle. Se puede detener el simulador y se pueden verificar los valores de los registros de la CPU en la pila para ver
lo que el programa estaba haciendo cuando se consiguió la interrupción inesperada.
Variables de la RAM
Las variables del programa cambian de valor durante el curso de la ejecución de un programa. Estos
valores no se pueden especificar antes de escribir el programa y programar la MCU. La CPU debe usar
instrucciones del programa para inicializar y modificar estos valores.
Cuando se escribe un programa, se reserva un espacio para las variables en la memoria RAM, usando la
directiva de reserva de byte(s) de memoria (RMB).
Primero, se pone una directiva origen (ORG) para poner el contador de posición del ensamblador a la
dirección de inicio de la RAM ($00C0 en el MC68HC705J1A). Cada variable o grupo de variables se pondrá
con una directiva RMB. La línea RMB se identifica por el nombre de la variable. El ensamblador asigna el
nombre (etiqueta) a la siguiente dirección disponible. Después de asignar cada nueva variable o grupo de
variables, el contador de posición avanza para apuntar a la siguiente posición de memoria libre.
Como el programa mostrado en el
saben que es una buena práctica poner a 0 todas las posiciones de la RAM, como uno de los primeros pasos de
inicialización después de cualquier 'reset'.
Mientras se depura un sistema, es útil tener un juego conocido de condiciones de arranque. Si la RAM
se pone completamente a 0 al empezar un programa, es fácil decir si se ha escrito cualquier posición.
Bucle Base
El Bucle Base es una estructura de software de propósito general, que es conveniente para una amplia
variedad de aplicaciones. La idea principal es romper la aplicación global en una serie de tareas como, guardar la
huella de tiempo, la lectura de las entradas del sistema y actualización de las salidas del sistema. Cada tarea se
escribe como una subrutina. Se construye un bucle principal fuera de las instrucciones de salto a subrutina (JSR)
para cada tarea. La primera parte del bucle es un contador de secuencias software. Cuando activa el contador de
secuencias, la lista de tareas de la subrutina se ejecutan una vez y una instrucción de bifurcación toma el inicio
del bucle para esperar el siguiente inicio de secuencia.
La
Figura 37
muestra un organigrama del bucle regulador principal. El bloque de inicio es un bucle que
espera para el inicio de secuencia (cada 100 milisegundos). Los siguientes bloques tienen que ver con el
mantenimiento del contador TIC. El programa
tareas principales, TIME y BLINK. Se podría quitar una de las dos rutinas o ambas y sustituirse por tareas
propias. La única limitación en el número de tareas principales, es que deben acabar bastante rápidas para no
perder el inicio de secuencia. El último bloque del organigrama es una bifurcación de retorno al inicio del bucle
para esperar al siguiente inicio de secuencia.
"
"
BRA
BADINT
"
"
"
"
FDB
BADINT
"
"
Listado 4. Estructura del Programa Base
Listado 4. Estructura del Programa
82
"
;Bucle Infinito hasta aquí
"
"
; Atiende una interrupción inesperada
"
, algunos programadores
Base, tiene dos simples