Está en la página 1de 31
Capitulo 2 Compilador CCS C 2.1 Introduccion El Compilador C de CCS ha sido desarrollado especificamente para PIC MCU, ob- teniendo la maxima optimizacién del compilador con estos dispositivos. Dispone de una amplia libreria de funciones predefinidas, comandos de preprocesado y ejemplos. Ademas, suministra los controladores (drivers) para diversos dispositivos como LCD, convertidores AD, relojes en tiempo real, EEPROM serie, etc, Las ca- racteristicas generales de este compilador y mas informacién adicional se pueden encontrar en la direccién hitp://www.ccsinfo.com. Un compilador convierte el lenguaje de alto nivel a instrucciones en cédigo mé- quina; un cross-compiler es un compilador que funciona en un procesador (normal- mente en un PC) diferente al procesador objeto. El compilador CCS C es un cross- compiler. Los programas son editados y compilados a instrucciones maquina en el entorno de trabajo del PC, el cédigo maquina puede ser cargado del PC al sistema PIC mediante el ICD2 (0 mediante cualquier programador) y puede ser depurado (puntos de ruptura, paso a paso, etc.) desde el entorno de trabajo del PC EICCS C es C estandar y, ademés de las directivas estandar (include, etc.), sumi- nistra unas directivas especificas para PIC (device, etc.); ademas incluye funciones especificas (bit_set(), etc.). Se suministra con un editor que permite controlar Ia sin- taxis del programa. En el manual de CCS se da mucha més informacién de la que a continuacién se va a dar. En este capitulo sdlo se describirdn los elementos mas basicos y esenciales pata comenzar a programar. Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC 2.2 Estructura de un programa Para escribir un programa en C con el CCS C se deben tener en cuenta una serie de elementos basicos de su estructura (figura 1). * DIRECTIVAS DE PREPROCESADO: controlan la conversién del programa a cédigo maquina por parte del compilador. PROGRAMAS o FUNCIONES: conjunto de instrucciones. Puede haber uno © varios; en cualquier caso siempre debe haber uno definido como principal mediante la inclusién de la Hamada main(). INSTRUCCIONES: indican como debe comportar el PIC en todo momento. COMENTARIOS: permiten describir lo que significa cada linea del programa Ding Daeanes a inincion AtSeararasan| Be Funcion principal Sh De eel es Instrucciones we ‘Comentarios pereerrrrtrs Figura 1. Estructura basica de un programa 2.3 Tipos de datos CCS C acepta los siguientes tipos de datos: Tipo Tamaiio Rango Descripcién Inf Short 1 bit Oal Entero de 1 bit 24 2. Compilador CCS C Tipo ‘Tamaiio go Descrips ae 8 bit 0.0255 Entero ate 16 bit 0a 65.535 Entero de 16 bit Int32, 32 bit 0a 4.294.967.295 Entero de 32 bit Float 32bit et: | Coma flotante Void 8 bit 0a255 Caracter Sin valor Signed Int8 8 bit “128 a +127 Entero con signo Signed Inti6 16 bit -32768 a + 32767 _| Entero largo con signo Signed Int32 32bit a H2"1) Entero 32 bit con signo 2.4 Las constantes Las constantes se pueden especificar en decimal, octal, hexadecimal o en binario: 123 Decimal 0123 etal (0) 0x123 Hexadecimal(0x) 06010010 _[ Binario (0b) Caracter 4010" Cardcter octal AxAS’ Cardcter hexade Ademas, se pueden definir constantes con un sufijo: ‘También se definen caracteres especiales, algunos como: Ints 127U Long 80UL Signed INTI6 _ | 80L Float 3.14F Char Con comillas simples \n Cambio de linea \ Retorno de carro 25 2.5 Variables Las variable se utilizan para nombrar posiciones de memoria RAM; se deben decla- rar, obligatoriamente, antes de utilizarlas; para ello se debe indicar el nombre y el tipo de dato que se manejard. Se definen de la siguiente forma: TIPO NOMBRE_VARIABLE [=VALOR INICIAL] TIPO hace referencia a cualquiera de los tipos de datos vistos en el punto 2.3. El NOMBRE_VARIABLE puede ser cualquiera y el valor inicial es opcional. Veamos un ejemplo: float temp. Las variables definidas en un programa pueden ser de tipo LOCAL 0 GLOBAL. Las variables locales s6lo se utilizan en la funcién donde se encuentran declaradas; las variables globales se pueden utilizar en todas las funciones del programa. Ambas deben declararse antes de ser utilizadas y las globales deben declararse antes de cualquier funcién y fuera de ellas. Las variable globales son puestas a cero cuando se inicia la funcién principal main(). #include <16f876.h: #USE DELAY (CLOCK=4000000) int1é c void FUNCION // Variable global char K, kant="0"; // bles locales void main( ) t int temp; // Variable 1 } Las variables pueden ser definidas con: * AUTO: (usada por defecto, no hace falta que se indique) donde la variable existe mientras la funcién esta activa. Estas variables no se inicializan a cero. Su valor se pierde cuando se sale de la funcién. 26 2. Compilador CCS C « STATIC: Una variable local se activa como global, se inicializa a cero y man- tiene su valor al entrar y salir de la funcién. + EXTERN: Permite el uso de variables en compilaciones multiples. 2.6 Operadores 2.6.1 Asignacion 4= _| Asignacién de suma (x+y es lo mismo que x-xty) = _| Asignacién de resta (x-=y es lo mismo que x=x-y) Asignacién de multiplicacién (x*=y es lo mismo que x=x*y) 'y) %= | Asignacién del resto de la division (x%=y es lo mismo que x-x%y) Asignacidn de division (x/=y es lo mismo que x= << | Asignacién de desplazamiento a la izquierda (x<<>=y es igual que x=x>>y) Asignacién OR de bits (x!=y es lo mismo que x=x!y) > &= | Asignacién AND de bits (x&=y es lo mismo que x=x&y) l= ed Asignacién OR EXCLUSIVA de bits (x"=y es lo mismo que x=x“y) 2.6.2 Aritméticos Ss Decremento sizeof | Determina el tamaiio, en bytes, de un operando En las operaciones de decremento e incremento, en funcién de la posicién del ope- rador, se consigue un preincremento (+A) o un postincremento (A++). Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC 2.6.3 Relacionales Menor que Mayor que ¥|y]* Mayor 0 igual que Menor igual que ua Igual Distinto Expresién condicional 2.6.4 Légicos ! NOT && AND i [oR 2.6.5 De bits ~ | Complemento a1 & | AND kis OR EXCLUSIVA | OR >>_| Desplazamiento a derechas <<_| Desplazamiento a izquierdas 2.6.6 Punteros & | Direccién Indireccion Puntero a estructura 2, Compilador CCS C Orden de precedencia de los operadores: Expresiones en orden de precedencia descendente (expr) lexpr ~expr “Hrexpr expr ~expr (type)expr “expr &value sizeof(type) exprrexpr expr/expr expr%expr exprtexpr expr-expr expré>expr exprsexpr expreexpr__[exprexpr _| exprexpr expr=expr expri=expr expréexpr expr’expr expr | expr expr &é& expr expr || expr expr ? expriexpr Wvalue=expr | Ivalueexpr_[ Ivalue=expr Ivalue*-expr | Ivalue/expr_| Ivalue%=expr Iwalue>>=expr_| Ivalue<<=expr | Ivalueé&=expr Ivalue*=expr__| Ivaluel=expr_| expr, expr 2.7 Funciones Las funciones son bloques de sentencias; todas las sentencias se deben enmarcar dentro de las funciones. Al igual que las variables, las funciones deben definirse antes de utilizarse. Una funcién puede ser invocada desde una sentencia de otra funcién. Una funcién puede devolver un valor a la sentencia que la ha llamado. El tipo de dato se indica en la definicién de la funcién; en el caso de no indicarse nada se entiende que es un int8 y en el caso de no devolver un valor se debe especificar el valor VOID. La fancién, ademas de devolver un valor, puede recibir parametros 0 argumentos. 29 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC La estructura de una funcién es: ncion (tipe paraml, param2,...) Dato Nombre (sentenctas); trunca (float a) { La forma de devolver un valor es mediante la sentencia RETURN: retura (expresién); expresién Donde expresién debe manejar el mismo tipo de dato que el indicado en la de- finicién de la funcién. En el caso de no devolver nada se finaliza con RETURN, al encontrar esta sentencia el compilador vuelve a la ejecucién de la sentencia de llamada. También se puede finalizar la funcién sin RETURN, tan s6lo con la lave de cierre “)”. Las funciones pueden agruparse en ficheros de librerias , que se pueden utilizar mediante la directiva #include . 2.8 Declaraciones de control Las declaraciones son usadas para controlar el proceso de ejecucién del programa. Las que admite CCS son: © IfElse. © While. 30 2 Compilador CCS C + Do-While. * For. * Switch-Case. © Return. * Break, Continue y Goto. 2.8.1 IF-ELSE Con la ayuda de IF-ELSE se pueden tomar decisiones. Af (expresién) sentencia_t; [else sentencia 2;] Los elementos que se encuentran entre corchetes [ ] son opcionales. Primero se evaltia la EXPRESION y sies cierta (TRUE 0 1) ejecuta la SENTENCIA_1, en el caso contrario (FALSE 0 0) ejecuta la SENTENCIA_2. Pueden anidarse los IF-ELSE dando lugar a los ELSE-IF; esto permite tomar deci- siones miiltiples. if (expresion_t) sentencia 1; lelse if (exptesisn_2) sentencia_2;] felse sentencia_3;] En este caso las EXPRESIONES se evalian en orden, si alguna de ellas es cierta la SENTENCIA asociada a ella se ejecutara y se termina la funcién. En caso contrario se ejecuta la SENTENCIA del ELSE. En ambos casos si existen varias sentencias para ejecutar se deben utiliza las Haves { }: 31 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC if (expresion) sentencia 1; [else sentencia 17 HW Bjemplos: IF (A==0) B=10; ELSE C=5; Ss IF (Al=1) B=10; ELSE C=5; —- 32 2, Compitadar GCS C IF (A>10) {IF (A>20) B=15;} ELSE B=5; 2.8.2 SWITCH Switch es un caso particular de una decisién multiple switch fexpresién) t case ante 1: sentencias; break; ease constante 2: sentenciass break; [default ISentencias;) 4 Evahia la expresién y en orden a la CONSTANTE adecuada realiza las sentencias “asociadas. Si ninguno de los CASE corresponde a la CONSTANTE se ejecuta DE- T (este comando es opcional). El comando BREAK provoca la salida de SWITCH, de lo contrario se ejecuta el ite CASE. pueden existir dos CASE con la misma CONSTANTE. 33 Compitador C CCS y Simutador PROTEUS para Microcontroladores PIC Ejemplo: case 2: B=2; break; case 3: B=3; break; default: break; zacién ; incremento sentencias; En las expresiones del FOR la inicializacién es una variable a la cual se Je asigna un valor inicial con el que controlar el bucle. La condicién de finalizacién sirve para evaluar ANTES de ejecutar las sentencias sies cierta 0 no, en el caso de ser cierta se ejecutan las sentencias y en caso contrario se sale del FOR. Por iltimo, la expresion de incremento 0 decremento modifica la variable de control DESPUES de ejecutar el bucle. Se pueden anidar bucles FOR utilizando distintas variables de control, 34 2. Compilador COS C Si se ejecuta la siguiente expresién se consigue un BUCLE SIN FIN: Fort; 7) f sentencias; } Ejemplo: For (N=1;N<=10;N++) { Printf(“%u",N); + 2.8.4 WHILE / DO-WHILE WHILE se utiliza para repetir sentencias. while (expresién) ‘ sentencias; ) La expresién se evalia y la sentencia se ejecuta mientras la expresin es verdadera, cuando es falsa se sale del WHILE. Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC DO-WHILE se diferencia del WHILE y del FOR en la condicién de finalizacién, la cual se evaliia al final del bucle, por lo que las sentencias se ejecutan al menos una vez. Do while (expresién); Si se ejecutan las siguientes expresiones se consigue un BLICLE SIN FIN: white (2) t ( gentencias; ) Wile (3) Ejemplos: While (N>5 && M<10) { At; 2; 36 2. Compilador CCS C 2.8.5 Otros * Return: se emplea para devolver datos en las funciones, + Break: permite salir de un bucle, se utiliza para While, For ,Do y Switch. * Goto: provoca un salto incondicional. 2.9 Comentarios Los comentarios en el programa facilitan la compresion de las distintas expresiones tanto para el programador como para quién tiene que interpretar dicho programa No afectan a la compilacién por lo que pueden ser tan extensos como el programa- dor quiera. Se pueden colocar en cualquier parte del programa y con dos forma- tos: * Utilizando //. Al colocar estos signos se comienza el comentario y finaliza en el final de la linea. * Utilizando /* y */. Se debe utilizar al inicio y al final de comentario, pero no pueden repetirse dentro del mismo comentario. /* Este comentario no finalize al final de esta linea finaliza cuando se cierre el comentario */ 7 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC 2.10 Directivas y funciones (Preprocessor commands y built-in functions) 2.10.1 Directivas Las directivas de pre-procesado comienzan con el simbolo y contintian con un comando especifico. La sintaxis depende del comando. Algunos comandos no per- miten otros elementos sintacticos en la misma expresién. Muchas de las directivas utilizadas por CCS son extensiones del C estandar. #DEFINEID STRING #1 expr #NOLIST ELSE #IFDEF id sPRAGMA cmd Estandar C #ENDIF #LIST #ERROR INCLUDE “FILENAME” #INLINE #INT_GLOBAL #SEPARATE Cualificadores #INT_DEFAULT SINT xx __DATE__ 2 pen a Identificadores |__DEVICE__ = TIME__ FILENAME__ RTOS #USE RTOS Especificacién Dispositivos DEVICE CHIP #FUSES options #1D CHECKSUM #1D NUMBER #SERIALIZE USE DELAY CLOCK #USEFIXEDIO — #USE RS232 #USE FAST_IO USE 12C #USE SPI USE STANDARD IO #ASM #BYTE id=id #ROM SBIT id=id.const ¥ENDASM #TYPE Librerias predefinidas Control de | yprrid-constconst #FILL_ROM #ZERO_RAM memoria sBUILD SLOCATE id=const #BYTE id=const #RESERVE Control de | #CASE #OPT n #PRIORITY compilador | #ORG #IGNORE_WARNINGS A lo largo del presente libro se iran viendo varias directivas en su ambito de apli- cacién particular. 2. Compilador CCS C ‘Como ejemplo se pueden comentar: #DEVICE chip, permite definir el PIC con el que se realizaré la compila device PICLEFES #FUSES options, la cual permite definir la palabra de configuracién para progra- mar un PIC. Por ejemplo, en el PICIGF84 las opciones posibles son: LP, XT, HS, RC, NOWDT, WDT, NOPUT, PUT, PROTECT, NOPROTECT. #device PIclersd #fuses XT, NOWOT, PUT, NOPROTECT #INCLUDE “filename”, permite incluir fichero en el programa. #include <16?84.h> #fuses XT, NONDT, PUT, NOPROTSCT #USE DELAY (CLOCK=SPEED), permite definir las frecuencia del oscilador del PIC, el compilador lo utiliza para realizar cAlculos de tiempo. Se puede utilizar M, MHZ, K y KHZ para definir la frecuencia. PINCLUDE <16F877.h> fuse delay (clock=4000000) #ASM y #ENDASM, permiten utilizar cédigo ensamblador en el programa en C. Se utilizan al inicio y al final del bloque ensamblador. fas bsf TATUS,RPO moviw 0x8 movw£ PORTS bef STATUS, RFO fendasn Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC 2.10.2 Funciones CCS suministra una serie de funciones predefinidas para acceder y utilizar el PIC y sus periféricos. Estas funciones facilitan la configuracion del PIC sin entrar en el ni- vel de los registros especiales. Las funciones se clasifican por bloques funcionales. ASSERT() GETCHO, PUTC() FGETC() GETCHAR() _ | PUTCHAR() psrsme | FSETSO GETS) PUTSO) FPRINTR() _[ KBHIT() SET_UART._SPEED() FPUTC() PERROR() SETUP_UART() FPUTS() PRINTF() wspus [setup sp) | SPl_DATAIS_INO. SPI_WRITE() SPr2-HILOs |SPLXFER() | SPLREAD() OUTPUT_ Sa GET_TRISx() } INPUT_K() FLOAT() SET_TRIS_B() INPUT() INPUT_STATE() | OUTPUT_G()_| SET_TRIS_C() INPUT_AQ)_| INPUT_x() OUTPUT_H()_[SET_TRIS_D() : , OUTPUT_ INPUT) {OUTPUT_AQ) | iricH() SET_TRIS_E() INPUT_C() _[ouTPUT_() [OUTPUT J() | SET_TRIS_F() BS = 7 TIPU Gi piscreras [JNPUT0Q __[ourpur_sir() [ouTPUT_KQ)_[Set_TRIS_G)) INPUT_E() —_ [OUTPUT_C()__[ OUTPUTLOWG | SET_TRIS_HO) : OUTPUT_T0- INPUTR() — {OUTPUT_DQ) | Corer) SET_TRIS_() J OUTPUT_DRI- [PORT_A_PU- mPuTGO | vec) LLUPSO SET_TRIS_K() INPUTHO _[OuTPUT_EQ) | PORT_B_PULLUPSO) INPUT JQ) OUTPUT_F() | SET_TRIS_A() E/S PUERTO | PSP_INPUT_FULL() PSP_OVERFLOW() PARALELO. ; ESCLAVO _ | °SP-OUTPUT_FULL() SETUP_PSP() ()_[12C Slaveaddn() [12C ISR_STATEO wsBusKe [Rc PoLL() [| 12C START() BCREAD() [2c sToP() CLEAR INTE- [GOTO_ rac contro: [RRUPTQ | apprEss) _ | RESET-CPUO PROCESOS | DISABLE_!! INTERRUPT_ I reurig) [Acne RESTART_CAUSE() 2. Compilador CCS C ENABLE_IN- SETUP_OSCILLATOR( ) a TERRUPIS() [JUMP_TOISR procesos [EXTNT [TARE Ts nung) GETENV() READ_BANK() | WRITE_BANK() BIT_CLEAR() | MAKES() _MUL() SHIFT_LEFT() ee aoe BIT_SET() MAKE16() eos Hee ) BIT_TEST() MAKE32() nee SWAP() ABS() ‘COSH() TLABS(), SING) Selec aaa ACOS() DIV) LDEXP() SINH() ASIN) EXP() DIVO), SQRT() ATAN() | FABS(), LOG() TAN() ATAN2() FLOOR) LOGI) TANHO, CESTANDAR CEN, FMOD() MODK(), COS() FREXP() POW) pee SETUP_VREK() | SETUP_LOW_VOLT_DETECT() ‘AID CONVER- | SET_ADC_CHANNEL() SETUP_ADC_PORTS() SION SETUP_ADC() | READ_ADC() ATOF() ISLOWER(char) | STRCMP( ) oT STRRCHR() ATOK ) ISPRINT(x) STRCOLL() STRSPN() ATOIS2() ISPUNCT(x) STRCPY() STRSTR() ISSPACE(char) OLY) STRCSPN()__[ STRTOD() CARACTERES [ISALNUMQ)_[ISUPPER(char)_[STRLEN() STRTOK() CESTANDAR | ISALPHA(char) | ISXDIGIT(char) | STRLWR() STRTOL() ISAMOUNG() [ITOA() STRNCAT() _[STRTOUL() ISCNTRL(x)__| SPRINTF() STRNCMP() _[ STRXFRM() IsDIGIT(char) _[STRCAT() STRNCPY() | TOLOWER() ISGRAPH(x) _[ STRCHR() STRPBRK() _| TOUPPER() GET_TIMER() [SET_RTCC() _[SETUP_TIMER_0() overs — LCETTIMERI() | SET_TIMERO() | SETUP_TIMER.1() GET_TIMER2() | SET_TIMERI()_[SETUP_TIMER 2() GET_TIMER3() | SET_TIMER2()_| SETUP_TIMER_3 () 4 Compilador € CCS y Simulador PROTEUS para Microcontroladores PIC GET_TIMER4() | SET_TIMER3()_[ SETUP_TIMER 4() ER5() IMER4() | SETUP_TIMER 5() ‘TIMERS (GET_TIMERx() | SET_TIMERS()_[ SETUP_WDT() RESTART_WDT() SETUP_COUNTERS() CALLOC() __[MEMCMP() _| OFFSETOFBIT() FREE() MEMCPY() REALLOC() perience LONGJMP() | MEMMOVE() _| SETIMP() MALLOC() _| MEMSET() MEMCHR() _ | OFFSETOF() STRXFRM() _|MEMCHR() [| MEMCMP() STRCAT() ‘STRCHR() STRCMP() STRCOLL() —_[STRCSPN() | STRICMP() cADENAS [STRCOLL() | STRCSPN(Q) | STRICMP() ESTANDAR [STRLEN() STRLWR() STRNCAT() STRNCMP() _|STRNCPY() __ | STRPBRK() STRRCHR() _ | STRSPN() ‘STRSTR() STANDARD STRING FUNCTION() SET_POWER_PWM_OVERRIDE() | SETUP_CCP2() SET_POWER_PWMX_DUTY() _| SETUP_CCP3() SET_PWM1_DUTY() SETUP_CCP4() Moputo [SET_PWM2_DUTY() SETUP_CCP5() ccP SET_PWM3_DUTY() SETUP_CCP6( ) SET_PWM4 DUTY() SETUP_POWER_PWM() SET_PWM5_DUTY() SETUP_POWER_PWM_PINS() SETUP_CCPI() ERASE_PROGRAM_EEPROM() _| SETUP_EXTERNAL_MEMORY() READ_CALIBRATION() eter SSE EEPROM | READ_EEPROM() WRITE_EEPROM() INTERNA READ_EXTERNAL_MEMORY()_| WRITE EXTERNAL MEMORY() READ_PROGRAM_FEPROM() _ | WRITE PROGRAM _EEPROM() READ_PROGRAM_MEMORY() _| WRITE_PROGRAM_MEMORY() cereus BSEARCH() | RAND() SRAND() QSORT() RETARDOS | DELAY_CYCLES() DELAY_US() _ [| DELAY_MS() 42 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC + .PJT: fichero de proyecto; contiene toda la informacién relacionada con el pro- yecto. + .LST: muesira un listado con el cédigo C y el cédigo ensamblador asociado para cada linea de cédigo. + .SYM: muestra las posiciones y valores de los registros y las variables del pro- grama. * STA: muestra una estadistica de la utilizacion de la RAM, ROM y la PILA. + .TRE: muestra un arbol del programa donde se especifican las funciones y sus Iamadas, con la ROM y RAM usada en cada una de ellas. + HEX: * .COF: fichero binario que incluye el cédigo maquina y la informacién para la depuracién correspondiente. ichero estindar para la programacién del PIC. 2.12.2 Entorno de trabajo Elentorno de trabajo del CCS en PCW y PCWH permite compilar y también sumi- nistra una gran variedad de herramientas auxiliares. En la figura 2 se muestra los distintos elementos basicos del entorno de trabajo. Existen dos formas de iniciar una sesién: abriendo un fichero de cédigo fuente o creando un proyecto. Barra de estandar ZONA DE CODIGO Barra de informacién Figura 2. Entorno de Trabajo 2. Compilador CCS C Para abrir un fichero fuente directamente se realiza una pulsacién sobre el icono para el manejo de ficheros (figura 3) y aparece un menu donde podemos crear, abrir, guardar o cerrar ficheros. Con el comando NEW podemos crear un fichero fuente, un proyecto, un fichero RTF o un fichero de diagrama de flujo. Figura 3. Los menus para el manejo de los ficheros Con la opcién NEW > SOURCE FILE, el programa pide el nombre del nuevo fichero y crea una nueva ventana en blanco donde podemos empezar a escribir (Figura 4). SSeS Figura 4. Fichero fuente nuevo Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC Si se ejecuta el comando PROJECT WIZARD, tras pedir el nombre del nuevo pro- yecto aparece la ventana de configuracién con dos pestafias, una para configurar las distintas opciones que se muestran en la barra de la izquierda (figura 5) y otra donde se muestra el codigo resultante de la configuraci6n (figura 6). Recorriendo las distintas opciones (general, communications, etc.) se llega a obtener el cédigo de configuracién deseado (figura 7), tras lo cual ya podemos empezar a escribir el resto del cOdigo del programa. Debemos observar como se incluye un fichero de cabecera *k donde se encuentra la configuracién del dispositivo (figura 8). iPomieiee fein mcaintng Figura 6. Ventana de configuracion con el cédigo resultante 2. Compilador CCS C setup_ade_ports AND) setup_ade (ADC CLOCK_INTERHAL setup_spi (FALSE) setup_timer_0 RTCC_INTERNAL| RTCC_DIV_1 setup timer i Ti DISABLED setup_timer2 T2_DISABLED.0. + cédigo después de una configuracion $5252 bats parte 8 omit-PaL¢6, cov PDT bite’ Figura 8. El fichero de cabecera con la configuracion del PIC 2.12.2.1 El primer programa La opcién del PROJECT WIZARD es muy comoda pero para comenzar a trabajar con CCS C, se recomienda iniciar los ficheros de cédigo fuente directamente hasta que el programador adquiera los conocimientos basicos para manejar esta opcién. Asi pues abrimos un fichero fuente nuevo donde se escribiré un programa para en- cender y apagar un led durante 1 segundo. El led se conectaré a la patilla RB7 de un PICI6F876 trabajando a una frecuencia de 4 MHz. En los siguientes temas se iran explicando cada una de las sentencias utilizadas, ahora lo interesante es manejar el entorno de trabajo y no tanto lo que hace cada sentencia. Lo primero es utilizar el fichero de cabecera donde se especifican las caracteristicas del microcontrolador PIC: 47 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC Este fichero lo suministra CCS y lo incorpora en el directorio de dispositivos (devi- ces). El compilador tiene una ruta de busqueda para los ficheros #include; esta ruta se puede modificar en el caso de querer incluir ficheros que se encuentren en otros directorios. Con el comando OPTIONS > PROJECTS OPTIONS > INCLUDE FILES se accede a una ventana (figura 9) donde se puede afiadir, eliminar 0 mo- dificar el orden de busqueda de los ficheros #include (también podemos observar que se pueden configurar los ficheros de trabajo -FILES- 0 los ficheros de salida OUTPUT FILES-). Figura 9, Ruta de busqueda de los ficheros #include A continuacién se definen, mediante las correspondientes directivas, la velocidad del PIC y el puerto utilizado. Es importante definir la velocidad inmediatamente después del PIC ya que muchos drivers (como el LCD) la necesitan para configu- rarse. fuse delay (clock = 4000000) # byte puerto_b = 0x06 Ahora se puede describir la funcién principal MAIN (). Los cambios de color, letra, etc. se puede configurar desde la opcion OPTIONS > EDITOR PROPERTIES... Al escribir el programa (figura 10) podemos observar como aparece un Arbol de funciones a la izquierda de la ventana de programa; esto permite expandir o con- traer las funciones y declaraciones de control para optimizar la visualizacién de los programas més complejos (figura 11). 48 2. Compitador CCS C set_teie p00 puerto» eiay_e@ 1000 bit_see puerto b, aetay_me i000 bit_clear puerto» ‘ens e (TRUE Figura 10. El programa a £876 & a @elay clock » 00905: | 4)) soce puertop 5) 6 | void mainivoid set_tria bp) 00 puezeo Bo ao Figura 11. Contrayendo el arbot Enel editor de texto se puede pulsar el botdn derecho sobre cualquier linea (figura 12); en el caso de los ficheros #include permite abrirlos en una pestafa adicional. Figura 12. Las opciones det botén derecho 49 Compilador C CCS y Simulador PROTEUS para Microcontri Como ayuda para escribir el programa, CCS ofrece el comando VIEW (figura 13) que permite visualizar las interrupciones (Valid Interrupts), fusibles de configura- cién (Valid Fuses), hojas de caracteristicas (Data Sheet) y una ventana completa don- de se describe el PIC (Device Table Editor) mediante distintas pestafas (esta opcién también es accesible desde la opcién TOOLS > DEVICE EDITOR (ver figura 15). me a ce ef ne ‘tanga: Figura 13. Comando VIEW Se puede proceder a la compilacién, que se puede hacer con el comando COMPILE > COMPILE 0 directamente con la tecla de funcién . Durante la compilacién aparece una ventana donde se informa del proceso de compilacién y si hay errores (figura 14). Tras la compilacién aparece una ventana con los mensajes de error si los. hubiese o el porcentaje de utilizacién de la memoria RAM y ROM sila compilacion ha sido correcta (figura 15). jATENCION! Si se escribe un fichero fuente y a continuacién se abre 0 se crea un segundo fichero fuente, al compilar este ultimo se compilara el primero. Siempre se compila siempre el PRIMER fichero abierto. 2. Compilador CCS C Complete Notas s . Files 2, Stotements: 8, Times t Sec. Lines: 266 ‘Output tes: ERR MEX SYM LST COF PST TRE STA Figura 14, Ventana de compilacion Figura 15. Mensajes de compilacion Tras la compilacion se obtiene, entre otros, el fichero HEX para programar 0 si- mular el PIC. En OPTIONS > PROJECT OPTIONS > OQUPUT FILES, se pueden configurar los ficheros de salida (figura 16). Figura 16. Ficheros de salida 51 Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC En Ja parte izquierda del fichero fuente aparecen unas ventanas auxiliares (Identi- jfiers, Projects, Files) en las que se pueden observar la estructura de fichero del pro- grama compilado (figura 17). Haciendo una pulsacién en cualquiera de ellos se abre una pestafia con su contenido, Figura 17. Ventana auxiliar para ficheros En la barra estindar -figura 18- (para activarla: OPTIONS > TOOLBAR... > TOOLBARS, figura 19), también aparecen distintos comandos entre los que se en- cuentran la visualizacion de los ficheros de salida. Figura 19. Activacion barras de herramientas 52 2. Compilador CCS C Hay un fichero de salida especialmente util para la simulacidn con el PROTEUS VSM, se trata del fichero RAM SYMBOL MAP (*SYM) donde aparecen todas las variables de la memoria RAM y sus correspondientes direcciones. Por ejemplo, si en un programa existe una variable FLOAT llamada TEMP, se puede consultar su direccién a través de este fichero (figura 20) para utilizarla en el WATCH del PRO- TEUS (figura 21 y figura 22). 933, init. 893-036 @ITOF P41 033 MAIN-@sCRaTCH 034-097 GPRINTF L320 208FPI Figura 21. Configuracion del WATCH en el PROTEUS Compilador C CCS y Simulador PROTEUS para Microcontroladores PIC None Agdcess Value matic 25.4507 Figura 22. Ventana de WATCH con la variable 54

También podría gustarte