7: Práctica de Módulos Contadores y Aplicaciones de Circuitos
La ventaja de usar arreglos SPR es que son accesibles por los valores index. También
son elementos todo in uno sobre
phsb
contador A y B con tan solo agregar 1 a (o substraer 1 de) el valor del índice usado para accesar un
registro SPR dado. Esto en su momento hace posible eliminar la declaración de condiciones para
decidir cual modulo contador usar y también hace posible inicializar y actualizar módulos contadores
con estructuras cíclicas.
Una desventaja de los registros de propósito especial es que no son bit-direccionales. Por ejemplo los
comandos
ctra[30..26] := %00110
, el cual es el elemento del arreglo de propósito especial
spr[8]
dos comandos en lenguaje Spin con el arreglo SPR es como esto:
spr[8] := (%00110 << 26) + 4
En el comando de arriba el patrón de bit %00110 se mueve a la izquierda por 26 bits, lo cual tiene el
mismo alcance que
ctra[30..26] := %00110
. Aquí está la suma:
ctra[5..0] := 4
%00110 << 26
+ 4
────────────
spr[8]
Vamos a decir que la aplicación enviara señales duty en P4 y P5. Un ciclo que podría activar estos
pins de E/S para señales duty se vería así:
repeat module from 0 to 1
spr[8 + module] := (%00110 << 26) + (4 + module)
dira[4 + module]~~
La primera vez en el ciclo
se convierte en
module]~~
de
, y
spr[9]
dira[4 + module]~~
Cuando se usan contadores en objetos los pins probablemente pasaran como parámetros. Si los
parámetros sostienen el valor del pin quizá no estarán juntos o ligados por alguna relación
matemática. Una manera de mantener una lista de pins no ligados si no está esperando que vengan de
otro lado podría ser un comando
regresan un elemento en una lista. Por ejemplo el comando
almacenara 7 en
si
value
tabla el comando
lookup
si
es 0, o 11 en
index
value
si
excede la longitud de la lista.
index
Abajo hay una versión del ciclo
los carga en los bits 5..0 de los registros de propósito especial A y B del cog (
Note como el comando
almacena 4 en
, el cual se almacena en los bits 5..0 de
apin
La segunda vez en el ciclo
bits 5..0 de
y el bit 6 de
spr[9]
repeat module from 0 to 1
apin := lookupz (module: 4, 6)
spr[8 + module] := (%00110 << 26) + (apin)
dira[apin]~~
,
, y
ctra
frqa
and
ctra[5..0] := 4
, y sumando 4 a él sin mover tiene el mismo efecto que
%00011000000000000000000000000000
%00000000000000000000000000000100
─────────────────────────────────
%00011000000000000000000000000100
es 0, así el valor 4 se almacena en los bits 5..0 de
module
. La segunda vez
dira[4]~~
se convierte en
o
lookup
lookupz
es 1, 11 en
index
value
almacena0 en
. El mismo comando con
value
si
es 1, y así sucesivamente. Al igual que
index
que usa
repeat
lookupz
almacena 4 y 6. En el primer ciclo
lookupz
is 1, así 6 se almacena en
module
queda activado.
dira
Kit Educativo de Practicas Propeller: Fundamentos · Página 139
. Esto hace posible escoger entre registros de
phsa
tienen que codificarse diferente para
. El mejor modo de escribir estos
ctra
' 0 es modulo A, 1 es modulo B.
es 1, así 5 se almacena en los bits 4..0
module
.
dira[5]~~
. Dando un valor
index
value := lookup(index: 7, 11, 13, 1)
si
is 2, y así. Si
index
index
lookupz
para almacenar una lista de pins no ligados y
y activa el bit 4 en el registro
spr[8]
, el cual a su vez se almacena en los
apin
' 0 es modulo A, 1 es B.
,
ctrb
frqb
y
spr[8]
dira[4 +
ambos
y
lookup
lookupz
excede la longitud de la
almacenara7 en
value
,
regresa 0
lookup
lookupz
and
spr[8]
spr[9]
es 0 por lo que se
module
dira
, y
).
.