Leer Múltiples Entradas, Controlar Múltiples Salidas
Un grupo de bits puede copiarse del registro
. El comando
ina[21..23]
que los botones enciendan los LEDs.
Guarde una copia de ButtonToLed y modifíquelo para hacer que los botones P23, P22 y P21
enciendan los LEDs P4, P5 y P6 respectivamente. Sugerencia: Usted solo necesita el
comando
.
outa
Intente invertir el orden de los pins en
botón ingresa al mapa de las salidas de los LEDs? Que sucede si invierte el orden de los bits
en
ina[21..23]
Retrasos de tiempo con el reloj del sistema
Ciertas operaciones con E/S son mucho más fáciles de estudiar con el código que controla el tiempo
de ciertos eventos como cuando un LED enciende o cuánto tiempo se presiono un botón. Los tres
constructores de bloques básicos para un evento de tiempo en Spin son:
•
– un registro en el chip Propeller que cuenta los ciclos de reloj del sistema.
cnt
•
– un comando que regresa al chip Propeller la frecuencia del reloj en Hz. Otra forma
clkfreq
útil de pensarse es como el valor que almacena el número de ciclos de reloj en un segundo.
•
– un comando que espera a que el registro
waitcnt
El comando
espera a que el registro
waitcnt
tiempo que
espera es mejor sumar el numero de ciclos de reloj del sistema que han pasado al
waitcnt
número de ciclos de reloj que usted quiere que
El ejemplo suma
clkfreq
resultado de la suma entre paréntesis es el valor que el registro
Cuando el registro
alcanza ese valor
cnt
waitcnt(clkfreq + cnt)
Para calcular retrasos que duran fracciones de segundos simplemente divida
antes de sumarlo al registro
parte de un segundo y otro que retrasa por 1ms.
waitcnt(clkfreq/3 + cnt)
waitcnt(clkfreq/1000 + cnt)
El objeto LedOnOffP4.spin usa el comando
esperar 3/4s. El LED prende y apaga a 1 Hz y estará prendido el 25% del tiempo.
'' Archivo: LedOnOffP4.spin
PUB LedOnOff
dira[4] := 1
repeat
outa[4] := 1
waitcnt(clkfreq/4 + cnt)
outa[4] := 0
waitcnt(clkfreq/4*3 + cnt)
también tendrá que cambiarse a
dira[6] := 1
?
cnt
cnt
, el número de ciclos de reloj en un segundo, al valor actual de
waitcnt
' espera por 1 s.
. Por ejemplo, aquí está un comando
cnt
' espera 1/3 s
' espera 1 ms
waitcnt
Kit Educativo de Practicas Propeller: Fundamentos · Página 51
4: Práctica básica de E/S y tiempo
al
con un comando como
ina
outa
. Como afecta esto a la forma en que el
outa[6..4]
tenga un cierto valor.
cnt
alcance el valor entre paréntesis. Para controlar el
espere.
alcanzara 1 segundo después.
cnt
deja al programa moverse al siguiente comando.
waitcnt
para encender P4, esperar ¼ s, apagar P4 y
outa[6..4] :=
antes de
dira[6..4] := %111
cnt
por un valor
clkfreq
que retrasa una tercera
. El