.: Los efectos - Sección IV
Pasemos al efecto 16 que sería el último, bueno elegí este, por que es el más sencillo de explicar, y luego cuando lo entiendas, podrás hacerle frente a los demás, la secuencia sería la siguiente...
Monitor de LED's |
switch en 1111 |
|
|
|
.: Y este es el código completo...
efect16 CLRF portb ; limpia el puerto B
BSF portb,7 ; (10000000)
BCF estado,0 ; pone a 0 el bit C de status (el 1º bit)
seis CALL clokon
RRF portb,1 ; rota a la derecha
BTFSS portb,0 ; ve si terminó de rotar
GOTO seis
CLRF portb ; (00000000)
BSF portb,0 ; (00000001)
BCF estado,0 ; pone el carry a 0
siete CALL clokon
RLF portb,1 ; rota a la izquierda
BTFSS portb,7 ; ve si terminó de rotar
GOTO siete
CALL clokon
RETURN
|
|
Lo que hice en este efecto es una rotación, primero en un sentido, luego en otro y para ello hice uso del CARRY (acarreo), el CARRY (C) es el primer bit (bit0) del Registro STATUS, aquel que vimos en nuestro primer tutorial cuando hacíamos la configuración de puertos, y que siempre utilizamos para hacer el cambio de banco de memoria.
Ahora voy a tratar de explicarte como hacer un acarreo utilizando este bit. Por ahora desconozco si está a 0 ó a 1, y en la primera instrucción limpio el puerto B, de tal modo que las cosas están así...
En la segunda instrucción pongo a 1 el bit7, y en la tercera el CARRY a 0, ahora la situación cambió a esto...
Lo que hice hasta ahora sólo fue preparar las cosas para hacer una rotación, pero como el efecto ya comenzó y se activó el bit7 de portb, llamo al timer, y cuando regrese, comenzaré a rotar.
RRF portb,1 ; rota a la derecha
Esta es la primera rotación, antes de explicar nada, quiero que veas como queda luego de la primera rotación
La verdad creo que... no se si es necesario explicar, pero para los más duritos, lo único que ocurrió es algo así como que el bit0 pasó al CARRY (C). (aunque lo cierto es que el carry se pondrá a 1 cuando haya un desbordamiento del registro que se esta rotando, en este caso portb)
BTFSS portb,0 ; ve si terminó de rotar
Lo que se hace aquí es una inspección en el bit0 de portb (que también podrías hacerla en el carry, pero no es este caso por ahora)
La instrucción en sí es un condicional algo así "prueba el bit0 de portb y salta una línea si es 1", bien, ahora contesta la pregunta...!!!, es uno...?, no verdad..., pues entonces hacemos un...
GOTO seis
Es decir, vamos a la etiqueta seis para seguir con la rotación, y allí nos encontramos con la llamada al timer y luego bla, bla, bla ..., ahora lo vamos a ver completo, ahí va...
Bueno, creo que no lo vas a ver si no actualizas la página :o))
Observa como se desplaza el bit activo, y como luego de cada desplazamiento se hace la inspección, y una vez la inspección detecta el uno en el bit0 de portb, termina limpiando el puerto (poniéndolo a cero)
Ahora que ya terminó la rotación hacemos...
BSF portb,0 ; (00000001)
Esto es poner a 1 el bit0 de portb, y luego hacemos la rotación al revés, con RLF, sencillo no crees...???
Bien, ahora nos toca complicarnos un poco más por que sino esto se pone aburrido...
R-Luis...
<--Anterior
Introducción
Siguiente -->
Tabla de Referencias
|