Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROGRAMANDO MICROCONTROLADORES
PIC CON PROTN
PARTE 7: BUCLES
BUCLE.- Es una sentencia de control que repite un determinado nmero de veces
(iteracin) una parte de cdigo hasta que se cumpla una condicin establecida. Es muy
utilizado para hacer una accin repetida sin tener que repetir varias veces las mismas
sentencias, ahorrando tiempo y permite entender mejor la estructuracin del
programa, los bucles y condicionales forman la parte principal de la programacin
estructurada.
Existen diferentes bucles en Protn, cada uno con una estructura diferente, pero que
siguen el mismo principio, el de realizar un nmero determinado de iteraciones.
FOR - NEXT
WHILE - WEND
REPEAT - UNTIL
BUCLE FOR.- seguramente el bucle ms conocido, desde los primeros pasos por los
algoritmos conocido como para, este bucle realiza una serie de iteraciones hasta que
se cumpla una condicin determinada.
Sintaxis:
FOR Variable = Inicio del conteo TO Fin del conteo [ STEP { Valor del incremento de la variable } ]
{cuerpo del cdigo}
NEXT
Descripcin.- Un bucle FOR NEXT, es usado para ejecutar un cdigo determinado un cierto
nmero de veces.
Operadores.Variable.- se refiere a un ndice que sirve de referencia para empezar el bucle, esta variable
ndice, puede ser utilizada en el cuerpo del cdigo pero hay que tener mucho cuidado y no
alterar el valor pues puede afectar el nmero de iteraciones del bucle.
Inicio del Conteo.- es el nmero de inicio para el conteo, al que inicialmente se le asignar el
valor de la variable. No es necesario que este valor sea constante, tambin se puede usar el
valor de otra variable.
Fin del Conteo.- Es el nmero que determina cuando terminar el lazo. No es necesario que
este valor sea constante, tambin se puede usar el valor de otra variable.
M&M
EJEMPLO 1:
For i=0 To 255 'inicio del bucle
PORTB=i 'al puerto b se le asigna el valor de i
DelayMS 100 'retardo de 100 milisegundos
Next i 'incrementa en 1 la variable i
El presente ejemplo cumple con un total de 256 repeticiones (a partir de ahora a las
repeticiones nos referiremos con el nombre de iteracin), i es la variable que va a ir
incrementndose, se le asigna un valor constante, cero, del cual va a partir el conteo y
ejecuta las lneas de cdigo hasta que sea 255.
El incremento de la variable lo hace automticamente el NEXT, que significa prximo, como no
se utiliza STEP, los incrementos son de uno en uno haciendo un total de 256 iteraciones
(incluyendo el primer valor de i que es 0), el valor de i, es asignado al puerto B, el retardo es
para que el valor se mantenga en un periodo de tiempo, si se conectan ocho leds a la salida del
puerto B, se puede apreciar como se van prendiendo y apagando, en este caso el programa es
para realizar un contador binario de 8 bits.
El valor que contiene i, se ir apreciando en los pines que se activan para formar el nmero
binario correspondiente al valor decimal que contiene la variable i.
NOTA.- NEXT sirve para incrementar la variable que se est utilizando en el bucle FOR, no se lo
puede utilizar para hacer incrementos de variables fuera del bucle, para ello se debe hacer la
asignacin respectiva: ej. A=A+1 o utilizar la instruccin INC.
Ejemplo 2
For i=255 To 0 Step -1 'inicio del bucle
PORTB=i 'al puerto b se le asigna el valor de i
DelayMS 100 'retardo de 100 milisegundos
Next i 'decrementa en 1 la variable i
Este ejemplo, como el anterior, es un contador binario de 8 bits, la diferencia es que el anterior
cuenta de forma ascendente y este cuenta de forma descendente.
A la variable i se le asigna el valor desde el cual va a empezar a contar, para este ejemplo 255,
STEP 1 indica que se va a decrementar la variable en 1, el proceso es igual que el caso
anterior, el valor de i se asigna al puerto B para realizar el contador binario de 8 bits.
M&M
En este ejemplo, como los anteriores, se trata de un contador binario, la diferencia es que el
conteo se lo va a realizar solo para nmeros pares, ya que la variable i parte de 0 y los
incrementos se dan de a dos valores tal como se indica con STEP 2
Ejemplo 4
j=100 'se a signa a j un valor 100
For i=0 To j+155 'inicio del bucle
PORTB=i 'al puerto b se le asigna el valor de i
DelayMS 100 'retardo de 100 milisegundos
Next i 'decrementa en 1 la variable i
Recuerde, el conteo del bucle puede partir desde cualquier valor constante o variable, hasta
un valor tambin constante o variable, eso es lo que se muestra en este ejemplo, el bucle
tambin cumplir con un total de 256 iteraciones, hay dos variables, j e i, a la primera
variable, se le asigna un valor de 100 antes de empezar el bucle, el conteo parte desde i=0
hasta j+155 que sera en total 100 + 155 iteraciones, lo cual permite realizar un conteo de 8
bits de forma ascendente como el ejemplo 1.
BUCLE WHILE.- Este bucle realiza una serie de iteraciones cuando la condicin es verdadera, su
traduccin es: haga mientras; si la condicin establecida en el WHILE se cumple, se seguirn
ejecutando las lneas de cdigo dentro de ese bucle.
Sintaxis
WHILE Condicin
Instrucciones
Instrucciones
WEND
WHILE Condicin { Instrucciones : } WEND
Descripcin.- Este bucle ejecuta instrucciones mientras la condicin sea verdadera. Cuando la
condicin es verdadera, se contina ejecutando el cdigo hasta el correspondiente WEND. La
condicin puede ser cualquier expresin de comparacin.
Ejemplo 1
VAR1 = 1
While VAR1 <= 10
Print @VAR1 , " "
VAR1 = VAR1 + 1
Wend
M&M
Condicin
var1<=10
var1<=10
var1<=10
var1<=10
var1<=10
var1<=10
var1<=10
var1<=10
var1<=10
var1<=10
var1<=10
Estado
VERDADERO
VERDADERO
VERDADERO
VERDADERO
VERDADERO
VERDADERO
VERDADERO
VERDADERO
VERDADERO
VERDADERO
FALSO
Resultado
Cdigo ejecutado dentro del WHILE WEND
Cdigo ejecutado dentro del WHILE WEND
Cdigo ejecutado dentro del WHILE WEND
Cdigo ejecutado dentro del WHILE WEND
Cdigo ejecutado dentro del WHILE WEND
Cdigo ejecutado dentro del WHILE WEND
Cdigo ejecutado dentro del WHILE WEND
Cdigo ejecutado dentro del WHILE WEND
Cdigo ejecutado dentro del WHILE WEND
Cdigo ejecutado dentro del WHILE WEND
Termina el bucle
Ejemplo 2
While PORTA.0 = 1: Wend ' Espera por un cambio en el pin del puerto A
En el presente ejemplo, se muestra una lnea de cdigo que espera hasta que un bit de un
puerto determinado no cambie de estado, esto es muy utilizado en los anti rebotes de tecla,
tanto para pulsantes simples como para teclados matriciales, permitiendo ingresar datos
solamente cuando se presione una tecla.
El bucle se repetir una y otra ves hasta que el valor de PORTA.0 sea 0.
BUCLE REPEAT.- es muy similar al bucle WHILE, en este caso el cdigo es ejecutado hasta que
se cumpla una condicin, su traduccin es REPITA HASTA.
Sintaxis.REPEAT Condicin
Instrucciones
Instrucciones
UNTIL Condicin
REPEAT { Instrucciones: } UNTIL Condicin
Descripcin.- Ejecuta un bloque de instrucciones hasta que una condicin sea verdadera.
El bucle REPEAT-UNTIL difiere del WHILE-WEND, en que el primero realizar al menos una ves
las instrucciones dentro del lazo y luego lo har de forma continua hasta que la condicin sea
Ing. Giovanni Lafebre J. (Cel: 084278683; Fono 4036038) Cuenca Ecuador
M&M
Los dos bucles realizan un total de 10 iteraciones, y visualizan en un LCD el valor de la variable
VAR1.
Ejemplo 2:
Repeat High LED : Until PORTA.0 = 1 ' espera un cambio de estado en el BIT A0 del Puerto A
Ejecuta una sentencia hasta que se cumpla una condicin, en este caso est dada por el estado
lgico del BIT RA0 del Puerto A, las condiciones no solo estarn dadas por variables sino por
registros del microcontrolador.
EJERCICIO.- El siguiente ejercicio trata sobre una secuencia de luces, ocho leds conectados al
puerto B del PIC16F84A, se irn encendiendo una a una, para que se asemejen al ya conocido
auto fantstico, la tabla de valores para la secuencia de luces se muestra en la siguiente tabla:
128
2
64
32
16
Val. Dec. RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
16
32
64
128
M&M
Sera lo que se quiere hacer, pero veamos como podemos hacerlo con bucles, la idea es poder
generar los siguientes valores que son los que se deben asignar al puerto:
128 - 64 - 32 - 16 - 8 - 4 - 2 - 1
Ntese que los valores de derecha a izquierda son siempre el doble, es decir, 2 es el doble de
1, 4 es el doble de dos, 8 es el doble de 4 i as sucesivamente, por lo tanto, necesitamos una
variable para poder hacer una multiplicacin simple, por ejemplo:
Valor=1
Esta variable, ya contiene el primer valor que hay que asignar al puerto, luego solamente
tenemos que multiplicarla por dos y asignar en la misma variable el resultado y luego
nuevamente se tiene que asignar el nuevo valor al puerto B:
Valor = Valor * 2
De esta forma podemos generar los valores necesarios para la secuencia de luces.
El mismo ejercicio lo realizaremos con los tres bucles, FOR NEXT, WHILE WEND y REPEAT
UNTIL, en todos los tres casos, la idea es la misma, siempre multiplicar el primer valor por 2 y
luego almacenarlo en la misma variable, lo nico que cambia es la estructura del bucle,
recuerde, en el FOR, la variable que indica el nmero de iteraciones se incrementa con el
NEXT, ste ltimo sirve solo para el FOR, no se lo puede usar en un WHILE ni en un REPEAT,
para estos otros, se puede usar INC, que sirve para incrementar una variable, o tambin DEC
que sirve para decrementar una variable.
M&M
M&M
La obtencin de los valores para asignar al puerto, sigue siendo igual, pero para que i se
incremente debemos hacerlo manualmente, en el FOR es automtico al final cuando se usa
NEXT, para el caso del WHILE sera algo as:
Inc i 'incrementa el valor de i, i=i+1
M&M