0% encontró este documento útil (0 votos)
62 vistas6 páginas

Estructuras de Control

Este documento describe las estructuras de control en lenguaje C para la programación de microcontroladores PIC. Explica las sentencias condicionales if-else y switch, así como los bucles while, for y do-while. También cubre las sentencias de salto break y continue, que permiten modificar el flujo normal de un programa.

Cargado por

jorfamei
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
62 vistas6 páginas

Estructuras de Control

Este documento describe las estructuras de control en lenguaje C para la programación de microcontroladores PIC. Explica las sentencias condicionales if-else y switch, así como los bucles while, for y do-while. También cubre las sentencias de salto break y continue, que permiten modificar el flujo normal de un programa.

Cargado por

jorfamei
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 6

PROGRAMACION DE MICROCONTROLADORES PIC EN LENGUAJE C ESTRUCTURAS DE CONTROL

1- ESTRUCTURAS CONDICIONALES
Las condiciones son ingredientes comunes de un programa. Las condiciones permiten ejecutar una o varias sentencias dependiendo de validez de una expresin. En otras palabras, Si se cumple la condicin (...), se debe hacer (...). De lo contrario, si la condicin no se cumple, se debe hacer (...). Los operandos condicionales if-else y switch se utilizan en las operaciones condicionales. Una sentencia condicional puede ser seguida por una sola sentencia o por un bloque de sentencias a ser ejecutadas.

1-1 OPERADOR CONDICIONAL if-else


El operador if se puede utilizar solo o asociado al operador else (if-else). Ejemplo del operador if:

if(expresin) operacin;
Si el resultado de la expresin encerrada entre parntesis es verdadero (distinto de 0) la operacin se realiza y el programa contina con la ejecucin. Si el resultado de la expresin es falso (0), la operacin no se realiza y el programa contina inmediatamente con la ejecucin. Como hemos mencionado, la otra forma combina tanto el operador if como el else:

if(expresin) operacin1 else operacin2;


Si el resultado de la expresin es verdadero (distinto de 0), se realiza operacin1, de lo contrario se realiza la operacin2. Despus de realizar una de las operaciones, el programa contina con la ejecucin. La sentencia if-else se parece a lo siguiente:

if(expresin) operacin1 else operacin2


Si operacin1 u operacin2 est compuesta, escriba una lista de sentencias encerradas entre llaves. Por ejemplo:

if(expresin) { ... // ... // operacin1 ...} // else operacin2


El operador if-else se puede sustituir por el operador condicional '?:':

(expresin1)? expresin2 : expresin3

Si el valor de la expresin1 es distinto de 0 (verdadero), el resultado de la expresin entera ser equivalente al resultado obtenido de laexpresin2. De lo contrario, si la expresin1 es 0 (falso), el resultado de la expresin entera ser equivalente al resultado obtenido de laexpresin3. Por ejemplo:

maximum = (a>b)? a : b // A la variable maximum se le asigna el // valor de la variable mayor(a o b)

1-2 OPERADOR Switch


A diferencia de la sentencia if-else que selecciona entre dos opciones en el programa, el operador switch permite elegir entre varias opciones. La sintaxis de la sentencia switch es:

switch (selector) // Selector es de tipo char o int { case constante1: operacin1 // El grupo de operadores que se ejecutan si ... // el selector y la constante1 son equivalentes break; case constante2: operacin2 // El grupo de operadores se ejecuta si ... // el selector y la constante2 son equivalentes break; ... default: operacin_esperada // El grupo de operadores que se ejecuta si ... // ninguna constante equivale al selector break; }
La operacin switch se ejecuta de la siguiente manera: primero se ejecuta el selector y se compara con la constante1. Si coinciden, las sentencias que pertenecen a ese bloque se ejecutan hasta llegar a la palabra clave break o hasta el final de la operacin switch. Si no coinciden, el selector se compara con la constante2. Si coinciden, las sentencias que pertenecen a ese bloque se ejecutan hasta llegar a la palabra clave break etc. Si el selector no coincide con ninguna constante, se ejecutarn las operaciones que siguen al operador default.

Tambin es posible comparar una expresin con un grupo de constantes. Si coincide con alguna de ellas, se ejecutarn las operaciones apropiadas:

switch (das) // La variable das representa un da de la semana. { // Es necesario determinar si es un da laborable o no lo es case1:case2:case3:case4:case5: LCD_message = 'Da laborable'; break; case6:case7: LCD_message = 'Fin de semana'; break; default:LCD_message_1 = 'Elija un da de la semana'; break; }
La palabra clave de C break se puede utilizar en cualquier tipo de bloques. Al utilizar break, es posible salir de un bloque aunque la condicin para su final no se haya cumplido. Se puede utilizar para terminar un bucle infinito, o para forzar un bucle a terminar antes de lo normal.

2- BUCLES
A menudo es necesario repetir una cierta operacin un par de veces en el programa. Un conjunto de comandos que se repiten es denominado un bucle de programa. Cuntas veces se ejecutar, es decir cunto tiempo el programa se quedar en el bucle, depende de las condiciones de salir del bucle.

2-1 Bucle While


El bucle while se parece a lo siguiente:

while(expresin){ comandos ... }


Los comandos se ejecutan repetidamente (el programa se queda en el bucle) hasta que la expresin llegue a ser falsa. Si la expresin es falsa en la entrada del bucle, entonces el bucle no se ejecutar y el programa continuar desde el fin del bucle while.

Un tipo especial del bucle de programa es un bucle infinito. Se forma si la condicin sigue sin cambios dentro del bucle. La ejecucin es simple en este caso ya que el resultado entre llaves es siempre verdadero (1=verdadero), lo que significa que el programa se queda en el mismo bucle:

while(1){ // En vez de "while(1)", se puede escribir "while(true)" ... // Expresiones encerradas entre llaves se ejecutarn ... // repetidamente (bucle infinito) }

2-2 Bucle For


El bucle for se parece a lo siguiente:

for(expresin_inicial; expresin_de_condicin; cambiar_expresin) { operaciones ... }


La ejecucin de esta secuencia de programa es similar al bucle while, salvo que en este caso el proceso de especificar el valor inicial (inicializacin) se realice en la declaracin. La expresin_ inicial especifica la variable inicial del bucle, que ms tarde se compara con la expresin_ de_condicin antes de entrar al bucle. Las operaciones dentro del bucle se ejecutan repetidamente y despus de cada iteracin el valor de la expresin_inicial se incrementa de acuerdo con la regla cambiar_expresin. La iteracin contina hasta que la expresin_de_condicin llegue a ser falsa.

for(k=0; k<5; k++) // La variable k se incrementa 5 veces (de 1 a 4) y operacin // cada vez se repite la expresin operacin ...
La operacin se ejecutar cinco veces. Luego, al comprobar se valida que la expresin k<5 sea falsa (despus de 5 iteraciones k=5) y el programa saldr del bucle for.

2-3 Bucle Do-while


El bucle do-while se parece a lo siguiente:

do operacin while (cambiar_condicin);


La expresin cambiar_condicin se ejecuta al final del bucle, que significa que operacin se ejecuta como mnimo una vez sin reparar en que si la condicin es verdadera o falsa. Si el resultado es distinto de 0 (verdadero), el procedimiento se repite.

Todos los siguientes ejemplos son equivalentes. Esta parte del cdigo visualiza "hello" en un LCD 10 veces con un retardo de un segundo. Note que en este ejemplo se utilizan funciones predefinidas, que se encuentran en las libreras del compilador mikroC PRO for PIC. No obstante le aconsejamos que no trate de entenderlas en detalle. Su comportamiento general dentro del bucle se explica por medio de los comentarios.

i = 0; // Inicializacin del contador while (i<10) { Lcd_Out(1,3,"hello"); Delay_ms(1000); Lcd_Cmd(_LCD_CLEAR); Delay_ms(500); i++; // // // // // // Condicin Visualizar hello en el LCD Retardo de 1000 ms Borrar el LCD Retardo de 500ms Contador se incrementa

} for(i=0; i<10; i++) { // incremento Lcd_Out(1,3,"hello"); // Delay_ms(1000); // Lcd_Cmd(_LCD_CLEAR); // Delay_ms(500); // } i = 0; // do { Lcd_Out(1,3,"hello"); Delay_ms(1000); Lcd_Cmd(_LCD_CLEAR); Delay_ms(500); i++; } while (i<10); //

Inicializacin, condicin, Visualizar hello en el LCD Retardo de 1000 ms Borrar el LCD Retardo de 500ms Inicializacin del contador // // // // // Visualizar hello en el LCD Retardo de 1000 ms Borrar LCD Retardo de 500ms Contador se incrementa

Condicin

3- SENTENCIAS DE SALTO

3-1 SENTENCIA BREAK


A veces es necesario detener y salir de un bucle dentro de su cuerpo. La sentencia break se puede utilizar dentro de cualquier bucle (while, for, do while) y en las sentencias switch tambin. En stas la sentencia break se utiliza para salir de las sentencias switch si la condicin case es verdadera. En este ejemplo, Esperar est parpadeando en la pantalla LCD hasta que el programa detecte un uno lgico en el pin 0 del puerto PORTA.

while(1){ // Bucle infinito if(PORTA.F0 == 1) // del puerto break; // bucle Lcd_Out(1,3,"Esperar"); // Delay_ms(1000); // Lcd_Cmd(_LCD_CLEAR); // Delay_ms(500); // }

Probar si el estado lgico del pin 0 PORTA es 1; si equivale, salir del Visualizar Esperar en el LCD Retardo de 1000 ms Borrar LCD Retardo de 500ms

3-2 SENTENCIA CONTINUE


La sentencia continue colocada dentro de un bucle se utiliza para saltar una iteracin. A diferencia de la sentencia break, el programa se queda dentro del bucle y las iteraciones continan.

// Si x=7, puede ocurrir una divisin por 0. // continue se utiliza aqu para evitar esta situacin. x=1; while (x<=10) { if (x == 7) { // saltar x=7 para evitar divisin por 0 Lcd_Cmd(_LCD_CLEAR); Lcd_Out(1,3,"Division by 0"); Delay_ms(1000); x++; continue; // Despus de esta lnea, saltar a la sentencia while con x=8 } a = 1/(x-7); // Esta divisin generar un error si x=7 /* Muchas operaciones pueden ocurrir aqu */ Lcd_Out(1,3,"Division is OK"); // Poner este mensaje en el LCD Delay_ms(1000); x++; }

También podría gustarte