BSF leds,pulsada
pausa
END
DECFSZ cont1
GOTO pausa
DECFSZ cont2
GOTO pausa
DECFSZ cont3
GOTO pausa
GOTO borrar
; y activa el indicador de tecla pulsada
; Bucle anidado de 3 niveles
; que retarda aprox. 0.5 segundos
5.3.4 Tablas y subrutinas
El uso de rutinas, siendo sencillo y no requiriendo un apartado específico, es
esencial, puesto que simplifica los programas, haciéndolos, además, más modulares.
Llamaremos a una subrutina con la orden CALL, seguida de la etiqueta que la encabeza
o su dirección en memoria. Para regresar a la siguiente instrucción tras el CALL bastará
con situar, en la última línea de la subrutina, el comando RETURN; también será
posible emplear RETLW k, el cuál se diferencia del anterior por situar en el registro W
el valor k.
En los procesadores de gama media y alta existe una manera específica de
regresar en caso de interrupción: RETFIE. Las interrupciones generan un salto a la
dirección 0x04 que es tratado como una subrutina para permitir la continuación normal
del programa a partir del punto en que se llevó a cabo la interrupción. Este regreso se
lleva a cabo mediante RETFIE, que, además de restaurar el contador de programa (PC)
habilita de nuevo las interrupciones (ya que estas son deshabilitadas mientras se está
atendiendo una).
La pila de la gama media permite guardar hasta 8 saltos, es decir, admite un
máximo de 8 saltos a subrutina anidados. Recuerde este dato para no excederse en las
llamadas a las mismas ni en los niveles de un método tipo “Divide y Vencerás”.
Recuerde también siempre un posible salto por interrupción, para no pasar de 7 si ésta
está habilitada. En la gama baja sólo contará con dos niveles en la pila.
Una tabla, en cambio, es una lista ROM de constantes en la memoria de
programa, y que pueden ser d esde notas musicales a caracteres ASCII. Son
especialmente útiles para la conversión de unos códigos a otros, como, por ejemplo,
para pasar un hexagesimal a un display. Para generarlas se aprovecha la cualidad de
RETLW para situar un dato en el registro W.
60