Vous êtes sur la page 1sur 43

COMPILADOR DE C PARA MICROCONTROLADORES

24/04/2012

P.G.F.

Ing. Paul Glvez 1 2010

FUNDAMENTOS DE C

C es un lenguaje bastante conciso y en ocasiones desconcertante. Considerado ampliamente como un lenguaje de alto nivel, posee muchas caractersticas importantes, tales como: programacin estructurada, un mtodo definido para llamada a funciones y para paso de parmetros, potentes estructuras de control, etc.

Sin embargo gran parte de la potencia de C reside en su habilidad para combinar comandos simples de bajo nivel, en complicadas funciones de alto nivel, y en permitir el acceso a los bytes y words del procesador. En cierto modo, C puede considerarse como una clase de lenguaje ensamblador universal. La mayor parte de los programadores familiarizados con C, lo han utilizado para programar grandes mquinas que corren Unix, MS-DOS, e incluso Windows (programacin de drivers).

En estas mquinas el tamao del programa no es importante, y la interfase con el mundo real se realiza a travs de llamadas a funciones o mediante interrupciones DOS. As el programador en C slo debe preocuparse en la manipulacin de variables, cadenas, matrices, etc.

24/04/2012

P.G.F.

ESTRUCTURA EN C

Por ser un lenguaje estructurado, se debe tener especial cuidado en seguir ordenadamente la distribucin de los distintos componentes que componen un cdigo en C.

declaraciones globales prototipos de funciones

De forma generalizada, la estructura de un programa en C tiene el siguiente aspecto:

main() { variables locales; bloque de sentencias; llamadas a las funciones; } funcion_1() { variables locales a funcion_1; bloque de sentencias; llamada a otra/s funciones; } funcion_n() { }

24/04/2012

P.G.F.

COMPILADOR PARA C
Uno de los compiladores de C ms conocidos es CCS, que es el acrnimo de la empresa Custom Computer Services, Inc. CCS, Inc. es un empresa especializada en herramientas de desarrollo para los microcontroladores de la marca Microchip Tecnology Inc.; Microchip PIC MCU. Su herramienta ms conocida, es la serie de compiladores para las distintas familias de microcontroladores Microchip PIC MCU. Ofrecen la posibilidad de que el usuario pueda elegir el compilador concreto para la familia que va a utilizar, y compilar en modo lnea de comandos, tanto para Microsoft Windows, como para Linux. Para los usuarios de Microsoft Windows, tambin existe la posibilidad de utilizar su potente entorno de desarrollo PCWH IDE, que incluye adems de los compiladores para todas las familias de PICs, entre otras cosas, un editor de cdigo con reconocimiento de comandos, un depurador ICD, y un Wizard que en base a lo que el usuario le indique, generar la mayor parte del cdigo para inicializar el microcontrolador. Este compilador incluye una gran cantidad de libreras que permiten al desarrollador comunicar un PIC con los dispositivos externos ms utilizados, tanto directamente, como por los protocolos ms conocidos: RS232, I2C, etc., .... En su sitio WEB hay una versin DEMO disponible, con bastantes restricciones, pero con la que se puede probar el producto durante 30 das.

24/04/2012

P.G.F.

Estructura en compilador CCS Comentarios Operadores Precedencia de los operadores

Variables

Directivas para el compilador

Funciones

24/04/2012

P.G.F.

Comentarios:

Los comentarios son tiles para informar al que lee nuestro cdigo (o a nosotros mismos) el significado o funcionamiento de cada parte del programa.

Todos los comentarios son ignorados por el compilador, por lo que no debes preocuparte por llenar la memoria del PIC.

Un comentario puede ser colocado en cualquier parte del programa, excepto en medio de una palabra reservada, del nombre de una funcin o del nombre de una variable.

Los comentarios pueden ocupar ms de una lnea de largo. Pueden utilizarse para deshabilitar momentneamente un trozo de cdigo.

24/04/2012

P.G.F.

Comentarios: continuacin

Hay dos formas de introducir un comentario. La primera es la misma que en cualquier otro compilador de C: /* Esto es un comentario */

Es decir, todo lo que haya escrito entre /* y */ ser tomado por el compilador como un comentario.

La segunda manera es la siguiente: // Esto es un comentario En este caso, el comentario comienza en // y se extiende hasta el final de la lnea.

24/04/2012

P.G.F.

Operadores:

En CCS los operadores cumplen un rol importante.

Quizs C sea uno de los lenguajes que ms operadores tiene.

Una expresin es una combinacin de operadores y operandos.

En la mayora de los casos, los operadores de CCS siguen las mismas reglas que en lgebra, y se llaman de la misma manera.

24/04/2012

P.G.F.

Operadores: continuacin
Operadores aritmticos: CCS posee cinco operadores aritmticos:

+ (suma) - (substraccin) * (multiplicacin) / (divisin) % (mdulo)

Los primeros cuatro operadores mencionados se pueden utilizar con cualquier tipo de dato. Estos son algunos ejemplos de como usarlos:

El operador % (mdulo) slo puede emplearse con enteros. Devuelve el resto de una divisin de enteros. Veamos un par de ejemplos:

a = b + c; a = b - c; a = b * c; a = b / c; a = -a; //Cambia el signo de "a". a = a + 1; //suma 1 al valor de "a".

int a = 10, b = 5, c; c = a % b; //"c" valdr cero. int a = 20, b = 3, c; c = a % b; //"c" valdr 2.

Atajos: CCS tambin provee atajos para utilizar los operadores aritmticos. Hay algunas operaciones que se repiten a menudo cuando creamos nuestros programas, y estos atajos ayudan a que podamos escribir nuestro cdigo ms rpidamente. Los atajos provistos son los siguientes.

a *= b es lo mismo que a = a * b a /= b es lo mismo que a = a / b a += b es lo mismo que a = a + b a -= b es lo mismo que a = a - b a %= b es lo mismo que a = a * b

24/04/2012

P.G.F.

Operadores: continuacin
Operadores Relacionales

Los operadores relacionales comparan dos valores, y devuelven un valor lgico basado en el resultado de la comparacin. Los operadores relacionales disponibles son los siguientes:

> mayor que >= mayor que o igual a < menor que <= menor que o igual a == igual a != distinto de el resultado de la comparacin, ser siempre 0 o 1. 0 significa que el resultado de la comparacin ha sido falso, y 1 que ha sido verdadero.

24/04/2012

P.G.F.

10

Operadores: continuacin
Operadores Lgicos Los operadores lgicos disponibles permiten realizar las operaciones AND, OR y NOT:

p && q significa p AND q p || q significa P OR q !p significa NOT Por supuesto, puede emplearse ms de un operador lgico en la misma expresin: a = b && ( q || n )

Y se pueden combinar con los dems operadores vistos:

a = !(maximo <= 100) //a ser 1 si mximo es mayor que 100.

24/04/2012

P.G.F.

11

Operadores: continuacin
Operadores de bits Existen seis operadores pensados para trabajar directamente sobre los bits. Solamente pueden usarse con variables tipo int y char. Son los siguientes:

& (AND) | (OR) ^ (XOR) ~ (complemento) << (desplazamiento a la izquierda) >> (desplazamiento a la derecha)

24/04/2012

P.G.F.

12

Operadores: continuacin
Operadores de bits continuacin Estas operaciones se llevan a cabo bit por bit. Veamos un ejemplo: Supongamos que a = 120 y b = 13. a&b=8 a | b = 125 a ^ b = 117 ~ a = 135

El porqu de estos resultados puede comprenderse mejor si se pasan los valores de a y b a binario: a = 11111000 b = 00001101 Luego 01111000 AND 00001101 = 00001000 01111000 OR 00001101 = 01111101 01111000 XOR 00001101 = 01110101 NOT 01111000 = 10000111

24/04/2012

P.G.F.

13

Operadores: continuacin
Operadores de bits continuacin

Los operadores de desplazamiento "corren" el contenido de la variable a la derecha o a la izquierda, rellenando con ceros. Veamos algunos ejemplos:

Si a era igual a 120 ( 01111000 en binario) pasar a valer 30 (00011110 en binario).

a = a >> 2 //"corre" el contenido de a dos lugares a la derecha

Si a era igual a 120 ( 01111000 en binario) pasar a valer 192 (11000000 en binario).

a = a << 3 //"corre" el contenido de a cinco lugares a la izquierda

24/04/2012

P.G.F.

14

Operadores: continuacin
Operadores de bits continuacin Atajos CCS tambin provee atajos para utilizar los operadores de bits. Hay algunas operaciones que se repiten a menudo cuando creamos nuestros programas, y estos atajos ayudan a que podamos escribir nuestro cdigo ms rpidamente. Los atajos provistos son los siguientes.

a <<= b es lo mismo que a = a << b a >>= b es lo mismo que a = a >> b a &= b es lo mismo que a = a & b a |= b es lo mismo que a = a | b a ^= b es lo mismo que a = a ^ b

24/04/2012

P.G.F.

15

Operadores: continuacin
Otros operadores

Quedan por ver aun dos operadores ms:

++ Operador incremento -- Operador decremento

Estos operadores permiten sumar (o restar) uno al valor de una variable. Lo que generalmente haramos as:

a=a+1 o as: a=a1 lo podemos hacer as: a++ o as: a- el resultado ser el mismo, pero es mas corto de escribir, y mas fcil de utilizar en expresiones complejas.

24/04/2012

P.G.F.

16

Precedencia de los operadores

Al igual que ocurre en lgebra, en CCS los operadores se evalan en un orden determinado. La siguiente lista muestra este orden, ordenado de mayor a menor

() signo +, signo -, ++, --, !, (<tipo>) *, /, % +, <, <=, >, >= ==, != &&, || =, +=, -=, *=, /=, %=

24/04/2012

P.G.F.

17

Variables

La programacin seria prcticamente imposible sin el uso de variables. Podemos hacernos una imagen mental de las variables consistente en una caja en la que podemos guardar algo. Esa caja es una de las muchas que disponemos, y tiene en su frente pegada una etiqueta con su nombre. Estas cajas tienen ciertas particularidades, que hace que solo se puedan guardar en ellas determinados tipos de objetos.

En esta analoga, cada caja es una variable, su contenido es el valor que adopta, y la etiqueta es el nombre de la variable. Como su nombre lo indica el contenido de una variable puede ser modificado a lo largo del programa.

24/04/2012

P.G.F.

18

Tipo

Ancho (Bits) 1 1 8 8 8 8 8 8 16 16 16 32 0o1 0o1

Rango

Variables continuacin
Tipos El lenguaje C proporciona cinco tipos bsico de datos, con cuatro modificadores posibles. Podemos utilizar variables de cualquiera de esos tipos. La tabla siguiente muestra los tipos disponibles:

Short short int int char unsigned unsigned int signed

0 a 255 0 a 255 0 a 255 0 a 255 -128 a 127 -128 a 127 0 a 65536 0 a 65536 -32768 a 32767 3.4E-38 a 3.4E+38

Si se mira con atencin la tabla, puede verse que hay tipos que parecen estar repetidos. En realidad, ocurre que CCS permite una "forma corta" para escribir algunos de los tipos. Concretamente, podemos utilizar unsigned, short, o long en lugar de unsigned int, short int, o long int.

signed int long long int signed long float

24/04/2012

P.G.F.

19

Variables continuacin
Declaracin Las variables deben ser declaradas antes de ser utilizadas en el programa. El proceso de declaracin de variables le dice a CCS de que tipo son y como se llaman. Al igual las dems instrucciones CCS que veremos deben terminar con ;.

La forma en que se declara una variable es la siguiente:

tipo nombre_de_la_variable;

donde tipo es alguno de los enumerados en la tabla anterior. Veamos un ejemplo: int temperatura;

Esa lnea permite a nuestro programa emplear la variable temperatura, que ser capaz de albergar cualquier valor comprendido entre 0 y 255.

24/04/2012

P.G.F.

20

Variables continuacin
Asignacin de valores

Asignar un valor a una variable es una tarea bien simple. Basta con hacer lo siguiente: nombre_de_variable = valor;

donde nombre_de_variable es el nombre de la variable que contendr el valor. Al igual que todas las instrucciones de CCS, debe terminar con un ; (punto y coma). Por ejemplo, supongamos que queremos asignar el valor "100" a la variable "count". Lo hacemos de la siguiente manera:

count = 100;

donde 100 es una constante.

24/04/2012

P.G.F.

21

Variables continuacin
Asignacin de valores Podemos asignar un valor a una variable en el momento en que la declaramos. Por ejemplo:

Hace que la variable sea del tipo entero, y le asigna el valor 0.

int a = 0;

signed long a = 125, b, c = -10; a,b y c son declaradas como long. a toma el valor de "125" y c "-10". Si la variable es de tipo char, la constante que se le asigna debe estar entre tildes, como en el siguiente ejemplo: char nombre = 'juanito boole';

Por ltimo, tambin podemos asignar a una variable el contenido de otra. En el siguiente ejemplo, el valor de i ser igual a 10. int i = 10; int j; j = 1;

24/04/2012

P.G.F.

22

Variables continuacin
Variables Locales y Globales Si una variable se declara dentro de una funcin, ser "visible" solo dentro de sta:

funcion1 () { char letra; . . . .}

En el ejemplo, la variable tipo char llamada letra solo podr utilizarse dentro de la funcin funcion1(). Si intentamos utilizarla fuera de ella, el compilador nos dar un error.

Si declaramos una variable fuera de cualquier funcin, el alcance de esta ser global, lo que quiere decir que estar disponible en cualquier parte de nuestro programa. Vemos un ejemplo de este ltimo caso. char letra; main() { . . . .} funcion1() { . . .}

La variable tipo char llamada letra podr utilizarse dentro de main() o de funcion1().

24/04/2012

P.G.F.

23

Variables continuacin
Conversiones entre tipos CCS nos permite mezclar diferentes tipos de variables dentro de una misma expresin. Y existen un conjunto de reglas que nos permiten saber de qu tipo ser el resultado de la misma. Por ejemplo, el compilador convertir automticamente a int cualquier expresin que contenga variables char, short o int. Esta conversin solo tiene efecto mientras se realizan los clculos. Las variables en s mismas no cambian su tipo. Las reglas de conversin de tipos hacen que el resultado de una operacin sea siempre el mismo que el de la variable ms larga que intervenga en ella. Sin embargo, podemos forzar a que el resultado sea de un tipo en particular, de la siguiente forma: (tipo) valor donde tipo, es el tipo al que queremos que pertenezca valor. Por ejemplo:

int a = 250, b = 10; long c; c = a * b;

24/04/2012

P.G.F.

24

Variables continuacin
Conversiones entre tipos Tal como explicamos, c no contendr el valor 2500 como podra parecer a simple vista, por que el tipo de c no se modifica. CCS calcula a * b' y obtiene efectivamente el resultado 2500, pero c slo contendr los 8 bits menos significativos de ese resultado, es decir, el decimal 196 (Se sugiere trabajar en binario para comprender el tema).

Si hubisemos hecho: int a = 250, b = 10; long c; c = (long) (a * b);

el valor almacenado en c hubiese sido efectivamente 2500.

24/04/2012

P.G.F.

25

Directivas para el compilador

Son comandos que interpreta el primer paso de la compilacin que lleva a cabo el PIC C de CCS, para microcontroladores PIC16.

Las directivas ms comunes son #define e #include, pero daremos un vistazo a todas, para que el lector obtenga una visin general de stas:

24/04/2012

P.G.F.

26

Directivas para el compilador continuacin


1.#ASM/#ENDASM: Este par de instrucciones permite que utilicemos un bloque de instrucciones en assembler dentro de nuestro cdigo CCS. El siguiente es un ejemplo de uso tomado de la ayuda del CCS: int find_parity (int data) int count; #ASM movlw 0x8 movwf count movlw 0 loop: xorwf data,w rrf data,f decfsz count,f goto loop movlw 1 awdwf count,f movwf _return_ #ENDASM } { La variable predefinida _RETURN_ puede utilizarse para transferir un valor desde el cdigo ASM a CCS. Si en lugar de #ASM utilizamos #ASM ASIS, CCS no intentar efectuar cambios de bancos de memoria automticos para las variables que no pueden ser accedidas desde el banco actual. El cdigo assembler es utilizado "as-is" ("como es").

24/04/2012

P.G.F.

27

Directivas para el compilador continuacin


2. #BIT: Permite crear una nueva variable de un bit de tamao, que es colocada en la memoria del PIC en la posicin del byte x y el bit y. Esto es muy til para acceder de una manera sencilla a los registros. Por supuesto, estas variables pueden ser empleadas de la misma manera que cualquier otra variable tipo short. El formato de #BIT es el siguiente: #BIT nombre = x.y

donde nombre es un nombre de variable CCS vlido, x es una constante o una variable CCS vlida e y es una constante de 0 a 7. Estos son alguno ejemplos de uso:

#BIT T0IF = 0xb.2 . . . T0IF = 0; // Limpia el flag de interrupcin del Timer 0 int resultado; #BIT resultado_primer_bit = resultado.0 . . . if (resultado_primer_bit

24/04/2012

P.G.F.

28

Directivas para el compilador continuacin


3.#BYTE: Permite crear una nueva variable de un Byte de tamao, que es colocada en la memoria del PIC en la posicin del byte x. Esta es una herramienta muy til para acceder de una manera sencilla a los registros. Por supuesto, estas variables pueden ser empleadas de la misma manera que cualquier otra variable tipo int. El formato de #BYTE es el siguiente:
#BYTE nombre = x

donde nombre es un nombre de variable CCS vlido, y x es una constante o una variable CCS vlida.

Estos son algunos ejemplos de uso:

#BYTE STATUS = 3 #BYTE PORTB = 6 [editar] #DEFINE

24/04/2012

P.G.F.

29

Directivas para el compilador continuacin


4.#DEFINE <label> value : <label> es la etiqueta que usaremos en nuestro programa. Y value es el valor que estamos asignando a esta etiqueta. Las instrucciones #DEFINE no generan cdigo ASM, si no que el preprocesador realiza los reemplazos que ellas indican en el momento de la compilacin. El uso de #DEFINE permite construir programas ms ordenados y fciles de mantener. Veamos algunos ejemplos de #DEFINE:

#DEFINE TRUE 1

Cada vez que en nuestro programa aparezca la etiqueta TRUE, el precompilador la reemplazar por 1

#DEFINE pi 3.14159265359

Cada vez que en nuestro programa aparezca la etiqueta pi, el precompilador la reemplazar por 3.14159265359

#DEFINE MENOR_DE_EDAD (EDAD < 18) . . . . . if MENOR_DE_EDAD printf(JOVEN);

24/04/2012

P.G.F.

30

Directivas para el compilador continuacin


El ejemplo anterior permite una mayor claridad en el programa. Por supuesto, no hay que abusar de #DEFINE, por que podemos obtener el efecto contrario, haciendo nuestros programas bastante difciles de comprender. #DEFINE es una potente herramienta para la creacin de macroinstrucciones, ya que soporta el uso de variables. Veamos algunos ejemplos de esto: Cuando el preprocesador se encuentra con el cdigo anterior, hace lo mismo que si hubisemos escrito lo siguiente: unsigned int a=1; unsigned int b=2; unsigned int c=3; #DEFINE var(x,v) unsigned int x=v; var(a,1) var(b,2) var(c,3)

24/04/2012

P.G.F.

31

Directivas para el compilador continuacin


5. #DEVICE: Esta directiva informa al compilador que arquitectura de hardware utilizaremos, para que pueda generar cdigo apropiado para la cantidad de RAM, ROM y juego de instrucciones disponibles. Para los chips con ms de 256 bytes de RAM se puede seleccionar entre emplear punteros de 8 o 16 bits. Si deseamos emplear punteros de 16 bits basta con aadir *=16 a continuacin del nombre microcontrolador seleccionado. Veamos algunos ejemplos:

#DEVICE PIC16C74 //PIC 16C74, punteros de 8 bits. #DEVICE PIC16C67 *=16 //PIC 16C67, punteros de 16 bits. Hay ms opciones que podemos agregar en las lneas #DEVICE: ADC=x : Determina el nmero de [bit]]s que devuelve la funcin read_adc(). #DEVICE PIC16F877 *=16 ADC=10 //PIC 1616F877, punteros de 16 bits y 10 bits en el ADC. ICD=TRUE : Genera cdigo compatible con el ICD de [www.microchip.com Microchips]]. #DEVICE PIC16F877 ICD=TRUE//PIC 1616F877, punteros de 8 bits y cdigo para ICD. WRITE_EEPROM=ASYNC : HIGH_INTS=TRUE : Define la prioridad de las interrupciones en los PIC18.

24/04/2012

P.G.F.

32

Directivas para el compilador continuacin


6. #FUSE: Permite modificar el valor de la palabra de configuracin que estamos empleando. Los valores posibles dependen de cada microcontrolador en particular, y los valores posibles se cargan al utilizar #ICNLUDE seguido del archivo correspondiente. La forma de #FUSE es la siguiente: #FUSE opciones donde opciones es una lista de las opciones posibles separadas mediante comas. Antes de seguir, debemos recordar que se puede ver dentro del archivo con extensin .h, al igual que en C convencional, para verificar cuales son los valores posibles para ese microcontrolador. Estn al comienzo del archivo, en forma de comentarios.

Algunos valores comunes son: Tipo de oscilador: LP, XT, HS, RC Wach Dog Timer: WDT, NOWDT Proteccin de cdigo: PROTECT, NOPROTECT Power Up Timer: PUT, NOPUT Brown Out Reset: BROWNOUT, NOBROWNOUT

24/04/2012

P.G.F.

33

Directivas para el compilador continuacin


7. #INCLUDE: Permite incluir en nuestro programa uno o mas archivos (conocidos como header file) que posean extensin .h. Estos archivos contienen informacin sobre funciones, sus argumentos, el nombre de los pines de un modelo determinado de PIC o cualquier otra cosa que usemos habitualmente en nuestros programas. Esto permite no tener que escribir un montn de cosas cada vez que comenzamos un programa nuevo: basta con incluir el .h correspondiente, tambin se les conoce con el nombre de libreras, aunque funcional y estructuralmente una librera es distinta. La forma de utilizar esta instruccin es la siguiente: #INCLUDE <archivo> Esto har que el contenido de <archivo> se compile junto con nuestro programa. Por ejemplo: #INCLUDE <PIC16F877A.H>

hace que todas las especificaciones de nombres y registros del PIC16F877A se incluyan en nuestro programa. Esto permitir referirnos al pin 0 del PORTB del PIC mediante PIN_B0.

24/04/2012

P.G.F.

34

Directivas para el compilador continuacin

Existe la posibilidad de utilizar #INCLUDE "archivo" en lugar de #INCLUDE <archivo>. La diferencia es que si usamos "", el archivo se buscar primero en el directorio actual. Si empleamos <>, el archivo ser buscado primero en la ruta por defecto para los archivos .h. Por lo tanto si utilizamos "", podremos incluir ficheros de cdigos fuentes .C incluidos en nuestro directorio de trabajo. Esta herramienta es bastante atractiva debido a que en la web hay varios programadores que realizan cdigos, de uso pblico, para el manejo de ciertos perifricos, dnde definen funciones que podremos utilizar slo con el hecho de incluir el fichero correspondiente.

24/04/2012

P.G.F.

35

Directivas para el compilador continuacin


INT_AD Conversin A/D finalizada. I NT_ADOF Conversin A/D timeout. INT_BUSCOL Colisin en bus. INT_BUTTON Pushbutton. INT_CCP1 Unidad CCP1. INT_CCP2 Unidad CCP2. INT_COMP Comparador. INT_EEPROM Escritura finalizada. INT_EXT Interrupcin externa. INT_EXT1 Interrupcin externa #1. INT_EXT2 Interrupcin externa #2. INT_I2C Interrupcin por I2C. INT_LCD Actividad en el LCD. INT_LOWVOLT Bajo voltaje detectado. INT_PSP Ingreso de datos en el Parallel Slave Port. INT_RB Cambios en el port B (B4-B7). INT_RC Cambios en el port C (C4-C7). INT_RDA Datos disponibles en RS-232. INT_RTCC Desbordamiento del Timer 0 (RTCC). INT_SSP Actividad en SPI o I2C. INT_TBE Buffer de transmisin RS-232 vaco. INT_TIMER0 Desbordamiento del Timer 0 (RTCC). INT_TIMER1 Desbordamiento del Timer 1. INT_TIMER2 Desbordamiento del Timer 2. INT_TIMER3 Desbordamiento del Timer 3.

#INT_xxx: Indica que la funcin que le sigue (en el cdigo fuente CCS) es una funcin de interrupcin. Estas funciones no deben tener parmetros. Por supuesto, no todos los PICs soportan todas las directivas disponibles:

Ejemplo: #int_ad adc_handler() { adc_active=FALSE; } #int_rtcc noclear //"noclear" evita que se borre el flag correspondiente. isr() { ... }

24/04/2012

P.G.F.

36

Funciones
Las funciones son los bloques bsicos con los que construimos un programa en CCS. Adems de la funcin main() que veremos enseguida, un programa CCS tendr seguramente varias funciones ms, conteniendo cada una, un bloque de instrucciones que realizan una tarea determinada. Las funciones tienen la siguiente forma: nombre_de_la_funcion() { instruccion; instruccion; . . instruccion; }

Para evitar que surjan errores o avisos (warnings) al compilar nuestros programas, debemos declarar las funciones antes de utilizarlas. Prototipos: Existen dos formas de decirle al compilador CCS que tipo de valor devolver nuestra funcin. La forma general es la siguiente:

tipo nombre_de_funcion();

donde tipo es cualquiera de los tipos de variables soportados por CCS. Al igual que cualquier instruccin de CCS, la lnea debe termina con ; (punto y coma).

24/04/2012

P.G.F.

37

Funciones continuacin
El siguiente ejemplo declara la funcin ejemplo() que devuelve como resultado un valor del tipo long:
long ejemplo(); Parmetros: Adems de determinar el tipo de resultado que devolver la funcin, en el prototipo podemos especificar que parmetros recibir, y de que tipo sern. La forma de hacerlo es la siguiente:

tipo nombre_de_funcion(tipo var1, tipo var2, ..., tipo varN);

La diferencia con el caso anterior es que se han incluido dentro de los () una serie de nombres de variables (var1, var2, ..., varN), cada una asociado a un tipo en particular.

24/04/2012

P.G.F.

38

Funciones continuacin
Supongamos que queremos crear una funcin que lleve a cabo la suma de dos de tipo int, que le son pasados como argumentos, y nos devuelva el resultado en formato double. Deberamos escribir as su prototipo:

double suma(int a, int b);

donde a y b son los valores a sumar. El llamado a la funcin se puede hacer de la siguiente manera:

int a, b; double resultado; a = 10; b = 250; resultado = suma (a, b);

24/04/2012

P.G.F.

39

Funciones continuacin

Return: La forma en que se asigna en la funcin el valor que esta debe devolver es mediante la instruccin return. Vemoslo con el ejemplo anterior, la funcin podra ser como sigue:

Otra forma, ms corta, de escribir la misma funcin es la siguiente:

double suma(int a, int b){ double auxiliar; auxiliar = (double) (a * b ); return auxiliar; }

double suma(int a, int b){ return (double) a * b; }

24/04/2012

P.G.F.

40

Funciones continuacin
Void: Significa que la funcin no devolver ningn parmetro. Supongamos que la funcin ejemplo() no debe regresar ningn valor luego de ser llamada. Su prototipo debera ser como sigue:

void ejemplo() Adems, podemos usar void para indicar que la funcin no recibe parmetros:

void ejemplo2(void);

en el ejemplo, la funcin ejemplo2() no recibe parmetros, ni devuelve ningn valor.

24/04/2012

P.G.F.

41

Funciones continuacin
La funcin main(): Como hemos visto, el lenguaje C permite la utilizacin de funciones. Pero hay una funcin especial, llamada main() que obligatoriamente debe estar presente, y es el punto de entrada a todo programa en C que escribamos. La funcin main() tiene la siguiente forma: main() { instruccion; instruccion; . . instruccion; }

donde instruccin; puede ser cualquier instruccin vlida del CCS o una llamada a otra funcin.

24/04/2012

P.G.F.

42

ESTIMADOS ESTO ES LA BASE , QUE DEBEN DOMINAR DEL LENGUAJE C, (LENGUAJE DE ALTO NIVEL).
LA PROXIMA INFORMACIN QUE ENVIARE SERA PROGRAMACION BASICA DE PIC EN C Y EL USO DEL COMPILADOR.

OJO.

EL TEMA PRINCIPAL DEL EXAMEN ES LENGUAJE C,


Y ESTO NO QUIERE DECIR, QUE NO ENTRA ASEMBLER

ATTE. P.G.F.

24/04/2012

P.G.F.

43