Вы находитесь на странице: 1из 41

Facultad de Ingeniera en Ciencias Aplicadas Carrera de Ingeniera en Mecatrnica Ingeniera de Manufactura Alvaro Fuentes

UNIVERSIDAD TCNICA DEL NORTE

Compilador C para PIC CCS C


Alvaro Fuentes
alvarofuentes.utn@gmail.com
1

16/Noviembre/2012

Compilador C para PIC


CCS PIC COMPILER
Un compilador convierte un lenguaje de alto nivel a instrucciones en cdigo mquina. Un cross-compiler es un compilador que funciona en un procesador (normalmente en PC) diferente al procesador objeto. Varios compiladores C tiene como procesador objetos los PICmicro tal es el caso de HiTECH, MicroChip y CCS.

Los programas son editados y compilados a instrucciones mquina en el PC. El cdigo mquina es cargado del PC al sistema PIC mediante el Programador.

El cdigo es ejecutado en el PIC y puede ser depurado desde el PC.

ESTRUCTURA DE UN PROGRAMA

Directivas

Funcin principal
Instrucciones Comentarios

Compilador C para PIC


CCS PIC COMPILER
Los elementos bsicos de un programa en C

Directivas de preprocesado

Indican al compilador cmo debe generar el cdigo mquina.

Programas Bloques de programa conjunto de instrucciones. Siempre debe incluirse un programa principal llamado main(). Instrucciones Definen lo que hace el programa y la secuencia de ejecucin del mismo. Comentarios Permiten describir lo que significa cada lnea del programa.

Compilador C para PIC


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=500;

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).
5

#include <18f876.h> #use delay (clock=4000000) int counter; //Variable global Void FUNCION (void) { Char k, kant=0; //Variables locales } Void main ( ) { Int18 temp; //Variable local }

Compilador C para PIC


VARIABLES
El compilador de CCS acepta los siguiente tipos de variable.
Especificacin char int float double void int1 int8 int16 int32 short long Significado Tamao carcter 8 bits entero 8 bits coma flotante 32 bits float doble precisin no soportado sin valor nulo entero de 1 bit 1 bit entero de 8 bits 8 bits entero de 16 bits 16 bits entero de 32 bits 32 bits entero de 1 bit 1 bit entero de 16 bits 16 bits Rango 0 a 255 (sin signo) 0 a 255 (sin signo) 6 bits de precisin No para PCM ninguno 0a1 0 a 255 (sin signo) 0 a 65535 (sin signo) 0 a (232-1) 0a1 0 a 65535 (sin signo)

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

Compilador C para PIC


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_return 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 (char, int16, long). Si no se indica nada, se entiende que devuelve un entero. Si no devuelve nada, debe incluirse una especificacin tipo void. 8

Compilador C para PIC


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

Compilador C para PIC


OPERADORES
El lenguaje C define numerosos operadores mediante los cuales se construyen las expresiones (combinacin de operadores y operandos).

De asignacin

Aritmticos
10

Compilador C para PIC


OPERADORES
Relacionales

Lgicos

De bits

11

Compilador C para PIC


OPERADORES
In/decremento

Desplazamiento bit

Direccin/indireccin

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

12

Compilador C para PIC


OPERADORES

13

Compilador C para PIC


DECLARACIONES

14

Compilador C para PIC


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; 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);
15

Compilador C para PIC


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

If (a>b) { If (a>d) c = 15; } else c=0;

16

Compilador C para PIC


Sentencias de control de programa
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; ... default: grupo n de sentencias; } break es opcional. Si no aparece se sigue con el case siguiente.

No puede haber constantes iguales en dos case de la misma sentencia switch. Si ninguno de los case corresponde a la constante se ejecuta default
17

Compilador C para PIC


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

18

Compilador C para PIC


Sentencias de control de programa
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.
19

Compilador C para PIC


Sentencias de control de programa
Sentencia de bucle for

For (i=1;i<=100;i++) { delay_ms(33); px=?px; }

For (y=1;i<=99;y=y+3) { delay_ms(33); px=y; }


20

Compilador C para PIC


Sentencias de control de programa
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.
21

Compilador C para PIC


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

do { a=1; b=45; x=p1; } while (x>0 && y++>5);


22

Compilador C para PIC


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 */
23

Compilador C para PIC


C especfico para los PIC
Las principales diferencias entre compiladores residen en las directivas (preprocessor commands) y en las funciones integradas (built-in functions). Al final de esta seccin se incluyen sendas listas con las directivas 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.
24

Compilador C para PIC


C especfico para los PIC
#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> #INCLUDE fichero


#INLINE

Se incluye el texto del fichero especificado en el directorio o fuera de l.


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
25

#SEPARATE

Compilador C para PIC


C especfico para los PIC
#ORG start Sita el cdigo a partir de una determinada posicin de la memoria de programa 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.

#INT_xxxx #INT_GLOBAL

#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. 26

Compilador C para PIC


pre-processor commands

27

Compilador C para PIC


built-in functions

28

Compilador C para PIC


built-in functions

29

Compilador C para PIC


PIC C COMPILER
INICIO > PIC-C > PIC C COMPILER

Se puede Crear o abrir un fichero (FILE > NEW / OPEN) o crear un proyecto (conjunto de ficheros y opciones de compilacin que se utilizan en un programa).

30

Comando de manejo de ficheros

Barra de comandos

Barra de subcomandos

Pestaa del programa ZONA DE CDIGO Barra de ventanas auxiliares

Barra de informacin Macros

31

Compilador C para PIC


PIC C COMPILER
PCB (12bit) PCM (14bit) PCH (PIC18)

COMPILAR (F9) MONTARLO

32

COMPILADOR

33

GESTIN DE PUERTOS
34

PUERTOS EN PIC 16FXXX

35

RESISTENCIAS PULL-UP Y PULL-DOWN

El puerto A, en el terminal RA4 tiene salida en drenador abierto lo que obliga a utilizar la resistencia pull-up en caso de funcionar como salida. En el puerto B, los terminales tienen una resistencia pullup interna, que se puede habilitar a traves del registro OPTION_REG (81h, 181h)

Bit 7: RPBU: Habilita las resistencias pull-up

1=las deshabilita 0=las habilita a todas

36

Compilador C para PIC


GESTION DE PUERTOS
Existen dos opciones para configurar y manejar los puertos E/S Definiendo los registros como variables localizadas en RAM. Se definen los puertos y los registros de direccin como variables de C y se colocan en las posiciones reales de estos registros en la memoria RAM de datos. Constituye la manera ms directa de trabajar con los puertos E/S.

Usando las funciones integradas especficas del compilador. Se definen la direccin de datos si es necesario y se gestionan las entradas y las salidas mediante funciones relativas al manejo de todo el puerto o de bits particulares del mismo. Cuando se usan las funciones integradas del compilador de CCS, el cdigo que introduce el compilador puede variar en cuanto a tamao y tiempo de ejecucin. Depender de la activacin de ciertas directivas de preprocesado:

#USE FAST_IO - #USE FIXED_IO - #USE STANDARD_IO

37

Compilador C para PIC


GESTION DE PUERTOS: POR RAM
OPCIN 1. Definiendo los registros en la RAM. Se definen los registros PORTx y TRISx como bytes y se sitan en la posicin correspondiente de la memoria RAM. La directiva C utilizada es #BYTE: #BYTE variable=constante; #BYTE TRISA = 0x85 //Variable TRISA en 85h. #BYTE PORTA = 0x05 //Variable PORTA en 05h. #BYTE TRISB = 0x86 //Variable TRISB en 86h. #BYTE PORTB = 0x06 //Variable PORTB en 06h. Una vez definidas estas variables se pueden configurar y controlar los puertos mediante comandos de asignacin. A partir de este punto, estas variables permiten controlar los puertos y se pueden utilizar en sentencias de asignacin. // 8 terminales de entrada // 8 terminales de salida // 4 pin de mayor peso OUT,4 pin de menor peso IN
38

TRISA = 0xFF; TRISB = 0x00; TRISC = 0x0F;

Compilador C para PIC


GESTION DE PUERTOS: POR RAM
Escritura en los puertos: PORTC = 0x0A; // salida del datos 00001010 por el puerto C

Lectura de puertos:
valor = PORTA; // Asigna el dato del puerto A a la variable valor. Manejo de sentencias: TRISD=0x0F; if (PORTD & 0x0F) PORTD |= 0xA0; //comprueba los 4 terminales de // menor peso del puerto D y si son // 1111 saca por los 4 terminales de // mayor peso el dato 1010.

39

Compilador C para PIC


GESTION DE PUERTOS: POR RAM
El compilador de CCS incorpora una serie de funciones integradas que permite manejar los bits de una variable previamente definida. bit_clear (var,bit); bit_set (var , bit); bit_test (var , bit); swap (var); //Pone a 0 el bit especfico (0 a 7) de la variable. //Pone a 1 el bit especfico (0 a 7) de la variable. //Muestra el bit especfico (0 a 7) de la variable. //Intercambia los 4 bits de mayor peso por los 4 //de menor peso de la variable.

bit_set (PORTC , 4); //saca un 1 por el terminal RC4 if (bit_test(PORTB,0)==1) bit_clear(PORTB,1); //si RB0 es 1 borra RB1 Tambin se puede declarar un bit de un registro con una variable mediante la directiva #BIT y trabajar directamente con la variable.

#BIT nombre = posicin.bit

#BIT RA4 = 0x05.4 ...... RA4 = 0;

40

Compilador C para PIC


GESTION DE PUERTOS: POR RAM
Ejemplo: LED CONTROLADO POR BOTON
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18

SW1 D1
LED-BLUE SW-SPST-MOM

R1
180

COMPILAR (F9) MONTARLO

41

Вам также может понравиться