Escolar Documentos
Profissional Documentos
Cultura Documentos
24/04/2012
P.G.F.
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.
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.
Variables
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 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:
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:
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 )
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 192 (11000000 en binario).
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
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
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
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:
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.
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 ;.
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;
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:
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:
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:
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).
24/04/2012
P.G.F.
25
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
24/04/2012
P.G.F.
27
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
donde nombre es un nombre de variable CCS vlido, y x es una constante o una variable CCS vlida.
24/04/2012
P.G.F.
29
#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
24/04/2012
P.G.F.
30
24/04/2012
P.G.F.
31
#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
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
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
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
#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:
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:
donde a y b son los valores a sumar. El llamado a la funcin se puede hacer de la siguiente manera:
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:
double suma(int a, int b){ double auxiliar; auxiliar = (double) (a * b ); return auxiliar; }
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);
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.
ATTE. P.G.F.
24/04/2012
P.G.F.
43