Entonces se escribe $03 [8] a $00FE y otra vez se decrementa el SP [9], esta vez a $00FD.
Para terminar con la instrucción JSR, se carga el PC con $0400 [10], que es la dirección de la llamada a
subrutina.
La CPU va a buscar la siguiente instrucción. Puesto que el PC es $0400, la CPU ejecuta la instrucción
DECA, la primera instrucción de la subrutina.
Se tacha $02 en la columna del acumulador y se escribe el nuevo valor $01 [11].
También se cambia el PC a $0401 [12].
Debido a que la instrucción DECA cambió el acumulador de $02 a $01 (qué no es cero o negativo), los bits
Z y N permanecerán a 0. Cada vez que se modifica N y Z, se puede anotar el valor de ellos en la hoja de
trabajo.
La CPU ejecuta ahora la instrucción BNE SUBBY. Puesto que el bit Z está a 0, se reúne la condición de
bifurcación y la CPU tomará la bifurcación. Se tacha $0401 bajo el PC y se escribe $0400 [13].
La CPU ejecuta de nuevo la instrucción DECA. El acumulador se cambia ahora de $01 a $00 [14] (qué es 0
y no negativo); así, el bit Z está a 1 y el bit N permanece a 0 [15].
El PC avanza a la siguiente instrucción [16].
La CPU ejecuta ahora la instrucción BNE SUBBY, pero esta vez la condición de bifurcación no es
verdadera (Z ahora se pone a 1) y no bifurcará. La CPU simplemente baja a la siguiente instrucción (la RTS
a $0403).
Actualiza el PC a $0403 [17].
La instrucción RTS provoca que la CPU recupere el PC previo de la pila. Saca la parte alta del PC de la pila
incrementando el SP a $00FE [18] y lee $03 de la posición $00FE.
A continuación, saca la parte baja de la dirección de la pila, incrementando el SP a $00FF [19] y lee $05 de
$00FF. La dirección recuperada de la pila reemplaza el valor del PC [20].
Seguidamente la CPU lee la instrucción STA $E0 de la posición $0305. El flujo del programa devuelve el
proceso al programa principal de donde salió cuando fue llamada la subrutina.
La instrucción STA (modo de direccionamiento directo) escribe el valor del acumulador a la dirección
directa $E0 ($00E0), que está en la RAM del MC68HC705J1A. Se puede ver, de la hoja de trabajo, que el
valor actual en el acumulador es $00; por consiguiente, los ocho bits de esta posición de RAM estarán a 0.
Puesto que la hoja de trabajo original no tenía una marca para grabar este valor en la RAM, se haría un
espacio y se escribiría en él $00 [21].
Para un programa más grande, la hoja de trabajo tendrá muchos más valores tachados. La hoja de trabajo es
un buen ejercicio de aprendizaje, pero como que un programador gana con la experiencia, el proceso se
simplificará. En el capítulo de programación, se verá una herramienta de desarrollo llamada simulador , que
automatiza el proceso de desarrollo del microcontrolador. El simulador es un programa para el microcontrolador
en el que corre desde un ordenador personal. Los contenidos actuales de los registros y las posiciones de
memoria se muestran en la pantalla ordenador personal.
Una de las primeras simplificaciones que se podría hacer en una hoja de trabajo, sería dejar de guardar los
valores del PC porque se aprende a confiar a la CPU que ya se cuida de esto. Otra simplificación, es dejar de
guarda la pista de los códigos de condición. Cuando se encuentra una instrucción 'branch' de la que depende un
bit del código de condición, se puede trabajar mentalmente hacia atrás para decidir si debe tomarse o no la
bifurcación.
A continuación, se saltaría el almacenamiento de los valores de la pila, aunque es una buena idea para
guardar la pista del propio valor del SP. Es bastante común tener errores de programación, que son el resultado
de valores incorrectos en el SP. Un principio fundamental de trabajo de la pila es que sobre un periodo de
tiempo, se debe poner en la pila el mismo número de datos como el que debe quitarse. Tal como que se deben
emparejar los paréntesis izquierdos con los paréntesis derechos en una fórmula matemática, también se debe
hacer en un programa. Las instrucciones JSRs y BSRs deben ser emparejadas para una subsiguiente RTS. Los
errores que causan el incumplimiento de estas reglas, aparecerán como valores erróneos del SP, mientras
funciona el microcontrolador.
Incluso un programador experimentado que programa ocasionalmente un microcontrolador para resolver
algún problema difícil, el procedimiento sería usar un modo menos formal que lo que se explica aquí, pero
todavía aumenta ponerse en el papel de la CPU y trabajar tal como pasa cuando se ejecuta el programa.
43