You are on page 1of 29

DTO.

INGENIERIA
ELECTRICA-ELECTRÓNICA

TEMA

Compilador C para PIC
CCS C

Compilador C para PIC
CCS PIC COMPILER
• Un

compilador convierte un lenguaje de alto nivel a
instrucciones en código máquina.
Varios compiladores C tienen como procesador objetos los
PICmicro tal es el caso de MicroChip y CCS.

• Los programas son editados y compilados a instrucciones
máquina en el PC.

• El código es ejecutado en el PIC y puede ser depurado.
2

– Programas • Bloques de programa. una – Sentencias • Instrucciones que definen lo que hace el programa y la secuencia de ejecución del mismo. – Comentarios • Imprescindibles como documentación del código fuente.CCS PIC COMPILER • Los elementos programa en C básicos de un – Directivas de preprocesado • Indican al compilador cómo debe generar el código máquina. • Siempre debe incluirse llamada main(). 3 .

4 . •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 64b) void (sin valor) •Las variables pueden ser locales o globales.e. 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). p. indicando el nombre asignado y el tipo de datos que en ella se van a almacenar (opcionalmente también el valor inicial asignado).:int i. tipo nombre_variable [=valor]. Las variables locales sólo pueden ser usadas en la función en que se declaran. •En C es necesario declarar todas las variables antes de poder utilizarlas.VARIABLES •Una variable es un nombre asignado a una o varias posiciones de memoria RAM.

5 .VARIABLES • 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 void sin valor nulo ninguno int1 entero de 1 bit 1 bit 0a1 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 0a1 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.

6 . hay que introducir el modificador signed delante del tipo. Especificación Significado Tamaño Rango signed char carácter con signo 8 bits -128 a 127 signed int16 entero con signo 16 bits -16384 a 16383 signed long coma flotante 16 bits -32768 a 32767 •Los números negativos se codifican en complemento a 2. El efecto que se consigue es el recogido en la siguiente tabla. •Para almacenar datos con signo.VARIABLES •Todos los tipos de datos son por defecto sin signo (unsigned) salvo los de tipo float. •Cuando se opera con distintos grupos de datos en una misma expresión. se aplican una serie de reglas para resolver las diferencias.

se entiende que devuelve un entero. } •Las funciones pueden devolver un valor a la sentencia que las llama. debe incluirse una especificación tipo void. El tipo de dato devuelto se indica mediante tipo_dato (char. Si no se indica nada. •Las funciones deben ser definidas antes de ser utilizadas. tipo param2 .FUNCIONES •Las funciones son los bloques constructivos fundamentales en C. int16. •Formato general de definición de una función: tipo_dato_return nombre_func (tipo param1 . Todas las sentencias deben encontrarse dentro de funciones. …) { cuerpo de la función (sentencias). long). Si no devuelve nada. 7 .

Si no debe devolver nada. return (expresión). •La expresión debe proporcionar el mismo tipo de dato que el especificado en la función. •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. se finaliza con return. return expresión.FUNCIONES •La manera que tiene una función para devolver un valor es mediante la 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. •Además con la sentencia return. 8 .

• La llamada por valor copia el argumento de llamada en el parámetro formal de la función (No modifica su valor en la función de partida). int suma (int a . una función también puede recibir parámetros (denominados argumentos) según se indicó en su definición. } main() { int c. Argumentos de llamada } •Los argumentos se pueden pasar a las funciones por valor o por referencia.FUNCIONES •Además de devolver valores. 23). int b) Parámetros formales { return (a+b). 9 . • La llamada por referencia usa la dirección de la variable que se pasa a la función (se consigue usando punteros o arrays). c = suma (10 .

•De asignación •Aritméticos 10 .OPERADORES •El lenguaje C define numerosos operadores mediante los cuales se construyen las expresiones (combinación de operadores y operandos).

OPERADORES •Relacionales •Lógicos •De bits 11 .

12 .OPERADORES •In/decremento •Desplazamiento bit •Dirección/indirección En lenguaje C “profesional” es muy frecuente usar abreviaturas. por ejemplo. que a = a + b. es más habitual ver a += b. Así.

OPERADORES 13 .

DECLARACIONES 14 .

sentencia 2. Si es falsa. si es cierta. if (expresión) sentencia { sentencia 1.} if (expresión) sentencia 1.. se ejecuta el segundo. se ejecuta el primer bloque de código (o sentencia 1). Si es cero (falso) continúa sin ejecutar la sentencia o bloque de sentencias. .. Else sentencia 2. (expresión) ? (sentencia 1) : (sentencia).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). } – Sentencia if-else • Se evalúa una expresión y. 15 .

} If (a>b) { If (a>d) c = 15.Sentencias de control de programa – Sentencia if-if/else If (P1 !=0) c=20. } else c=0. else c=0. else c=0. If (a>b) { If (a>d) c = 15. 16 .

default: grupo n de sentencias. break. break. . 17 . } break es opcional. No puede haber constantes iguales en dos case de la misma sentencia switch.. Si no aparece se sigue con el case siguiente.. switch (expresión) { case constante 1: grupo 1 de sentencias. el cuerpo de sentencias asociadas a esa constante se ejecuta hasta que aparezca break. default es opcional y el bloque asociado se ejecuta sólo si no hay ninguna coincidencia con las constantes especificadas. case constante 2: grupo 2 de sentencias.Sentencias de control de programa – 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.

Sentencias de control de programa – Sentencia switch Switch (k) { case 0: x=1. b=15. case 3: x=12. break. } 18 . break. case 2: c=6. break. default: break.

se ejecuta el bucle. incremento) { sentencia(s). 19 . Si no. Si es cierta. condición .Sentencias de control de programa – Sentencia de bucle for • Se emplea para repetir una sentencia o bloque de sentencias. • 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. for (inicialización . se sale del mismo. } • 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.

} For (y=1. } 20 . px=px+3.Sentencias de control de programa – Sentencia de bucle for For (i=1.y<=99.i++) { delay_ms(33).y=y+3) { delay_ms(33).i<=100. px=y.

ya no se ejecuta la sentencia o bloque de sentencias. } • – La expresión se evalúa antes de cualquier iteración.Sentencias de control de programa – Sentencia de bucle while • La repetición se lleva a cabo mientras sea cierta una expresión. Sentencia de bucle do-while do { sentencia(s). while (expresión) { sentencia(s). por lo que el bucle se ejecuta siempre al menos una vez. 21 . Si es falsa. } while (expresión) • Las sentencias se ejecutan antes de que se evalúe la expresión.

x=p1. } do { a=1. } while (x>0 && y>5). b=45. b=45.Sentencias de control de programa – Sentencia de bucle do-while/while while (x>0 && y<5) { a=1. 22 . x=p1.

– 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. Empiezan por // y finalizan con el final de la línea.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. – Hay dos formatos posibles para los comentarios. Formato 1. Son ignorados por el compilador y no afectan a la longitud ni rapidez de ejecución del código final. /* Esto también es un comentario */ /* Pero esto que /* parece un comentario válido*/ no lo es */ 23 . Empiezan por /* y finalizan por */. Formato 2. No es posible anidar comentarios con este formato. // Esto es un comentario.

24 #BYTE id=x Se crea una variable y se sitúa en el byte x en memoria. Si ya existía esa variable. #BIT id=x. – Al final de esta sección se incluyen listas con las directivas y las funciones integradas correspondientes al compilador de CCS. se coloca físicamente en la .y Se crea una variable tipo bit correspondiente al bit y del byte x en memoria. Directivas de preprocesado más habituales: #ASM Las líneas entre estas dos directivas deben ser instrucciones #ENDASM ensamblador que se insertan tal y como aparecen.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).

#INCLUDE <fichero> Se incluye el texto del fichero especificado en el #INCLUDE “fichero” directorio o fuera de él.C específico para los PIC #DEFINE id texto adjunto. #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. El identificador se sustituye por el texto #DEVICE chip código. Define el micro para el que se escribe el #FUSES options grabación del Define la palabra de configuración para la microcontrolador. De esta manera se ahorra ROM . #SEPARATE La función que sigue a esta directiva se25 implementa de manera separada (no INLINE).

#PRIORITY ints Establece un orden de prioridad en las interrupciones. No se incluye código de salvaguarda de registros ni de recuperación como cuando se usa #INT_xxxx.C específico para los PIC #ORG start Sitúa el código a partir de una determinada posición de la memoria de programa #INT_xxxx programa de Indica que la función que sigue es un 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. . que se emplea para realizar los cálculos para funciones integradas de 26 retardo. #USE DELAY (clock = frecuencia en Hz) Define la frecuencia del oscilador que se va a utilizar.

Compilador C para PIC pre-processor commands 27 .

Compilador C para PIC built-in functions 28 .

Compilador C para PIC built-in functions 29 .