Listado 4. Estructura del Programa Bucle Regulador (pág 4 de 5)
LDA
STA
CLR
CLR
*******************************************************
* MAIN – Empieza el bucle principal del programa
* El bucle se ejecuta cada 100 ms (98.4 ms)
* Necesita 100 ms para pasar a través de todas las rutinas
* de mayor tarea y entonces el tiempo se ha consumido hasta
* que MSB de TIC se pone a 1 (cada 3 RTIFs = 98.4 ms).
* A cada interrupción RTIF, se borra RTIF y RTIFs
* consigue decrementar (3-0). Cuando RTIFs = 0, MSB de
* TIC se pone a 1 y RTIFs se pone a 3.
* (3*32.8/RTIF = 98.4 ms).
*
* La variable TIC guarda la traza de períodos de 100mS
* Cuando TIC incrementa de 9 a 10 es borrado
* a 0 y TOC es incrementado.
*******************************************************
MAIN
CLRA
STA
BRCLR 7,TIC,MAIN
LDA
AND
INCA
STA
CMP
BNE
CLR
ARNC1
EQU
* Fin de sincronización a 100 ms TIC; Corre la tarea principal
* y bifurca a MAIN en 100 ms. Sync está bien en tanto tiempo
* como 2 pasos de tareas no consecutivas, que es más de 196.8 ms
JSR
JSR
* Otra tarea principal iría aquí
BRA
** Fin del Bucle Principal ***********************************
*******************************************************
* TIME – Actualiza TOCs
* Si TIC = 0, incrementa 0->59
* Si TIC no es = 0, salta la rutina entera
*******************************************************
TIME
EQU
TST
BNE
INC
LDA
CMP
BNE
CLR
XTIME
RTS
#3
RTIFs
TIC
TOC
COPR
TIC
#$0F
TIC
#10
ARNC1
TIC
*
TIME
BLINK
MAIN
*
TIC
XTIME
TOC
#60
TOC
XTIME
TOC
;RTIFs cuenta 3->0
;Reset del contador TOFS
;Valor inicial para TIC
;Valor inicial para TOC
;activa el 'watchdog'
;si está habilitado
;Bucle aquí hasta flanco TIC
;carga el valor actual de TIC
;Borra MSB
;TIC = TIC+1
;Actualiza TIC
;¿décimo TIC?
;Si no, salta al siguiente borrado
;Borra TIC en 10th
;
;Actualiza TOCs
;parpadea el LED
;vuelve al inicio para el siguiente TIC
;Actualiza TOCs
;Prueba para TIC = cero
;Si no; justo salir
;TOC = TOC+1
;hace TOC -> 60 ?
;Si no, justo salir
;TOCs 'rollover'
;Volver desde TIME
89