Вы находитесь на странице: 1из 13

Jackeline Senz de Viteri

Mecatronica

PROGRAMACION DE LOS MICROCONTROLADORES


FUNCIONES:
Son un grupo de sentencias bajo el mismo nombre que realizan una tarea especfica.
Sirven para facilitar la resolucin de problemas mediante la aplicacin del paradigma
Dividir y Conquistar.
Una funcin es una subrutina que contiene una lista de sentencias a realizar.
El objetivo es dividir un programa en varias partes utilizando estas funciones para
resolver el problema inicial con ms facilidad.
Una funcin se ejecuta cada vez que se llame dentro de otra funcin.
Al utilizar funciones el cdigo se hace ms corto ya que es posible llamar una funcin
tantas veces como se necesite. En C, el cdigo normalmente consiste en muchas
funciones.
FUNCIN PRINCIPAL
La funcin principal main() es una funcin particular puesto que es la que se ejecuta al
iniciar el programa. Adems, el programa termina una vez completada la ejecucin de esta
funcin. El compilador reconoce automticamente esta funcin y no es posible llamarla
por otra funcin. La sintaxis de esta funcin es la siguiente:

void main (void) {


/* el primer 'void' significa que main no devuelve
ningn valor. El segundo
'void' significa que no recibe ningn valor. Note que
el compilador tambin admite la siguiente sintaxis:
'main()' o 'void main()' o 'main(void)' */
..
/* --- Introduzca su programa aqu --- */
.
};

TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

EJEMPLO:

f es una funcin que recibe un nmero real x como parmetro y devuelve 2*x-y.
float f (float x, float y) // variables flotantes x y y
se pueden utilizar en f
{
float r;
// declarar r para almacenar el
resultado
r = 2*x - y; // almacenar el resultado del clculo
en r
return r;
// devolver el valor de r
}
Cada funcin debe ser declarada apropiadamente para poder interpretarla correctamente
durante el proceso de compilacin. La declaracin contiene los siguientes elementos:
Tipo de resultado (valor devuelto): tipo de dato del valor devuelto
Nombre de funcin: es un identificador que hace posible llamar a una funcin.
Declaracin de parmetros se parece a la declaracin de variable regular (por
ejemplo: float x). Se utilizan para pasar la informacin a la funcin al llamarla. Los
parmetros diferentes estn delimitados por comas.
Cuerpo de funcin: bloque de sentencias dentro de llaves.
EJEMPLO:

tipo_de_resultado nombre_de_funcin (tipo argumento1,


tipo argumento2,...)
{
Sentencia;
Sentencia;
...
return ...
}

Una funcin no necesita parmetros (funcin main() por ejemplo), pero debe estar entre
parntesis.

TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

Funcin RETURN
Una funcin puede devolver un valor por medio de la palabra clave return. Al llegar a
return, la funcin evala un valor (puede ser una expresin) y lo devuelve a la lnea de
programa desde la que fue llamada.
La sentencia return tiene dos usos importantes. Primero, fuerza una salida inmediata de la
funcin en que se encuentra. O sea, hace que la ejecucin del programa vuelva al cdigo
que llam a la funcin. En segundo lugar, se puede utilizar para devolver un valor.
EJEMPLO:

#include <stdio.h>
int mul(int, int);
/* prototipo */
void main (void) /* no recibe nada ni devuelve nada la
funcin principal (main()) */
{
int x=10, y=20, z;
z=mul(x,y); /* 1 */
printf("El resultado es: %d",mul(x,y)); /* 2 */
mul(x,y); /* 3 */
}
mul(int a, int b)
{
return(a*b);
}

Una funcin no puede devolver ms de un valor, pero puede devolver un puntero o una
estructura. Tenga cuidado al utilizar matrices y punteros.
El compilador reserva memoria para el almacenamiento de variables de la funcin reverse
slo durante su ejecucin. Una vez completada la ejecucin de reverse, la localidad de
memoria para la variable i o para la matriz r ya no est reservada. Esto significa que la
direccin que contiene los valores de i o r[] est libre para introducir datos nuevos.
Concretamente, la funcin devuelve slo el valor &r[0], as que slo el primer elemento de
la matriz tab ser almacenado en la memoria. Las dems localidades de memoria, tales
como &tab[1], &tab[2], etc. sern consideradas por el compilador como espacios en
blanco, o sea, estarn listas para recibir los nuevos valores.
Para escribir esta funcin es necesario pasar la matriz r [] como parmetro
TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

La funcin puede contener ms de una sentencia return. En este caso, al ejecutar la


primera sentencia return, la funcin devuelve el valor correspondiente y se detiene la
ejecucin de la funcin.

float abs (float x, float y) // Devolver el valor


absoluto de 2*x-y
{
if ((2*x - y) >= 0)
return (2*x - y);
else
return (-2*x + y);
}

Funcin IF
La programacin de Condicin o programacin Condicional consiste en afirmar una
expresin, si sta es verdadera se procede a realizar una instruccin, sino se realiza otra
instruccin, se le conoce tambin como instruccin IF. Por ejemplo:

Estructura de control 'SWITCH'


Switch es otra de las instrucciones que permiten la construccin de estructuras de control.
A diferencia de if, para controlar el flujo por medio de una sentencia switch se debe de
combinar con el uso de las sentencias case y break.

TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

{
case 1://caso y el '1' es el condicional
bloque de instrucciones 1; //set de instrucciones para
el caso 1
break;// esta sentencia se utiliza para parar la
bsqueda y que el ciclo no se repita indefinidamente.
case caso_n://aqu tan bien se utilizan caracteres.
set de instrucciones para case n;
break;
default: bloque de instrucciones por defecto //esto
aplica cuando la opcin ingresada y comparada no se
encuentra entre los casos predeterminados.
}
Sentencia DO/WHILE
Existe una tercera y es la instruccin DO WHILE, consiste en hacer determinadas
instrucciones mientras la condicin que le asignamos sea vlida. Por ejemplo:

Sentencia 'ELSE'
La sentencia 'ELSE' significa de lo contrario o sea que si la condicional del 'IF' no es
correcta el set de instrucciones del 'ELSE' aplican.
if (condicin)

{
TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

Set de instrucciones //PARTE VERDADERA


}
else
{
Set de instrucciones 2 //PARTE FALSA
}

Estructura de repeticion o ciclo 'FOR'


Las Sentencias de Iteracin o Ciclos son estructuras de control que repiten la ejecucin de
un grupo de instrucciones. Bsicamente, una sentencia de iteracin es una estructura de
control condicional, ya que dentro de la misma se repite la ejecucin de una o ms
instrucciones mientras o hasta que una a condicin especfica se cumpla. Muchas veces
tenemos que repetir un nmero definido o indefinido de veces un grupo de instrucciones
por lo que en estos casos utilizamos este tipo de sentencias.

for(contador; final; incremento)


{
Codigo a Repetir;
}
for(int i=0; i>=n de repeticiones; i++)
{
cout<<"Hola Mundo";
}

TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

DECLARAR PROTOTIPOS DE FUNCIONES


Para utilizar una funcin, el compilador debe ser consciente de su presencia en el
programa. En la programacin en C, los programadores normalmente primero escriben la
funcin main() y luego las funciones adicionales. Para avisar al compilador de la presencia
de las funciones adicionales, se requiere declarar los prototipos de funciones en el
principio de programa antes de la funcin main(). Un prototipo de funcin est compuesto
por:
tipo de resultado
nombre de funcin
tipos de parmetros
un punto y coma (;)
El prototipo de la funcin main no necesita ser declarado.

float f (float, float);


/* no es obligatorio escribir los nombres de los
parmetros. Este prototipo informa al compilador: en el
programa se utilizar la funcin f, que utiliza dos
parmetros de tipo float y devuelve el resultado del
tipo
float. */

LLAMAR UNA FUNCIN


Mientras una funcin es definida y su prototipo declarado, se puede utilizar en cualquier
parte de programa. Sin embargo, como la funcin main es 'raiz' del programa, no puede
ser llamada de ninguna parte de programa. Para ejecutar una funcin, es necesario
escribir su nombre y los parmetros asociados.
EJEMPLO:

float resultado,a,b; // resultado,a,b,time deben


coincidir con los tipos
// definidos
int time = 100;
// en la declaracin de las
funciones f y wait_1
a = 10.54;
b = 5.2;
TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

resultado = f(a,b); // Ejecutar la funcin f por medio


de los parmetros a y b
// El valor devuelto se le asigna
a la variable resultado
pausa_1(tiempo);
// Ejecutar la funcin pausa_1 por
medio de la variable tiempo
funcinX();
// Ejecutar la funcin funcinX
(sin parmetros)

PASAR LOS PARMETROS

Al llamar una funcin, se le pasan los parmetros. En C existen dos formas diferentes para
pasar parmetros a una funcin.
El primer mtodo, denominado paso por valor, es el ms fcil. En este caso, los
parmetros se pueden considerar como variables locales de la funcin. Cuando se llama
una funcin, el valor de cada parmetro se copia a un nuevo espacio de memoria
reservado durante la ejecucin de la funcin. Como los parmetros se consideran como
variables locales por el compilador, sus valores pueden ser modificados dentro de la
funcin, pero sus modificaciones no se quedan en la memoria una vez completada la
ejecucin de la funcin.
EJEMPLO:

// Funcin 'sort'ordena los miembros de la matriz por


valor ascendente
// y devuelve el miembro con mximo valor
int sort(int *); // Prototipo de funcin
const SIZE = 5; // Nmero de miembros a ordenar
void main() {
int maximum, input[SIZE] = {5,10,3,12,0}; //
Declaracin de variables en la matriz
maximum = sort(input);
// Llamar
a funcin y asignarle el mximo
// valor a la variable maximum
}
TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

int sort(int *sequence) {


int i, temp, permut;
// Declaracin de variables
permut = 1;
// Bandera de bit indica que
se ha hecho una permutacin
while(permut!=0) {
// Quedarse en el bucle
hasta reinicar la bandera
permut = 0;
// Bandera reiniciada
for(i=0;i<SIZE-1;i++) { // Comparar y oredenar los
miembros de la
// matriz (dos a dos)
if(sequence [i] > sequence[i+1]){
temp = sequence [i];
sequence[i] = sequence[i+1];
sequence[i+1] = temp;
permut = 1; // Se ha hecho una permutacin,
bandera de bit
//se pone a uno
}
}
}
return sequence[SIZE-1]; // Devolver el valor del
ltimo miembro
} // que es al mismo tiempo el miembro con el mximo
valor

TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

CONEXIN BSICA
Para que un micro controlador funcione apropiadamente es necesario proporcionar lo
siguiente:

Alimentacin;
Seal de reinicio; y
Seal de reloj.

ALIMENTACIN
Aunque el PIC16F887 es capaz de funcionar a diferentes voltajes de alimentacin, no es
recomendable probar la ley de Murphy. Lo ms adecuado es proporcionar un voltaje de
alimentacin de 5V DC. Este circuito, mostrado en la pgina anterior, utiliza un regulador
de voltaje positivo de tres terminales LM7805. Es un regulador integrado y barato que
proporciona una estabilidad de voltaje de alta calidad y suficiente corriente para habilitar
el funcionamiento apropiado del controlador y de los perifricos (aqu suficiente significa
una corriente de 1A).
TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

SEAL DE REINICIO
Para que un microcontrolador pueda funcionar apropiadamente, un uno lgico (VCC) se
debe colocar en el pin de reinicio. El botn de presin que conecta el pin MCLR a GND no
es necesario. Sin embargo, este botn casi siempre est proporcionado ya que habilita al
microcontrolador volver al modo normal de funcionamiento en caso de que algo salga
mal. Al pulsar sobre el botn RESET, el pin MCLR se lleva un voltaje de 0V, el
microcontrolador se reinicia y la ejecucin de programa comienza desde el principio. Una
resistencia de 10k se utiliza para impedir un corto circuito a tierra al presionar este botn.
SEAL DE RELOJ
A pesar de tener un oscilador incorporado, el microcontrolador no puede funcionar sin
componentes externos que estabilizan su funcionamiento y determinan su frecuencia
(velocidad de operacin del microcontrolador). Dependiendo de los elementos utilizados
as como de las frecuencias el oscilador puede funcionar en cuatro modos diferentes:

LP - Cristal de bajo consumo;


XT - Cristal / Resonador;
HS - Cristal/Resonador de alta velocidad; y
RC - Resistencia / Condensador.

TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

Cristal de cuarzo
Al utilizar el cristal de cuarzo para estabilizar la frecuencia, un oscilador incorporado
funciona a una frecuencia determinada, y no es afectada por los cambios de temperatura
y de voltaje de alimentacin. Esta frecuencia se etiqueta normalmente en el encapsulado
del cristal. Aparte del cristal, los condensadores C1 y C2 deben estar conectados como se
muestra en el siguiente esquema. Su capacitancia no es de gran importancia. Por eso, los
valores proporcionados en la siguiente tabla se deben tomar como recomendacin y no
como regla estricta.

Resonador cermico
Un resonador cermico es ms barato y muy similar a un cuarzo por la funcin y el modo
de funcionamiento. Por esto, los esquemas que muestran su conexin al microcontrolador
son idnticos. No obstante, los valores de los condensadores difieren un poco debido a las
diferentes caractersticas elctricas. Refirase a la tabla que est a continuacin.

TECNOLOGICO SUDAMERICANO

Jackeline Senz de Viteri

Mecatronica

Oscilador RC
Si la frecuencia de operacin no es de importancia, entonces no es necesario utilizar los
componentes caros y adicionales para la estabilizacin. En vez de eso, basta con utilizar
una simple red RC, mostrada en la siguiente figura. Como aqu es utilizada slo la entrada
del oscilador local, la seal de reloj con la frecuencia Fosc/4 aparecer en el pin OSC2. sta
es la frecuencia de operacin del microcontrolador, o sea la velocidad de ejecucin de
instrucciones.

Oscilador externo
Si se requiere sincronizar el funcionamiento de varios microcontroladores o si por alguna
razn no es posible utilizar ninguno de los esquemas anteriores, una seal de reloj se
puede generar por un oscilador externo. Refirase a la siguiente figura.

TECNOLOGICO SUDAMERICANO

Вам также может понравиться