fundamentos de lenguaje c para pics

11
M MICROCONTROLADORES ICROCONTROLADORES Y L L ENGUAJE ENGUAJE C C

Upload: romsa-sanchez-linaldi

Post on 07-Feb-2016

17 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fundamentos de Lenguaje C Para PICs

MMICROCONTROLADORESICROCONTROLADORES

YY LLENGUAJEENGUAJE CC

Page 2: Fundamentos de Lenguaje C Para PICs

1

Fundamentos de Lenguaje C para PICs

Introducción

* Directivas de preprocesado- Indican al compilador cómo

debe generar el códigomáquina.

* Funciones- Bloques funcionales del

programa.- Siempre debe incluirse una

función llamada main().* Sentencias

- Instrucciones que definen loque hace el programa y lasecuencia de ejecución delmismo.

* Comentarios- Imprescindibles como

documentación del códigofuente.

En un programa en C se pueden diferenciar varios elementos.

/* FORMATO TIPO DE FICHERO C*/

#include <stdio.h> //Directiva

/* Suma dos enteros */int suma (int a,b){

return (a+b); //Devuelve suma}

/* Función principal */main(){

int dato1,dato2; //Declaraciónint res; //Declaración

dato1=5; //Asignacióndato2=3; //Asignaciónres=suma(dato1,dato2);

}

Fundamentos de Lenguaje C para PICs

VariablesUna 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;

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 portodas las funciones del programa (deben declararse fuera de cualquier función y antes de ser utilizadas).

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)

Page 3: Fundamentos de Lenguaje C Para PICs

2

Fundamentos de Lenguaje C para PICs

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

double float doble precisión no soportado No para PCMvoid sin valor nulo ninguno

int1 entero de 1 bit 1 bit 0 a 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 (232-1)short entero de 1 bit 1 bit 0 a 1

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

6 bits de precisión

El compilador de CCS acepta los siguiente tipos de variable.

Los tipos de variable short y long pueden tener detrás la palabra intsin efecto alguno.

Fundamentos de Lenguaje C para PICs

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

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 modificadorsigned delante del tipo. El efecto que se consigue es el recogido en lasiguiente tabla.

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.

Page 4: Fundamentos de Lenguaje C Para PICs

3

Fundamentos de Lenguaje C para PICs

FuncionesLas 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.

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.

Formato general de definición de una función

Fundamentos de Lenguaje C para PICs

La manera que tiene una función para devolver un valor es mediantela sentencia return.

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

Además de con las sentencia return, las funciones terminan su ejecución y vuelven al lugar desde donde se les llamó cuando alcanzanla llave de cierre de función } tras ejecutar la última sentencia de la misma.

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.

return (expresión); return expresión;

return;

Page 5: Fundamentos de Lenguaje C Para PICs

4

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ámetroformal de la función.

La llamada por referencia usa la dirección de la variable que se pasaa la función.

Fundamentos de Lenguaje C para PICs

OperadoresEl 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 decrementox++ ó ++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;

Page 6: Fundamentos de Lenguaje C Para PICs

5

Fundamentos de Lenguaje C para PICs

Sentencias de control de programaSentencia if.

Se ejecuta una sentencia o bloque de código si la expresión queacompañ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 bloquede código (o sentencia 1). Si es falsa, se ejecuta el segundo.

if (expresión)sentencia 1;

elsesentencia 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 sentenciasasociadas a esa constante se ejecuta hasta que aparezca break.

switch (expresión){case constante 1:

grupo 1 de sentencias;break;

case constante 2:grupo 2 de sentencias;break;

...

default:grupo n de sentencias;

}

break es opcional. Si no aparece se sigue

con el case siguiente.

default es opcional y el bloque asociado se ejecuta sólo si no hay ninguna coincidencia con las constantes

especificadas.

Page 7: Fundamentos de Lenguaje C Para PICs

6

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.

Page 8: Fundamentos de Lenguaje C Para PICs

7

Fundamentos de Lenguaje C para PICs

ComentariosLos 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 delcódigo final.

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 esun comentario */

/* Pero esto que /* parece un comentario válido*/ no lo es */

Un comentario se puede colocan en cualquier lugar del programa ypueden tener la longitud y el número de líneas que se quiera.

Fundamentos de Lenguaje C para PICs

C específico para los PICLas 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 albit y del byte x en memoria.

#BYTE id=x Se crea una variable y se sitúa en el byte x enmemoria. Si ya existía esa variable, se colocafísicamente en la posición especificada.

Page 9: Fundamentos de Lenguaje C Para PICs

8

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 enmemoria de programa cada vez que se le llame.Puede servir para mejorar la velocidad.

#SEPARATE La función que sigue a esta directiva se implementade manera separada (no INLINE). De esta manerase ahorra ROM

#ORG start Sitúa el código a partir de una determinadaposición de la memoria de programa

Fundamentos de Lenguaje C para PICs

#INT_xxxx Indica que la función que sigue es un programa detratamiento de la interrupción xxxx.

#INT_GLOBAL Indica que la función que sigue es un programagenérico de tratamiento de interrupción. No seincluye código de salvaguarda de registros ni derecuperació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 autilizar, que se emplea para realizar los cálculospara funciones integradas de retardo.

#USE FAST_IO (puerto)#USE FIXED_IO (puerto)#USE STANDARD_IO (puerto)

Indican al compilador cómo debe generar códigopara las instrucciones de E/S.

Page 10: Fundamentos de Lenguaje C Para PICs

9

Fundamentos de Lenguaje C para PICs

Fundamentos de Lenguaje C para PICs

Page 11: Fundamentos de Lenguaje C Para PICs

10

Fundamentos de Lenguaje C para PICs