Está en la página 1de 11

MICROCONTROLADORES Y LENGUAJE C

Fundamentos de Lenguaje C para PICs


Introduccin
En un programa en C se pueden diferenciar varios elementos. * Directivas de preprocesado
- Indican al compilador cmo debe generar el cdigo mquina. - Bloques funcionales del programa. - Siempre debe incluirse una funcin llamada main(). - Instrucciones que definen lo que hace el programa y la secuencia de ejecucin del mismo. - Imprescindibles como documentacin del cdigo fuente.
/* FORMATO TIPO DE FICHERO C*/ #include <stdio.h> //Directiva

* Funciones

* Sentencias

/* Suma dos enteros */ int suma (int a,b) { return (a+b); //Devuelve suma }

* Comentarios

/* Funcin principal */ main () { int dato1,dato2; //Declaracin int res; //Declaracin dato1=5; //Asignacin dato2=3; //Asignacin res=suma(dato1,dato2); }

Fundamentos de Lenguaje C para PICs


Variables
Una variable es un nombre asignado a una o varias posiciones de memoria RAM. En C es necesario declarar todas las variables antes de poder utilizarlas, indicando el nombre asignado y el tipo de datos que en ella se van a almacenar (opcionalmente tambin el valor inicial asignado). tipo nombre_variable [=valor]; p.e.: int i;

Los tipos de datos aceptados en C estndar son cinco: char (carcter) int (entero) float (coma flotante en 32 bits) double (coma flotante en 64 bits) void (sin valor)

Las variables pueden ser locales o globales. Las variables locales slo pueden ser usadas en la funcin en que se declaran, mientras que las variables globales son compartidas por todas las funciones del programa (deben declararse fuera de cualquier funcin y antes de ser utilizadas).

Fundamentos de Lenguaje C para PICs


El compilador de CCS acepta los siguiente tipos de variable.
Especificacin char int float double void int1 int8 int16 int32 short long Significado carcter entero coma flotante
float doble precisin

Tamao 8 bits 8 bits 32 bits no soportado nulo 1 bit 8 bits 16 bits 32 bits 1 bit 16 bits

Rango 0 a 255 (sin signo) 0 a 255 (sin signo) 6 bits de precisin No para PCM ninguno 0a 1 0 a 255 (sin signo) 0 a 65535
(sin signo)

sin valor entero de 1 bit entero de 8 bits entero de 16 bits entero de 32 bits entero de 1 bit entero de 16 bits

0 a (2 32-1) 0a 1 0 a 65535
(sin signo)

Los tipos de variable short y long pueden tener detrs la palabra int sin efecto alguno.

Fundamentos de Lenguaje C para PICs


Todos los tipos de datos son por defecto sin signo (unsigned) salvo los de tipo float. Para almacenar datos con signo, hay que introducir el modificador signed delante del tipo. El efecto que se consigue es el recogido en la siguiente tabla.
Especificacin signed char signed int signed long Significado
carcter con signo

Tamao 8 bits 8 bits 16 bits

Rango -128 a 127 -128 a 127 -32768 a 32767

entero con signo coma flotante

Los nmeros negativos se codifican en complemento a 2. Cuando se opera con distintos grupos de datos en una misma expresin, se aplican una serie de reglas para resolver las diferencias. En general se produce una promocin hacia los tipos de datos de mayor longitud presentes en la expresin.

Fundamentos de Lenguaje C para PICs


Funciones
Las funciones son los bloques constructivos fundamentales en C. Todas las sentencias deben encontrarse dentro de funciones. Las funciones deben ser definidas antes de ser utilizadas. Formato general de definicin de una funcin tipo_dato nombre_func (tipo param1 , tipo param2 , ) { cuerpo de la funcin (sentencias); } Las funciones pueden devolver un valor a la sentencia que las llama. El tipo de dato devuelto se indica mediante tipo_dato. Si no se indica nada, se entiende que devuelve un entero. Si no devuelve nada, debe incluirse una especificacin tipo void.

Fundamentos de Lenguaje C para PICs


La manera que tiene una funcin para devolver un valor es mediante la sentencia return.
return (expresin); return expresin;

La expresin debe proporcionar el mismo tipo de dato que el especificado en la funcin. Si no debe devolver nada, se finaliza con
return;

Cuando una funcin se encuentra con una sentencia return se vuelve a la rutina de llamada inmediatamente y las sentencias posteriores a return no se ejecutan. Adems de con las sentencia return, las funciones terminan su ejecucin y vuelven al lugar desde donde se les llam cuando alcanzan la llave de cierre de funcin } tras ejecutar la ltima sentencia de la misma.

Fundamentos de Lenguaje C para PICs


Adems de devolver valores, una funcin tambin puede recibir parmetros (denominados argumentos) segn se indic en su definicin.
Por ejemplo: int suma (int a , int b) { return (a+b); } main() { int c; } c = suma (10 , 23);

Los argumentos se pueden pasar a las funciones por valor o por referencia. La llamada por valor copia el argumento de llamada en el parmetro formal de la funcin. La llamada por referencia usa la direccin de la variable que se pasa a la funcin.

Fundamentos de Lenguaje C para PICs


Operadores
El lenguaje C define numerosos operadores mediante los cuales se construyen las expresiones (combinacin de operadores y operandos). Operadores aritmticos
+ * / % (resto de divisin de enteros) x- --x !=

Operadores incremento y decremento


x++ > ++x

Operadores relacionales
>= <

<=

==

Operadores lgicos
&& & ||

! ^ ~ ~a >> a >> n << a << n

Operadores a nivel de bits


| a&b a|b a^b

En lenguaje C profesional es muy frecuentes usar abreviaturas. As, por ejemplo, es ms habitual ver a += b; que a = a + b;

Fundamentos de Lenguaje C para PICs


Sentencias de control de programa
Sentencia if. Se ejecuta una sentencia o bloque de cdigo si la expresin que acompaa al if tiene un valor distinto a cero (verdadero). Si es cero (falso) contina sin ejecutar la sentencia o bloque de sentencias.
if (expresin) sentencia; if (expresin) { sentencia 1; sentencia 2; ... }

Sentencia if-else. Se evala una expresin y, si es cierta, se ejecuta el primer bloque de cdigo (o sentencia 1). Si es falsa, se ejecuta el segundo.
if (expresin) sentencia 1; else sentencia 2; (expresin) ? (sentencia 1) : (sentencia 2);

Fundamentos de Lenguaje C para PICs


Sentencia switch. Substituye a if-else cuando se realiza una seleccin mltiple que compara una expresin con una lista de constantes enteras o caracteres. Cuando se da una coincidencia, el cuerpo de sentencias asociadas a esa constante se ejecuta hasta que aparezca break.
switch (expresin) { case constante 1: grupo 1 de sentencias; break; case constante 2: grupo 2 de sentencias; break; break es opcional. Si no aparece se sigue con el case siguiente.

... default: } grupo n de sentencias;

default es opcional y el bloque asociado se ejecuta slo si no hay ninguna coincidencia con las constantes especificadas.

Fundamentos de Lenguaje C para PICs


Sentencia de bucle for. Se emplea para repetir una sentencia o bloque de sentencias.
for (inicializacin ; condicin ; incremento) { sentencia(s); }

En la inicializacin se le asigna un valor inicial a una variable que se emplea para el control de la repeticin del bucle. La condicin se evala antes de ejecutar la sentencia. Si es cierta, se ejecuta el bucle. Si no, se sale del mismo. El incremento establece cmo cambia la variable de control cada vez que se repite el bucle.

Es posible anidar bucles for para modificar dos o ms variables de control.

Fundamentos de Lenguaje C para PICs


Sentencia de bucle while. La repeticin se lleva a cabo mientras sea cierta una expresin.
while (expresin) { sentencia(s); }

La expresin se evala antes de cualquier iteracin. Si es falsa, ya no se ejecuta la sentencia o bloque de sentencias.

Sentencia de bucle do-while.


do {

sentencia(s); } while (expresin)

Las sentencias se ejecutan antes de que se evale la expresin, por lo que el bucle se ejecuta siempre al menos una vez.

Fundamentos de Lenguaje C para PICs


Comentarios
Los comentarios se incluyen en el cdigo fuente para explicar el sentido y la intencin del cdigo al que acompaan. Son ignorados por el compilador y no afectan a la longitud ni rapidez de ejecucin del cdigo final. Un comentario se puede colocan en cualquier lugar del programa y pueden tener la longitud y el nmero de lneas que se quiera. Hay dos formatos posibles para los comentarios. Formato 1. Empiezan por // y finalizan con el final de la lnea. // Esto es un comentario. Formato 2. Empiezan por /* y finalizan por */. No es posible anidar comentarios con este formato. /* Esto tambin es un comentario */ /* Pero esto que /* parece un comentario vlido*/ no lo es */

Fundamentos de Lenguaje C para PICs


C especfico para los PIC
Las principales diferencias entre compiladores residen en las directivas (pre-processor commands) y en las funciones integradas (built-in functions). Al final de esta seccin se incluyen sendas listas con las di rectivas y las funciones integradas correspondientes al compilador de CCS.

Directivas de preprocesado ms habituales


#ASM #ENDASM #BIT id=x.y #BYTE id=x Las lneas entre estas dos directivas deben ser instrucciones ensamblador que se insertan tal y como aparecen. Se crea una variable tipo bit correspondiente al bit y del byte x en memoria. Se crea una variable y se sita en el byte x en memoria. Si ya exista esa variable, se coloca fsicamente en la posicin especificada.

Fundamentos de Lenguaje C para PICs


#DEFINE id texto #DEVICE chip #FUSES options El identificador se sustituye por el texto adjunto. Define el micro para el que se escribe el cdigo. Define la palabra de configuracin para la grabacin del microcontrolador.

#INCLUDE <fichero> Se incluye el texto del fichero especificado en el #INCLUDE fichero directorio o fuera de l. #INLINE La funcin que sigue a esta directiva se copia en memoria de programa cada vez que se le llame. Puede servir para mejorar la velocidad. La funcin que sigue a esta directiva se implementa de manera separada (no INLINE). De esta manera se ahorra ROM Sita el cdigo a partir de una determinada posicin de la memoria de programa

#SEPARATE

#ORG start

Fundamentos de Lenguaje C para PICs


#INT_ xxxx #INT_GLOBAL Indica que la funcin que sigue es un programa de tratamiento de la interrupcin xxxx. Indica que la funcin que sigue es un programa genrico de tratamiento de interrupcin. No se incluye cdigo de salvaguarda de registros ni de recuperacin como cuando se usa #INT_ xxxx. Establece un orden de prioridad en las interrupciones.

#PRIORITY ints

#USE DELAY (clock = frecuencia en Hz) Define la frecuencia del oscilador que se va a utilizar, que se emplea para realizar los clculos para funciones integradas de retardo. #USE FAST_IO (puerto) #USE FIXED_IO (puerto) #USE STANDARD_IO (puerto) Indican al compilador cmo debe generar cdigo para las instrucciones de E/S.

Fundamentos de Lenguaje C para PICs

Fundamentos de Lenguaje C para PICs

Fundamentos de Lenguaje C para PICs

10

También podría gustarte