de las tareas restantes, después de TIME pueden usar los valores actuales de TIC y TOC para decidir lo que se
necesita hacer en este paso, a través del Bucle Base.
En el
Listado 4. Estructura del Programa Base
un submúltiplo entero de 1 segundo. Los tres periodos de RTI son iguales a 98.4 milisegundos. Esto es cercano a
0.1 segundo, pero no lo suficiente preciso para ser usado como un reloj de pulsera. Se puede conseguir un tiempo
real exacto si se modifica el programa del Bucle Base para usar una fuente de disparo diferente como cruces por
cero de la línea de red (corriente alterna) de 60 Hz. Aunque la línea de red no es tan exacta como la de un cristal
en periodo cortos de tiempo, es muy exacto en largos periodos de tiempo. La mayoría de los relojes conectados a
la red lo utilizan como base de tiempo.
Sus Programas
Las tareas de las subrutinas tienen pocas restricciones. Cada tarea de la subrutina debe hacer todo lo que
se necesita hacer, tan rápidamente como pueda y entonces ejecutar un retorno de subrutina (RTS). El tiempo
total necesitado para ejecutar un paso a través de todas las tareas de la subrutina debe ser menor que dos inicios
de secuencia, (posteriormente se explicará esto en mayor detalle). El punto importante es que una tarea de la
subrutina no debe esperar que ocurran algunos eventos externos, como un interruptor al ser apretado. Esto
provocaría retardos en la secuencia del Bucle Base.
El Bucle Base se puede preparar para los rebotes del interruptor automáticamente. Es conocido que
cuando se pulsan los interruptores y se sueltan hacen rebotes. No es nada raro que cuando se pulsa un interruptor,
haga rebotes de una duración de 50 ms o más. Un microcontrolador puede ejecutar las instrucciones mucho más
rápidas que una sola pulsación de un pulsador a menos que se tomen los pasos para contar los rebotes del
pulsador. Hay métodos hardware para eliminar los rebotes del interruptor, pero requiere más componentes y
aumento del costo del producto.
También se puede usar el software para eliminar los rebotes de un interruptor, como el programa
ejemplo de la
Figura
31. El diagrama de flujo usa un retardo por software muy simple para eliminar los rebotes
de un interruptor, pero esta rutina no se debe usar directamente en la estructura del bucle regulador porque toma
demasiado tiempo. En un Bucle Base, se pueden eliminar los rebotes de un interruptor leyendo los pasos
consecutivos a través del Bucle Base. La primera vez que se ve el interruptor pulsado, se puede escribir un valor
especial a una variable para indicar que el interruptor fue pulsado provisionalmente. (Este interruptor todavía no
se debería considerar como pulsado). En el siguiente paso a través del Bucle Base, tampoco se podría marcar que
el interruptor se ha pulsado o se ha dejado de pulsar, con una marca para indicar que fue una falsa detección. De
igual manera, cuando el interruptor se suelta, se puede marcar como una tentativa de haberse soltado y en el
siguiente paso por la marca es como si se hubiera soltado realmente.
Consideraciones de tiempo
A ser posible, se deben terminar todas las tareas de las subrutinas en el bucle regulador antes de que
llegue el siguiente inicio de secuencia. Si un simple paso a través del bucle, necesita mucho más tiempo que los
periodos de inicio de secuencia, el 'flag' que indica que es el momento de empezar el siguiente paso a través del
bucle principal, se pondrá cuando se vuelva al inicio del bucle. No pasa nada malo a menos que se consiga detrás
de hasta ahora que un nuevo inicio de secuencia venga antes de que el anterior sea reconocido. El Bucle Base
permanece válido a menos que cualquiera de los dos pasos consecutivos necesite más de dos periodos de inicio
de secuencia.
Un poco de planificación puede asegurar que ninguno de los dos pasos consecutivos a través del bucle
necesite mucho más tiempo que dos periodos de control de secuencia. Especialmente las largas tareas de
subrutinas se pueden fijar para ejecutar durante un particular paso del bucle regulador cuando otra actividad muy
pequeña sea fijada. Se puede usar una simple inspección de una de las variables de tiempo como TIC o TOC
para decidir si o no realizar una rutina particularmente lenta. Si se tuvieran que hacer varias veces por segundo,
un bucle podría fijar el paso de TIC = 0 y otro bucle podría fijar el paso de TIC = 2 y así sucesivamente.
Consideraciones de la Pila (Stack)
Los Microcontroladores pequeños como el MC68HC705J1A, tienen la RAM muy pequeña para la pila
y para las variables del programa. Las interrupciones utilizan cinco bytes de RAM de la pila y cada llamada a
subrutina utiliza dos bytes en la pila. Si una subrutina llama a otra subrutina y es solicitada una interrupción
antes de terminar la segunda subrutina, la pila habrá utilizado 2 + 2 + 5 = 9 bytes de RAM, de los 64 bytes
disponibles. Si la pila ocupa mucho lugar en la RAM, hay el peligro de que las variables de la RAM puedan
escribirse encima de los datos de la pila. Para evitar estos problemas, se debe calcular el peor de los casos en que
la secuencia está codificada a la RTI, no pasa de ser
84