Sunteți pe pagina 1din 22

Introducción al lenguaje de programación C/C++

(con orientación a la programación en C de microcontroladores)

Concepto de Función

“Una función es una o mas instrucciones que se asocian a un único nombre y que se
ejecutan al invocar dicho nombre”.

Las funciones son útiles cuando se necesita ejecutar cierto grupo de instrucciones varias
veces en un mismo programa, solo hace falta asociar el grupo a un nombre e invocar dicho
nombre todas las veces que necesitemos ejecutar el citado grupo

Ejemplo de función:

Haremos una función que sirva para calcular la corriente de I


colector Ic teniendo como datos a Vcc, Vce y Rc
correspondientes a un circuito transistorizado polarizado en
Vcc
emisor común.

parámetros de la función Vce

Rc
{

funcion calcular(x,y,z)
calcular(Vcc,Vce,Rc)

I
calcular(12,8,1200)

w=( x - y )/z
Vcc=10

W
Rc=2200

F
calcular(Vcc,7,Rc)

F
Llamamos “parámetros de la función“ a las variables
intermedias ubicadas entre entre el programa principal y en interior de la función. En nuestro
caso los parámetros son x, y y z las que corresponde a Vcc, Vce y Rc del programa
principal.

En el programa principal se invoca tres veces a la función, una entrando los datos por
teclado y copiando el contenido de la variables del programa principal a los parámetros, esto
se hace colocando en la función dichas variable en la posición del parámetro
correspondiente, Otra uso de la función se hace pasando directamente constantes a los
parámetros y finalmente en la última se mezclan constantes con variables asignadas y
reemplazadas en la posición del parámetro correspondiente.

Página 1 de 22
El uso de funciones nos ahorra escritura de programa pues en este caso en lugar de repetir
el cálculo de la corriente de colector y su impresión en pantalla tres veces, se asocia las
instrucciones deseadas a la función y se repite tres veces la invocación a la misma
escribiendo menos código en el programa. Tenga en cuenta que podemos crear funciones
no solo con dos instrucciones sino con mucha más dado como consecuencia un ahorro en
la cantidad de instrucciones que tiene nuestro programa.

Este concepto fue introducido porque el lenguaje C se basa en funciones tal que el programa
principal es una función

Estructura de básica de un programa en lenguaje C/C++

Podemos organizar en programa en lenguaje C/C++ entre tres zonas fundamentales:

zona 1
{ zona inclusiones,
definiciones
y declaraciones globales
Función
main( ) { principal
declaraciones locales main
I1
I2 programa
zona 2 principal
i3
...
Ii
}

zona 3
{ zona de funciones definidas
por el usuario

Vemos que un programa en lenguaje C/C++ consta de tres zona

Zona 1:

Contiene código y constantes que se incluyen al programa principal. En lenguaje C/C++ el


código correspondiente a operaciones Standard tal con borrado de pantalla, impresión en
pantalla, ingreso por teclado está creado en archivo separados, por lo tanto hay que incluirlo
al programa principal para pode usarlo,
También en esta zona se define constantes tal como π que se define asociando el número
3.1416 al símbolo PI por ejemplo.
Finalmente se agregan declaraciones globales que se denominan así porque se pueden
utilizar desde cualquier parte del código. Podemos adelantar que
“declarar una variable” significa darle a una zona de memoria un nombre simbólico y un
tamaño tal que en el mismo entre un dato determinado con una conformación de bits según
el tipo de dato para alojar, no es lo mismo almacenar un número entero de 32 bits que un
número en formato “punto flotante” que también se almacena en 32 bits pero que además
una parte representa el exponente del dato por ejemplo.
Página 2 de 22
Zona 2:

Aquí se encuentran las declaraciones locales, es decir variables que se pueden utilizar
solamente dentro de esta zona y las instrucciones que conformar en programa principal.
Vemos que está encabezada por la palabra main( ) en la cual los paréntesis de apertura y
cierre indican que main es una función y siendo que main significa principal en ingles la
misma representa a la “función principal” o “programa principal”. Mas adelante explicaremos
el concepto de función

Zona 3:

En esta zona creamos a las “funciones definidas por el usuario”. Por ejemplo las funciones
Standard tales como borrar la pantalla, entrar datos desde el teclado, imprimir datos hacia la
pantalla, calculo de funciones matemáticas tales como logaritmo, seno, coseno, raíz c.

Concepto de variable:

En una zona de memoria se puede cambiar el contenido para una dirección dada, por lo
tanto se denomina “variable” de dicho contenido e “identificador de variable” a la
dirección de la misma o al nombre simbólico que se la asoció a dicha dirección

variable

21 54
22 54 R
23

identificador de
variables

En este ejemplo la variable es el contenido de la dirección 22 y el identificador de variable es


la dirección 22 o el nombre simbólico R asociado a la misma

Concepto de declaración de variables:

“Declarar una variable significa vincular la dirección de la posición que ocupan en memoria
a un nombre, establecer su tamaño y el tipo de datos que va a contener”.

Antes de explicar como se crean variables en lenguaje C se debe conocer cuales son
los tipos de datos que utiliza el mismo y los nombres que le corresponden

Página 3 de 22
Tipos de datos en lenguaje C

nombre Tamaño en bits rango

enteros int 16 +32767 a -32768


(con signo) long 32 +2147483647 a -2147483648
char 8 +127 a -128
números
numéricos unsigned int 16 65535 a 0
sin coma
Magnitudes unsigned long 32 4294967295 a 0
(sin signo) unsigned char 8 255 a 0

float 32 +/- 3,4x 10 +38 a +/- 3,4x 10 -38


números con coma double 64 +/- 1,7x 10 +308 a +/- 1,4x 10 -308
o reales long double 80 +/- 3,4x 10 +4932 a +/- 3,4x 10 -4932

Caracteres char ejemplos


Simples ‘a’, ’A’, ‘2’, ‘@’, ‘+’
alfanuméricos
Cadenas de char[tamaño +1] ejemplos
caracteres “resistencia”, “Tensión total”, “Valor 1º”

Una de las cualidades que hizo famoso al lenguaje C es que los caracteres simples se pueden tratar como números, es decir
‘a’ +1 da como resultado a ‘b’ porque en lenguaje trabaja en realidad con los códigos ASCII de los mismos y el código ASCII del carácter
‘b’ es el que sigue al del carácter ‘a’. Además vemos que el tipo de dato para caracteres simples tienen en mismo nombre, (char) que el de
los datos numéricos con signo de 8 bits de tamaño

El cuadro anterior es válido para entornos de programación de 16 bits de datos tal como los microcontroladores. En la PC que hoy en día
es 32 bits el tipo de datos int también es de 32 bits de tamaño y es igual que el long. Si queremos utilizar el int tradicional debemos
utilizar el el modificador short aplicado a int creando el tipo de datos short int que es de 16 bits de tamaño

Página 4 de 22
Ejemplos de declaración de variables:

int a; 16 bits declaración


a
a=40; 40 asignación
a
32 bits
declaración
float V;
V
V=1.2; 1.2 asignación
V
32 bits
long saldo; declaración
saldo
saldo=200000; 200000 asignación
saldo

Ejercicio:

Declarar variables con el tamaño y tipo de dato más adecuado para contener los siguientes
datos y efectuar la asignación correspondiente

1. -23
2. 62000
3. -25000
4. ‘1’
5. -37.247

Ejemplos de programas en lenguaje C

//ejemplo 1 Este ejemplo no muestra nada en particular pero


sirve para saber que se puede hacer un programa
main() en lenguaje C con la zona 2 solamente. Estos es
{ por que la falta la orden de salida por pantalla
float r1;
float r2;
float Rt;
r1=7.5;
r2=11.2;
Rt=r1+r2;
Página 5 de 22
}

Orden de salida a la pantalla del lenguaje C++, la orden cout

cout viene de:

c out

c: consola out: output,(salida en ingles)


Antiguamente se llamaba consola al conjunto formado por un teclado y un monitor
integrados en un mismo gabinete
Por lo tanto cout se de debe traducir literalmente como que significa la salida de la consola
que es nada más y nada menos que el monitor.
El comportamiento de cout lo podemos representar gráficamente así

18.7
18.7
Rt

cout << Rt;

Veamos ahora un ejemplo de aplicación


//ejemplo 2

main() Este ejemplo da un error porque no le hemos dicho


{ al C++ que agregue la orden cout al programa, esta
float r1; ordenes se agregan incluyendo en el mismo a los
float r2;
“archivos de cabecera”
float Rt;
r1=7.5;
r2=11.2;
Rt=r1+r2;
cout << Rt;
}

Concepto de archivo de cabecera:

Los archivos de cabecera son archivos de texto que contienen declaraciones y definiciones
de órdenes y constantes utilizadas habitualmente. El nombre del archivo de cabecera se
vería así:
xxxxxxx.h

Página 6 de 22
tiene cualquier nombre y la extensión h que viene de header que significa cabecera en
ingles.
Dichos archivo se incluyen al programa utilizando la macroordén #include de la siguiente
forma:
#include <xxxxxxx.h>

Para utilizar cout debemos incluir la cabecera iostream.h como se muestra en el


ejemplo siguiente

//ejemplo 3 De nuevo no se mostrará nada en la pantalla


#include<iostream.h>
Esto se produce porque una vez terminado el programa
main() El mismo retorna al entorno integrado de desarrollo,
{ (cuya pantalla es de color azul) tapando lo que imprimió
float r1,r2; cout . Sin embargo se puede ver lo que cout imprimió si
float Rt; se invoca la opción de menú
r1=7.5;
r2=11.2; Windows -->User screen
Rt=r1+r2; y ahora veremos la salida que cout manda a la
cout << Rt; pantalla.
}

Forma Moderna de programa en C++

En los compiladores moderno para Windows y especialmente linux la cabecera iostream no


tiene el .h es decir se incluye así
#include<iostream>

Pero hace lo anterior obliga a habilitar un namespace para hacer una programación mas
sencilla
Un namespace es un archivo que contiene nombres y símbolos y este caso el que
utilizaremos es el namespace std. El ejemplo 3 nos quedaría así

#include<iostream>
using namespace std;
int main()
{
float r1,r2;
float Rt;
r1=7.5;
r2=11.2;
Rt=r1+r2;
cout << Rt;
return(0);
}

Vemos que la clausura using habilita al namespace. Ademas algunos entornos de


programación para lenguaje C++ exige que main() retorne un resultado entero (int main())

Página 7 de 22
Esto implica que la función main al terminar debe retornar un valor que en este caso es 0,
(return(0))
Por ejemplo la app que instalar el Ide para C++ para ANDROID cxxdroid exige que el
programa tenga la forma descripta anteriormente.

Si no se utilizara el namespace el programa anterior debería escribirse así

#include<iostream>
int main()
{
float r1,r2;
float Rt;
r1=7.5;
r2=11.2;
Rt=r1+r2;
std::cout << Rt;
return(0);
}

en la cual la escritura de la orden se salida que se escribe std::cout es mas complicada

Función que detiene el programa esperando a que se pulse una tecla,


la función getch(); , (para usarla incluir la cabecera conio.h):

Veamos directamente un ejemplo que utiliza getch()

//ejemplo 4
El ejemplo soluciona en problema anterior pero si el
problema se ejecuta varias veces se la impresión
#include<iostream.h> de la salida en pantalla tantas veces como
#include<conio.h> ejecutamos en programa.
main() Esto se solucionaría con una función para borrado
{ de pantalla
float r1,r2,Rt;
r1=7.5;
r2=11.2;
Rt=r1+r2;
cout << Rt;
getch();
}

Función para borrar la pantalla la función clrscr();


(para usarla incluir la cabecera conio.h):

Modifiquemos el ejemplo anterior para que incluya a clrscr():

Página 8 de 22
//ejemplo 5

#include<iostream.h>
#include<conio.h>
main()
{
float r1,r2,Rt;
clrscr();
r1=7.5;
r2=11.2;
Rt=r1+r2;
cout << Rt;
getch();
}

Orden de entrada por teclado del lenguaje C++, la orden cin:


(para usarla incluir la cabecera iostream.h)
la palabra cin viene de:

c in

c: consola in: input,(entrada en ingles)


El comportamiento de cin lo podemos representar gráficamente así

12.3
r1

cin r1;
<<

presentemos la órden cin en el siguiente ejemplo:

Página 9 de 22
//ejemplo 6
En este ejemplo no se le indica al operador que
está ingresando por teclado y que representa en
#include<iostream.h> número que se muestra en pantalla.
#include<conio.h> Para ello debemos utilizar los mensajes de ayuda al
main() operador
{
float r1,r2,Rt;
clrscr();
cin >> r1;
cin >>r2;
Rt=r1+r2;
cout << Rt;
getch();
}

Uso de mensajes de ayuda al operador:

//ejemplo 7

#include<iostream.h>
#include<conio.h>
main()
{
float r1,r2,Rt;
clrscr();
cout<<"Ingrese R1:";cin >> r1;
cout<<"Ingrese R2:";cin >>r2;
Rt=r1+r2;
cout <<"Rt vale "<< Rt<<" ohms";
getch();
}

Diagramacion logica y su codificacion en lenguaje C/C++

Veamos ahora como podemos utilizar todo lo que aprendimos en diagramacion logica para
resolver nuestros problemas y luego codificar dicho diagrama a lenguaje C/C++.
En el ejemplo que sigue se indica que sentencia de lenguaje C/C++ corresponde a cada
elemento de diagrama visto anteriormente.
En color rojo se ponen las ordenes que no se pueden diagramar pero son necesarias.
En color verde se ponen las ordenes que no se pueden diagramar pero no son necesarias.
Tomaremos como base a anterior ejemplo 7)

Página 10 de 22
Página 11 de 22
Posicionamiento del cursor en pantalla, la función gotoxy
(para usarla incluir la cabecera conio.h):

sintaxis

gotoxy( coorx , coory );


en las cuales coorx es la coordenada x de pantalla y coory es la coordenada y de pantalla

En modo texto Standard la pantalla tiene la coordenada x que va desde 1 a 80, (80
columnas) y la coordenada y que va desde 1 a 20, (25 filas)

x Si se quiere imprimir la leyenda Rt=


1 40 80 en las coordenadas ( x, y )=( 40 , 7 )
y primero debe emitir la sentencia
1
gotoxy(40,7);
7 Rt=
la que posiciona en cursor en las
coordenadas (40,7)
y luego se ejecuta…

cout <<”Rt”;

25

//ejemplo 8

#include<iostream.h>
#include<conio.h>
main()
{
float r1,r2,Rt;
clrscr();
gotoxy(10,7);
cout<<"Ingrese R1:";cin >> r1;

gotoxy(10,9);
cout<<"Ingrese R2:";cin >>r2;

Rt=r1+r2;
gotoxy(12,12);
cout <<"Rt vale "<< Rt<<" ohms";
getch();
}

Página 12 de 22
Elevación a potencias y extracción de raíces en lenguaje C, la función pow
(para usarla incluir math.h)

sintaxis:

res=pow(base,exponente); es decir pow realiza la operación algebraica res=base exponente

valor devuelto por la función

las variables res, base y exponente deben ser del tipo double como máximo aunque
también pueden ser del tipo float

veamos dos ejemplos de uso de pow.

//ejemplo 9

#include<iostream.h>
#include<conio.h>
#include<math.h>
main()
{
double b,e,r;
clrscr();
gotoxy(9,7);
cout<<"Ingrese numero a elevar:";cin >> b;

gotoxy(9,10);
cout<<"Ingrese exponente:";cin >>e;
r=pow(b,e);
gotoxy(12,12);
cout <<"elevaci¢n="<<r;
getch();
}

Página 13 de 22
//ejemplo 10

#include<iostream.h>
#include<conio.h>
#include<math.h>

main()
{
float R,i,P;
clrscr();
gotoxy(9,7);
cout<<"Resistencia=";cin >> R;

gotoxy(9,10);
cout<<"Corriente=";cin >>i;
P=R*pow(i,2);
gotoxy(12,12);
cout <<"Potencia="<<P<<" watts";
getch();
}

Coloreado y cambió del tamaño del texto

Para imprimir texto en color se utilizan las funciones textcolor y textbackground


las que están definidas en la cabecera conio.h

Uso de textcolor:

Cambia el color de letra del texto que se imprime a continuación de


establecerlo

Sintaxis: textcolor(COLOR);

En la cual color es una constante numérica representada simbólicamente por el


nombre del color en ingles. Dichos nombres simbólicos se encuentran
poniendo en el entorno integrado de desarrollo el cursor sobre alguna de las
letras de la palabra textcolor y luego vamos a la opción de menú

HelpTopic Search
Lo que nos hace aparecer la ayuda de textcolor. Luego navegamos en dicha
ayuda hasta encontrar el link “simbolic solor constants” , finalmente entramos
en el mismo y navegando obtenemos la siguiente tabla
Página 14 de 22
COLORS (text mode)
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀│Back-│Fore-
Constant │Value│grnd?│grnd?
══════════════Ï═════Ï═════Ï═════
BLACK │ 0 │ Yes │ Yes
BLUE │ 1 │ Yes │ Yes
GREEN │ 2 │ Yes │ Yes
CYAN │ 3 │ Yes │ Yes
RED │ 4 │ Yes │ Yes
MAGENTA │ 5 │ Yes │ Yes
BROWN │ 6 │ Yes │ Yes
LIGHTGRAY │ 7 │ Yes │ Yes
DARKGRAY │ 8 │ No │ Yes
LIGHTBLUE │ 9 │ No │ Yes
LIGHTGREEN │ 10 │ No │ Yes
LIGHTCYAN │ 11 │ No │ Yes
LIGHTRED │ 12 │ No │ Yes
LIGHTMAGENTA │ 13 │ No │ Yes
YELLOW │ 14 │ No │ Yes
WHITE │ 15 │ No │ Yes
──────────────┼─────┼─────┼──────
BLINK │128 │ No │

Uso de textbackground

Cambia el color de fondo del texto que se imprime a continuación de


establecerlo

Sintaxis: textbackcolor(COLOR);

en la cual COLOR es el mismo que se usa para textcolor. Veamos ahora un


ejemplo completo que use textcolor y textbackground

//ejemplo 11

#include<iostream.h> Hay que observar que para que se


#include<conio.h> establezca el color hay que borrar la
main() pantalla luego de ejecutar textcolor y
{ textbackground, caso contrario el
float r1,r2,Rt; color del texto no cambiará
textcolor(RED);
textbackground(GREEN);
clrscr();
Página 15 de 22
gotoxy(10,3);

cout<<"R1=";cin >>r1;
gotoxy(10,5);

cout<<"R2=";cin >>r2;
Rt=r1+r2;
gotoxy(10,7);
cout<<"R total vale"<< Rt<<” ohms”;
getch();
}

Impresión de texto en varios colores

Si nuestro objetivo es que alguna de las líneas de texto esté en algún color diferente al
principal, no se puede cambiar al mismo como lo vimos anteriormente porque al invocar a
clrscr() para borrar la pantalla se borra también el texto anterior. Para ello borraremos solo la
línea a la cual le queremos cambiar el color utilizando la función clreol(); la que también
está definida en conio.h. Esta función borra toda la línea a partir de la posición del cursor y
hasta el fin de la misma estableciendo para ella el color de letra y fondo que corresponde a
las últimas invocaciones de textcolor y textbackground. El el siguiente ejemplo se muestra
como se hace esto:

//ejemplo 12
Luego de que gotoxy(10,7); coloca las coordenadas
en x=10 e y=7 se cambia el color de fondo a azul,( con
#include<iostream.h> textbackground(BLUE); y luego se borra la línea .
#include<conio.h> A continuación se imprime el texto y para que solo esta
main() última impresión salga con el nuevo color se cambia de
{ nuevo el color de fondo al original y se borra
float r1,r2,Rt; nuevamente la línea para el l resto de la misma se
textcolor(RED); imprima con el color de fondo original
textbackground(GREEN);
clrscr();
gotoxy(10,3);

cout<<"R1=";cin >>r1;
gotoxy(10,5);

cout<<"R2=";cin >>r2;
Rt=r1+r2;
gotoxy(10,7);
textbackground(BLUE);
clreol();
cout<<"R total vale"<< Rt<<” ohms”;
textbackground(GREEN);
clreol();
getch();
}
Página 16 de 22
Para cambiar el tamaño del texto utilizamos la función textmode la que también está
definida en conio.h. El único parámetro que tiene está definido en la ayuda e indica en nuevo
tamaño de la pantalla en columnas y líneas, los valores más destacables para probar son el
que establece la constante C40 que fija la pantalla a 40 columnas y el C4350 que establec
la pantalla a 50 líneas. Textmode siempre se debe ejecutar antes de cambiar el color con
textcolor y textbackground

En el siguiente ejemplo se verá dicho efecto

//ejemplo 13

#include<iostream.h>
#include<conio.h>
main()
{
float r1,r2,Rt;

textmode(C40);

textcolor(RED);
textbackground(GREEN);
clrscr();
gotoxy(10,3);

cout<<"R1=";cin >>r1;
gotoxy(10,5);

cout<<"R2=";cin >>r2;
Rt=r1+r2;
gotoxy(10,7);
textbackground(BLUE);
clreol();
cout<<"R total vale"<< Rt<<” ohms”;
textbackground(GREEN);
clreol();
getch();
}

Ejercicio:

Se propone modificar el ejemplo anterior para cambiar el modo de texto y los colores de
impresión

Página 17 de 22
Codificación en C/C++ de la estructura repetitiva

Para codificar la estructura la estructura repetitiva existen sentencias de control

 while
 for
 do while

Trataremos en primer lugar a la sentencia de control while

Sentencia de control while:

La sentencia de control while (que significa mientras en español), codifica la estructura


ciclica repetitiva básica como de esta forma:

¿ Pregunta ? while( ¿Pregunta ? )


{
No
SI

AccionV1 AccionV1

AccionV2 AccionV2

...
AccionVi AccionVi

Esta funciona así:

“mientras la pregunta sea verdad (Si), repetir las Acciones que están dentro de las llaves.
Cuando la pregunta sea falsa (No), continuar con las sentencias que siguen a la llave de
cierra de el while actual”.

Para formular las preguntas se usa los operadores relacionales y lógicos


Página 18 de 22
Operadores relacionales

Mayor: >
Mayor o igual >=
Menor <
Menor o igual <=
Igual ==
desigual !=

Operadores lógicos

AND: &&
OR: I I
NOT !

Veamos a continuación algunos ejemplos de codificación

1. Se ingresan 5 tensiones. Se desea imprimir cada valor ingresado en la pantalla.

I #include<conio.h>
#include<iostream.h>
c=0 main()
{ float v; int c;
clrscr();
c<5 c=0;
No while( c < 5)
SI {
cin >> v;
V

cout << v;
V

c=c+1;
c=c+1 }
getch();
}

En este ejemplo vemos la utilización de la variable contador en la sentencia c=c+1;


Este tipo de expresión no tiene sentido en matemática pero si en programación y significa:

Página 19 de 22
c = c + 1;
valor nuevo de la variable c valor actual de la variable c + 1

Es decir que cada vez que el programa ejecute dicha sentencia se le sumará 1 a la variable
c y de este modo la pregunta del while, ( while(c<5) ) será verdadera mientras c valga 4 y
sera falsa cuando c valga 5. De este modo se logra procesar 5 tensiones tal como lo pide el
problema, (mientras c valga 0,1,2,3 y 4)

Veamos ahora algunos ejemplos que se pueden orientar a la programación de


microcontroladores

2. hacer un tramo de código que genere retardo basado en la sentencia while

La misma es muy simple


c = 0;
while(c < 100000)
{
c = c +1;

}
...

vemos que el while solo contiene la sentencia que incrementa el contador c = c +1, por lo
tanto lo que hace este tramo de código detener el programa hasta que c valga 100000.
En lenguaje C la expresión c = c +1, puede escribirse también como c++; o ++c;.

c++; se denomina posincremento

++c; se denomina preincremento

utilizadas así no hay diferencia entre ambas, la diferencia se podría apreciar si las utilizamos
de esta forma:

Suponiendo que c contiene el valor 5

b = c++; b termina con el valor 5 y c con el valor 6

Página 20 de 22
b =++c; aquí tanto b como c terminan conteniendo el valor 6
Como se ve no es necesario usar la forma anterior en rutinas de retardo utilizando solo las
expresiones c++ o ++c; . Entonces nuestro tramo de código de retardo nos queda así:


c = 0;
while(c < 100000)
{
c++;

}
...

3. utilizar la senencia while para que espere siempre

Esto solo tiene sentido cuando se trabaja en lenguaje C bajo micontrolador.


Veamos una plantilla que se puede utilizar en el compilador xc8 bajo el entorno integrado de
desarrollo MPLABX de Microchip sobre el microcontrolador PIC18F4550

#include <xc.h>
#include "confbits.h"

main()
{ unsigned char b;
//declaraciones de variables

//configuración de puertos y registros necesarios


b=47;
while(b == 47)
{

//Código de programa que interacciona con los puertos

Se observa que la pregunta del while, b == 47, ( que pregunta si b es igual a 47), será
siempre verdadera por tener b asignado 47 previamente. Lo que no hay que hacer es
modificar a la variable b dentro del while.
De este modo logramos que el while no termine nunca.

Página 21 de 22
Esto se debe hacer porque el microcontrolador no tiene Sistema Operativo y así se controla
dentro dentro del while el estado de los puertos de entrada o de sus bits individuales y
actualizando el estado de los puertos de salida o solamente de bits individuales de los
mismos, o también interaccionar sobre unidades funcionales del microcontrolador. Dicho
control se debe realizar permanentemente por eso corresponde
utilizar un ciclo while que no termine nunca

En lenguaje C todo número distinto de 0 dentro de la pregunta del while significa verdadero
y el 0 significa falso, por lo tanto el programa anterior podría escribirse también así

#include <xc.h>
#include "confbits.h"

main()
{
//declaraciones de variables

//configuración de puertos y registros necesarios

while(47)
{
//Código de programa que interacciona con los puertos

Si vemos ejemplo típicos de lenguaje c bajo microcontrolador es habitual que veamos 1 en


lugar de 47 dentro de la pregunta del while tal como se ve a continuación

#include <xc.h>
#include "confbits.h"

main()
{
//declaraciones de variables

//configuración de puertos y registros necesarios

while(1)
{
//Código de programa que interacciona con los puertos

}
Página 22 de 22

S-ar putea să vă placă și