You are on page 1of 11

MICROCONTROLADORES

Y LENGUAJE C
Fundamentos de Lenguaje C para PICs

Introducción
En un programa en C se pueden diferenciar varios elementos.
* Directivas de preprocesado /* FORMATO TIPO DE FICHERO C*/
- Indican al compilador cómo
debe generar el código #include <stdio.h> //Directiva
máquina.
* Funciones
- Bloques funcionales del /* Suma dos enteros */
programa. int suma (int a,b)
{
- Siempre debe incluirse una return (a+b); //Devuelve suma
función llamada main(). }
* Sentencias
- Instrucciones que definen lo
que hace el programa y la /* Función principal */
secuencia de ejecución del
main ()
{
mismo. int dato1,dato2; //Declaración
* Comentarios int res; //Declaración
- Imprescindibles como
documentación del código dato1=5; //Asignación
fuente. dato2=3; //Asignación
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 también el valor inicial asignado).

tipo nombre_variable [=valor]; p.e.: int i;

Los tipos de datos aceptados en C estándar son cinco:


char (carácter) 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 sólo pueden ser usadas en la función en que se
declaran, mientras que las variables globales son compartidas por
todas las funciones del programa (deben declararse fuera de
cualquier función y antes de ser utilizadas).

1
Fundamentos de Lenguaje C para PICs

El compilador de CCS acepta los siguiente tipos de variable.


Especificación Significado Tamaño Rango
char carácter 8 bits 0 a 255 (sin signo)
int entero 8 bits 0 a 255 (sin signo)
float coma flotante 32 bits 6 bits de precisión
double float doble precisión no soportado No para PCM
void sin valor nulo ninguno
int1 entero de 1 bit 1 bit 0a 1
int8 entero de 8 bits 8 bits 0 a 255 (sin signo)
int16 entero de 16 bits 16 bits 0 a 65535 (sin signo)

int32 entero de 32 bits 32 bits 0 a (2 32-1)


short entero de 1 bit 1 bit 0a 1
long entero de 16 bits 16 bits 0 a 65535 (sin signo)

Los tipos de variable short y long pueden tener detrás 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.
Especificación Significado Tamaño Rango
signed char carácter con signo 8 bits -128 a 127
signed int entero con signo 8 bits -128 a 127
signed long coma flotante 16 bits -32768 a 32767

Los números negativos se codifican en complemento a 2.

Cuando se opera con distintos grupos de datos en una misma


expresión, se aplican una serie de reglas para resolver las
diferencias.
En general se produce una “promoción” hacia los tipos de datos de
mayor longitud presentes en la expresión.

2
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 definición de una función

tipo_dato nombre_func (tipo param1 , tipo param2 , … )


{
cuerpo de la función (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 especificación tipo void.

Fundamentos de Lenguaje C para PICs

La manera que tiene una función para devolver un valor es mediante


la sentencia return.
return (expresión); return expresión;

La expresión debe proporcionar el mismo tipo de dato que el


especificado en la función. Si no debe devolver nada, se finaliza con
return;

Cuando una función se encuentra con una sentencia return se vuelve


a la rutina de llamada inmediatamente y las sentencias posteriores a
return no se ejecutan.

Además de con las sentencia return, las funciones terminan su


ejecución y vuelven al lugar desde donde se les llamó cuando alcanzan
la llave de cierre de función } tras ejecutar la última sentencia de la
misma.

3
Fundamentos de Lenguaje C para PICs

Además de devolver valores, una función también puede recibir


parámetros (denominados argumentos) según se indicó en su definición.
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 parámetro
formal de la función.
La llamada por referencia usa la dirección de la variable que se pasa
a la función.

Fundamentos de Lenguaje C para PICs

Operadores
El lenguaje C define numerosos operadores mediante los cuales se
construyen las expresiones (combinación de operadores y operandos).
Operadores aritméticos
+ - * / % (resto de división de enteros)
Operadores incremento y decremento
x++ ó ++x x-- ó --x
Operadores relacionales
> >= < <= == !=
Operadores lógicos
&& || !
Operadores a nivel de bits
& | ^ ~ >> <<

a&b a|b a^b ~a a >> n a << n

En lenguaje C “profesional” es muy frecuentes usar abreviaturas.


Así, por ejemplo, es más habitual ver a += b; que a = a + b;

4
Fundamentos de Lenguaje C para PICs

Sentencias de control de programa


Sentencia if.
Se ejecuta una sentencia o bloque de código si la expresión que
acompaña al if tiene un valor distinto a cero (verdadero). Si es cero
(falso) continúa sin ejecutar la sentencia o bloque de sentencias.
if (expresión) if (expresión)
sentencia; {
sentencia 1;
sentencia 2;
...
}

Sentencia if-else.
Se evalúa una expresión y, si es cierta, se ejecuta el primer bloque
de código (o sentencia 1). Si es falsa, se ejecuta el segundo.
if (expresión)
sentencia 1;
else
sentencia 2;
(expresión) ? (sentencia 1) : (sentencia 2);

Fundamentos de Lenguaje C para PICs

Sentencia switch.
Substituye a if-else cuando se realiza una selección múltiple que
compara una expresión 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 (expresión)
{
break es opcional. Si
case constante 1:
no aparece se sigue
grupo 1 de sentencias;
break; con el case siguiente.

case constante 2:
grupo 2 de sentencias; default es opcional y
break; el bloque asociado se
ejecuta sólo si no hay
... ninguna coincidencia
con las constantes
default: especificadas.
grupo n de sentencias;
}

5
Fundamentos de Lenguaje C para PICs

Sentencia de bucle for.


Se emplea para repetir una sentencia o bloque de sentencias.
for (inicialización ; condición ; incremento)
{
sentencia(s);
}

En la inicialización se le asigna un valor inicial a una variable que se


emplea para el control de la repetición del bucle.

La condición se evalúa antes de ejecutar la sentencia. Si es cierta,


se ejecuta el bucle. Si no, se sale del mismo.

El incremento establece cómo cambia la variable de control cada


vez que se repite el bucle.

Es posible anidar bucles for para modificar dos o más variables de


control.

Fundamentos de Lenguaje C para PICs

Sentencia de bucle while.


La repetición se lleva a cabo mientras sea cierta una expresión.
while (expresión)
{
sentencia(s);
}

La expresión se evalúa antes de cualquier iteración. Si es falsa, ya


no se ejecuta la sentencia o bloque de sentencias.

Sentencia de bucle do-while.


do
{
sentencia(s);
}
while (expresión)

Las sentencias se ejecutan antes de que se evalúe la expresión, por


lo que el bucle se ejecuta siempre al menos una vez.

6
Fundamentos de Lenguaje C para PICs

Comentarios
Los comentarios se incluyen en el código fuente para explicar el
sentido y la intención del código al que acompañan. Son ignorados por
el compilador y no afectan a la longitud ni rapidez de ejecución del
código final.

Un comentario se puede colocan en cualquier lugar del programa y


pueden tener la longitud y el número de líneas que se quiera.

Hay dos formatos posibles para los comentarios.


Formato 1. Empiezan por // y finalizan con el final de la línea.
// Esto es un comentario.
Formato 2. Empiezan por /* y finalizan por */. No es posible anidar
comentarios con este formato.
/* Esto también es
un comentario */
/* Pero esto que /* parece un comentario válido*/ no lo es */

Fundamentos de Lenguaje C para PICs

C específico 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 sección se incluyen sendas listas con las di rectivas y
las funciones integradas correspondientes al compilador de CCS.

Directivas de preprocesado más habituales


#ASM Las líneas entre estas dos directivas deben ser
#ENDASM instrucciones ensamblador que se insertan tal y
como aparecen.

#BIT id=x.y Se crea una variable tipo bit correspondiente al


bit y del byte x en memoria.

#BYTE id=x Se crea una variable y se sitúa en el byte x en


memoria. Si ya existía esa variable, se coloca
físicamente en la posición especificada.

7
Fundamentos de Lenguaje C para PICs

#DEFINE id texto El identificador se sustituye por el texto adjunto.

#DEVICE chip Define el micro para el que se escribe el código.

#FUSES options Define la palabra de configuración para la


grabación del microcontrolador.

#INCLUDE <fichero> Se incluye el texto del fichero especificado en el


#INCLUDE “fichero” directorio o fuera de él.

#INLINE La función que sigue a esta directiva se copia en


memoria de programa cada vez que se le llame.
Puede servir para mejorar la velocidad.

#SEPARATE La función que sigue a esta directiva se implementa


de manera separada (no INLINE). De esta manera
se ahorra ROM

#ORG start Sitúa el código a partir de una determinada


posición de la memoria de programa

Fundamentos de Lenguaje C para PICs

#INT_ xxxx Indica que la función que sigue es un programa de


tratamiento de la interrupción xxxx.

#INT_GLOBAL Indica que la función que sigue es un programa


genérico de tratamiento de interrupción. No se
incluye código de salvaguarda de registros ni de
recuperación como cuando se usa #INT_ xxxx.

#PRIORITY ints Establece un orden de prioridad en las interrup-


ciones.

#USE DELAY (clock = frecuencia en Hz)


Define la frecuencia del oscilador que se va a
utilizar, que se emplea para realizar los cálculos
para funciones integradas de retardo.

#USE FAST_IO (puerto)


#USE FIXED_IO (puerto)
#USE STANDARD_IO (puerto)
Indican al compilador cómo debe generar código
para las instrucciones de E/S.

8
Fundamentos de Lenguaje C para PICs

Fundamentos de Lenguaje C para PICs

9
Fundamentos de Lenguaje C para PICs

10

You might also like