dira[9..4]~~
dT := clkfreq / 4620
T := cnt
repeat
T += dT
waitcnt(T)
if ++count == 2310
count := 0
' Actualiza cada estado de LED al conteo correcto.
if count // T_LED_P4 == 0
!outa[4]
if count // T_LED_P5 == 0
!outa[5]
if count // T_LED_P6 == 0
!outa[6]
if count // T_LED_P7 == 0
!outa[7]
if count // T_LED_P8 == 0
!outa[8]
if count // T_LED_P9 == 0
!outa[9]
4) Ejemplo de Solución:
''File: MinuteSet.spin
''Imita botones de alarma de reloj.
PUB SetTimer | counter, divide
dira[9..4]~~
repeat
'Retrasa por 1 ms.
waitcnt(clkfreq/1000 + cnt)
{Si se presiona un botón...
NOTA: Reiniciar el contador a -1 hace posible presionar y soltar
rápidamente el botón y avanzar la pantalla minuto sin ningún retraso aparente.}
if ina[21] or ina[23]
counter++
else
counter := -1
'Inicia sobre flujo de minuto
if outa[9..4] == 63
outa[9..4] := 59
elseif outa[9..4] == 60
outa[9..4] := 0
'Activa contador duración de tiempo ms
if counter > 2000
divide := 50
else
divide := 200
'Si uno de los ciclos de ms han pasado
if counter // divide == 0
Apéndice B: Estudio de Soluciones
' Activa Pins E/S a Salida
' Activa incremento de tiempo
' Marca tiempo actual
' Ciclo Principal
' Activa sig meta cnt
' Espera por meta
' Reinicia cada 2310
' Activa pins E/S a salida
' Ciclo principal
' Retrasa 1 ms
' si se presiona botón
' incrementa contador
' de otra forma
' deja contador a -1
' Si 0 pasa 63
' reinicia a 59
' si no 59 incrementos a 60
' activa a 0
' Si contador > 2000 (10 incrementos)
' 50 ms entre incrementos
' de lo contrario
' 200 ms entre incrementos
' si paso un tiempo
Kit Educativo de Practicas Propeller: Fundamentos · Página 203