19 de abril de 2011

Bucle "while" con dos condiciones

En ocasiones necesitamos controlar la ejecución de ciertas instrucciones. Se pùede hacer utilizando sentencias tipo "while". Este tipo de sentencias permiten ejecutar las instrucciones del bucle (aquellas que están entre las llaves), mientras la condición sea cierta (flecha verde).

Cuando dicha condición no se cumple (flecha roja), se sale del bucle y se ejecutan las instrucciones que están fuera del mismo.

Si deseamos controlar 15 desbordamientos, nuestro bucle sólo tendrá una condición >> que el número de desbordes sea menor que quince:


El bucle anterior ejecutará las instrucciones mientras la condición sea cierta (desbordes<15). Como se ejecutan las instrucciones del bucle, se comprueba si el temporizador desborda mirando "TF0" e incrementando la variable. Cuando llegue a quince, el bucle termina. En este caso sólo hay una condición.

  Pero ¿cómo haríamos para detener el temporizador si el usuario pulsa "P0_0"?

OPCIÓN I
Si incluimos otra condición que compruebe el puerto, conseguiremos que el temporizador no llegue a la cuenta especificada, ya que saldrá del bucle, pero habrá que detenerlo incluyendo la instrucción "TR0=0":


La explicación es sencilla. El bucle se ejecuta si se cumplan las dos condiciones: que no llegue al máximo de desbordes Y que NO se pulse P0_0.

Cuando se pulse P0_0, al estar negado, su valor en la condición será "0" y la condición será "FALSE" (es una AND) y se terminará el bucle saltando a las instrucciones que haya detrás del mismo, en este caso, la instrucción que desactiva el temporizador (TR0=0).

OPCIÓN 2 (mejor)
También podemos incluir dentro del bucle la comprobación del puerto, de este modo, podemos detener el temporizador, pero nos mantenemos en el bucle, pudiendo reanudar la temporización cuando se deje de pulsar "P0_0". Es una gran diferencia.




No hay comentarios: