Curso de programación PIC en C con CCS. Sentencias goto, break, continue.

 

Hoy continuamos con el curso hablando de las sentencias de control break, continue y goto.

 

La sentencia break: Esta sentencia tiene dos funciones, la primera es la que ya se ha mencionado en este curso que nos permite salir de un case en un bloque switch; la segunda, de la cual hablaremos hoy, es la de provocar la salida inmediata de cualquier ciclo que se esté ejecutando sin importar la condición de permanencia en el mismo.

Si tenemos dos o más ciclos iterativos anidados la sentencia break sólo provocará la salida del ciclo en el que se encuentre. Para ilustrar el uso de esta sentencia veamos el siguiente ejemplo:

 

 

Ejemplo Sentencia Break

 

Comentario: Este programa hace que el PIC espere hasta que se pulse un botón conectado en la patilla RB0, cuando esto ocurre se enciende un led conectado a la patilla RB1 durante un segundo para luego apargarse y volver a esperar el botón sea pulsado nuevamente.

 

Nótese que, cuando ocurre el break se salta a la siguiente instrucción fuera del while más anidado o más "pequeño", es decir, salta a la instrucción: output_high(PIN_B1) . El break nos permite interrumpir un ciclo a la vez.

Aquí tienen una captura de la simulación en Proteus:

 

Ejemplo Proteus

 

La sentencia continue: Esta otra sentencia provoca de forma forzada una nueva iteración del ciclo en ejecución saltando aquellas instrucciones que faltaban para el término normal de la iteración en curso. En el caso de un ciclo while o do-while se salta directamente a la verificación de la condición del ciclo mientras que en un ciclo for se salta a la parte de incremento del ciclo y luego a la verificación de la condición de ciclo.

 

 

Ejemplo Sentencia Continue

 

Comentario: Este programa se basa en un ciclo for de 5 iteraciones en la cuales se espera a que se presione una tecla numérica y la muestra en pantalla, si se presiona otra tecla que no sea numérica se muestra en el terminal el mensaje "No presionaste un numero" y se salta a la siguiente iteración. Luego de las cinco iteraciones, se termina el programa mostrando el mensaje "Fin de programa".

Lo ilustrativo de este ejemplo es que, aunque se presione otra tecla que no sea numérica (lo que provocará un salto a la siguiente iteración con la sentencia continue), la variable i se sigue incrementando.

Aquí tienen una captura de una corrida del programa:

 

Simulación del ejemplo con Proteus

 

Sentencia goto: Esta última sentencia de la que hablaremos hoy permite, en conjunto con una etiqueta, realizar un salto incondicional a cualquier parte del programa. La forma de hacerlo sería la siguiente:

..........
int i=5;
 ciclo:
 i--;
 if(i>0) goto ciclo;
 ............

Como verán, es muy parecido a cómo se hacen las cosas en assembler. En el ejemplo anterior simplemente se decrementa la variable i desde 5 hasta 0. Esto sería equivalente al siguiente ciclo for:

........
for(i=5;i>0;i--)
{
}
........

La sentencia goto es, generalmente, la opción menos recomendada a utilizar, esto se debe a que el lenguaje C es un lenguaje estructurado y el uso de esta sentencia puede, en algunas ocasiones, hacer que la estructura del programa sea "inentendible" pareciéndose así a un programa hecho en assembler. Además, muchos autores aseguran que con el uso de las sentencias break y continue se puede estruccturar cualquier programa para sin necesitar el uso de la función goto. No obstante, esta sentencia podría también hacernos la "vida" mucho más fácil a la hora de programar, un caso típico sería cuando queremos salir de varíos ciclos anidados de una vez cosa que, con la sentencia break, no sería tan sencillo. Para terminar de entender esto veamos el siguiente y último ejemplo del día de hoy:

 

Ejemplo sentencia goto

 

Comentario: En este programa el PIC se encuentra "atrapado" en un cuarto while infinito anidado. Cuando la condición del if es cierta entonces se salta a la etiqueta "salida:" entrando así en un while que pondrá a parpadear a el led.

La simulación en Proteus de este ejemplo utiliza el mismo esquema que la simulación del ejemplo de la sentencia break. Los códigos fuentes y los esquemáticos de Proteus los puedes obtener aquí.

© 2007-2017 AquiHayapuntes.com