Página de inicio Mi Correo






   » Foro
   » Nuevo Foro
   » Mi Correo
   » Mis Actividades...


--- Novedades ---



    
  » Microcontroladores » Tutor de MPLAB (12 de 19)  

.: 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 -->
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19
Tabla de Referencias


    
--| |--