Condicional WHILE
El condicional WHILE viene a ser una especie de supervisor de campo, si todo fluye bien entonces sigue dirigiendo las ordenes, si algo esta fuera de lo común entonces las interrumpe. Si lo llevamos a la lógica de programación, el WHILE lo que hace es realizar las ordenes asociadas a el mientras la condición o condiciones se cumplan, en el momento en que esas condiciones dejen de ser ciertas entonces interrumpe la ejecución de estas ordenes sin importar en que segmento se encuentren.
La principal diferencia con el IF es que al contrario de este, el WHILE chequea en tiempo real que las condiciones sean ciertas, solo sigue ejecutando mientras sean ciertas, el IF solo realiza esta comprobación cuando se llega al segmento de código que lo solicita y ejecuta todos los comandos asociados a este sin importar si la o las condiciones siguen siendo ciertas. Muy útil si queremos supervisar múltiples controladores (switches) y realizar acciones en base a su estado actual por ejemplo.
Sintaxis en PIC BASIC
While condiciones
ordenes
Wend
Sintaxis en C
Do{
ordenes
}
while(condiciones);
La lógica para las condiciones es la misma que para el IF, puede ser una o mas condiciones (mediante el uso de los OR y AND).
Ejemplos
Supongamos que queremos controlar un set de switches y mostrar en ellos un conteo de acuerdo a lo que se encuentre en ellos.
Si los switches marcan 00 en binario parpadear el último numero contado, si marcan 01 realizar un conteo ascendente del 1 al 15 y si marcan 11 realizar un conteo descendente del 1 al 15. Se debe interrumpir el conteo y realizar la acción requerida si cambia el estado de los switches, es decir que si se encontraba en 01 y se colocan los switches en 00 deberá parpadear el ultimo conteo que se realizo, si estaba en 00 y luego se pone en 11 deberá empezar a realizar un conteo descendente.
Esta tabla define que debería de suceder:
Switches | Acción |
00 | Parpadear ultimo digito contado |
01 | Conteo ascendente 1 - 15 |
11 | Conteo descendente 15 - 1 |
Código
Device 16F877A
Xtal 20
All_Digital true
Output PORTC
Input PORTB
Dim x As Byte
x = 0
Dim y As Byte
y = 15
Dim last As Byte
last = 0
inicio:
If x > 15 Then
x = 0
End If
If y < 0 Then
y = 15
End If
While PORTB = 000011 'chequea el estado del puerto
PORTC = y
DelayMS 1000
last = y
y = y - 1
Wend
While PORTB = 000001 'chequea el estado del puerto
PORTC = x
DelayMS 1000
last = x
Inc x 'incrementa en 1 la variable x
Wend
While PORTB = 000000 'chequea el estado del puerto
PORTC = last
DelayMS 250
Low PORTC
DelayMS 250
PORTC = last
Wend
GoTo inicio
End
En C basta con seguir la sintaxis que les escribí previamente y colocar las ordenes dentro de las llaves.
como por ejemplo:
Do{
x = x+1;
y = y +1;
}
While(y<100);
En el caso anterior va a seguir incrementando "x" una y otra vez mientras "y" sea menor que 1, en el preciso momento en que y deje de ser menor que uno interrumpe la ejecución.
Condicional FOR
Este condicional es muy útil para realizar contadores, el condicional FOR lo que hace es realizar un numero X de veces la sucesión de ordenes que se tienen. Ese numero de veces dependerá de una variable de control que realiza el conteo y que puede ser modificada incluso dentro de las ordenes (esta variable debe existir para poder utilizar el FOR y debe ser de tipo entero). Utilizado para leer arreglos en sucesión en C, o sencillamente para realizar un conteo o un chequeo de algo un numero de veces dado.
Sintaxis en PIC BASIC
For variable = inicio To variable = final Step numero_de pasos
Ordenes
Next
Recuerden que deben inicializar una variable para el conteo, inicio representa desde donde, final hasta donde y pasos representa de cuanto en cuanto se debe contar.
Programa simple para realizar un conteo con LEDs del 1 al 15.
Device = 16F877A
Xtal 20
All_Digital true
Output PORTC
Dim x As Byte 'variable que utilizare para el conteo
inicio:
For x = 0 To x = 15 Step 1 'x desde 0 hasta el 15 de uno en uno, 0, 1, 2, 3... etc
PORTC = x 'le digo que tome el valor de x
DelayMS 500
Next
GoTo inicio
End
Noten que no le digo que incremente de 1 en 1 la variable x, esto es porque el For lo realiza de forma automática, si quisiera por ejemplo que el conteo fuera de 3 en 3 bastaría con colocar un 3 en lugar de 1 al lado del Step. Si se quisiera un conteo descentende entonces bastaria con colocarle un menos (-) al lado del numero del Step y logicamente iniciarlizar la variable en la parte mas alta y finalizarla en la parte mas baja.
For x = 15 To x = 0 Step -1 <- Realiza un conteo descendente de 1 en 1 desde el 15 hasta el 0.
La primera vez x vale 0 y se muestra un 0 en binario en el puerto C, se le suma 1 y entonces se muestra un uno binario en el puerto C, asi seguira hasta el 15 donde terminara el conteo y terminara el ciclo.
Sintaxis en C
For(var=inicio;var=final;var++){
Ordenes
}
Mismas consideraciones, se debe inicializar la variable primero y si se desea un conteo descendente basta con colocar dos signos menos al lado de la variable (--), suponiendo que la variable fuera Z por ejemplo, un conteo ascendente hasta el 100 desde el 20 seria:
For(Z=20;Z=100;Z++){
Ordenes
}
Un conteo descendente seria:
For(Z=100;Z=20;Z--){
Ordenes
}
Espero que esto les sirva para aclarar dudas.
No hay comentarios:
Publicar un comentario