Tutorial 1 - LED's (tercera parte).




Los ejemplos anteriores ponian en alto o en bajo todos los pines del puerto B del PIC. Para terminar con este tutorial ahora veremos como modificar el estado de un solo pin y así encender o apagar cualquiera de los ocho leds conectados al puerto B. Vamos a ver cuatro formas distintas de hacer esto y así vamos a introducir algunas instrucciones nuevas.

Lo que se va a hacer en estos ejemplos es recorrer un "1" por el puerto B de tal modo que solamente uno de los 8 leds encienda a la vez. El programa utilizado cuando se habló del entorno de desarrollo MPLAB encendía un led utilizando la instrucción bsf, el siguiente ejemplo también utilizará esa instrucción.

Tutorial 1.3 - Encendiendo un led con bsf

bsf sirve para poner en alto el estádo lógido de un bit. En el siguiente ejemplo se utiliza para  encender los leds conectados al puerto B, para apagarlos se utiliza la instrucción bcf que sirve para poner en bajo un bit. La configuración del puerto es la misma que la de los ejemplos anteriores. Lo único distinto es la rutina que enciende y apaga los leds. La rutina la podemos ver en la siguiente imágen.

Utilizando la instrucción BSF

Vemos que lo primero que se hace es limpiar el puerto B con la instrucción clrf, después se pone en alto el bit 7 del puerto B con bsf, se llama a una rutina de retardo y al vovler de esta se pone en bajo el mismo bit con la instrucción bcf, luego se pone en alto el siguiente bit (en este caso el bit 6), se llama a la rutina de retardo y así el programa continúa hasta llegar al bit 0, luego con el goto se vuelve al inicio de la rutina (goto Ciclo). Este programa es muy sencillo y nos sirve para practicar las instrucciónes bsf y bcf. Descargar código.

Tutorial 1.4 -  Encendiendo un led usando movlw y movwf

En las primeras dos partes de este tutorial se utilizaron las instrucciones movlw y movwf para encender y apagar todos los leds conectados al puerto B. Ahora se utilizarán para realizar exactamente la misma tarea que el tutorial 1.3. El resultado se puede ver que es muy parecido.

Utilizando las instrucciones MOVLW y MOVWF

En esta ocasión los leds se encienden a través de la instrucción movwf, después de cargar el registro W con el bit que se desea poner en alto. Descargar código.

Tutorial 1.5 - Recorriendo los bits con rrf

Los dos programas anteriores funcionan sin ningún problema, sin embargo hay otra forma de hacer la misma función con menos código, utilizando la instrucción rrf. Esta instrucción rota a la derecha el contenido de un registro a través del carry. Para rotar a la derecha el puerto B primero se carga el número binario b'10000000' para así encender el led RB7. La instruccion rrf se encargará de rotar el bit desde el 7 hasta el 0 y al final pondrá en alto la bandera de carry, es entonces cuando el programa vuelve a comenzar.

Utilizando la instrucción RRF

Como se ve, el código utilizando rrf es mucho más pequeño y de esta manera el programa final es más ligero y elegante. Descargar código.

En estos tres ejemplos los bits que encienden los leds se recorren desde el bit 7 hasta el 0, o  lo que es lo mismo hacia la derecha. Ese orden se puede cambiar fácilmente. En el primer ejemplo basta con modificar los bits de las instrucciones bsf y bcf, en el segundo se cambia el patrón de los números binarios y en el tercero se logra utilizando la instruccion rlf que tiene el mismo funcionamiento que rrf pero rotando los bits hacia la izquierda.


3 comentarios:

Anónimo dijo...

Saludos!
Antes que nada te agradesco por aportar la informacion al internet visitare seguido tu blog.
he comprendido el programa de "Encendiendo un led con bsf" pero aun no comprendo por que usaste
goto $+2
goto $+1
se que son para hacer mas tiempo pero en si
$+2
$+1
no se que significa, que hace.
te agradeceria me pudieras explicar.
buena vibra.

Anónimo dijo...

gracias por lo del led.asm lo voy a correr a ver si me funciona...

Oscar dijo...

@anónimo 1. Perdón por la tardanza, el caracter “$” hace referencia a la línea en la que se encuentra el programa, por ejemplo un “goto $” dejaría ciclado el programa siempre en la misma línea. “goto $+2″ le indica al programa que salte 2 líneas hacia adelante.

Publicar un comentario en la entrada

Utiliza nuestro foro de electronica si tienes dudas no relacionadas con este tema.