Está en la página 1de 32

INTRODUCCION C es un lenguaje de aplicacin general desarrollado por Dennies Ritchie en el ao 1972 en los laboratorios Bell de la empresa AT&T para

implementar el sistema operativo UNIX. A partir de ese momento su creciente utilizacin, unida al aumento de la popularidad de los microcontroladores, hizo que numerosas compaas desarrollaran su propia versin de C. Por ello en el ao 1983 el Instituto de Normalizacin Nacional Americano ANSI (American National Standars Institute) decidi crear un comit para establecer una definicin normalizada, independiente del sistema fsico y del sistema operativo en el que se ejecuten los programas escritos en el lenguaje C. Naci de esta manera, el ANSI C.

Este lenguaje posee instrucciones que actan de forma individual sobre los bits de una combinacin binaria al igual que un lenguaje ensamblador o de bajo nivel, y las combina con potentes instrucciones de control de flujo (saltos condicionales, etc.), tpicas de los lenguajes de alto nivel. Adems, el lenguaje C proporciona, entre otras, las siguientes ventajas: Permite Se realizar programas en estructurados l y modulares. compactas.

pueden

realizar

expresiones

Posee un elevado nmero de operadores y de tipos de datos. Reemplaza ventajosamente al lenguaje ensamblador.

Se puede utilizar en un amplio abanico de aplicaciones (programas de Gestin, clculos matemticos, diseo de sistemas digitales implementados con micro controladores, etc.) Genera programas Es fcil de aprender en lenguaje mquina muy optimizados.

COMPILADOR CCS Un compilador convierte el lenguaje de alto nivel a instrucciones en cdigo maquina; un cross-compiler es un compilador que funciona en un procesador (normalmente 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 cdigo maquina puede ser cargado del PC al sistema PIC mediante el ICD2 ( o mediante cualquier programador) y puede ser depurado (puntos de ruptura, paso a paso, etc.) desde el entorno del trabajo del PC. El CCS C es C estndar y, adems de las directivas estndar (#include, etc.), suministra unas directivas especificas para PIC (#device, etc.); adems incluye funciones especficas (bit_set(),etc.). se suministra con un editor que permite controlar la sintaxis del programa. Ficheros de Directivas y Encabezamiento (.h) Estos ficheros contienen directivas, que son instrucciones al compilador pero normalmente no incluyen sentencias de un programa. Los ficheros de Encabezamiento (de extensin .h) contienen informacin sobre los registros existentes para un determinado micro, tambin definen el tratamiento a dar a las funciones integradas en librera por el compilador en cuanto a argumentos que aceptar y los que devolvern a cada funcin. Estos ficheros estn pensados para ser incluidos en el cdigo fuente mediante una directiva del tipo: #include <16f628a.h> que buscara el fichero 16f877.h en un directorio distinto al del cdigo fuente, mientras que con comillas ( ) #include 16f628a.h

Hara que la bsqueda tuviera lugar en el directorio actual donde est la fuente.

DEFINICIN DE FUNCIN El formato de la definicin de una funcin es como sigue: [calificador_tipo] identificador ([[especificador_tipo identificador]) { [Cuerpo de la funcin] } El calificador tipo para una funcin puede ser: void o un especificador de tipo La definicin de una funcin puede ir precedida por una de las siguientes directivas del pro procesador (calificadores de funcin) para identificar una caracterstica especial de la funcin: #separate #inline #int_... Cuando utilizamos una de las directivas mencionadas y la funcin tiene un prototipo (declaracin anterior a la definicin de la funcin, y colocada al principio del fichero fuente) hay que incluir la misma #directiva en el prototipo y en la definicin de la funcin. Una caracterstica no muy corriente, se ha aadido al compilador para ayudar a evitar los problemas creados por el hecho de que no pueden crearse punteros a constantes de cadenas. Una funcin que tiene un parmetro de tipo char aceptar una constante de cadena. El compilador generar un bucle que llama a la funcin una vez para cada carcter de la cadena. Ejemplo: void lcd_putc(char c ) { ... } lcd_putc ("Mquina parada".); // definicin de la funcin

Estructura de un programa en C De forma generalizada, la estructura de un programa en C tiene el siguiente aspecto: Declaraciones globales Prototipos de funciones

main() {

Variables locales; Bloque de sentencias; Llamadas a las funciones; } funcion_1() { Variables locales a funcion_1; Bloque de sentencias; Llamada a otra/s funciones;

funcion_n() { }

LIBRERAS INCORPORADAS

#USE DELAY (CLOCK=frecuencia)

Esta directiva indica al compilador la frecuencia del procesador, en ciclos por segundo, a la vez que habilita el uso de las funciones DELAY_MS() y DELAY_US(). Opcionalmente podemos usar la funcin restart_WDT() para que el compilador reinicie el WDT durante el retardo.

Ejemplos: #use delay (clock=20000000) #use delay (clock=32000, RESTART_WDT)

#USE FAST_IO (puerto) Esta directiva afecta al cdigo que el compilador generar para las instrucciones de entrada y salida. Este mtodo rpido de hacer I/O ocasiona que el compilador realice I/O sin programar el registro de direccin. El puerto puede ser A-G.

Ejemplo: #use fast_io(A)

#USE FIXED_IO (puerto_OUTPUTS=pin_x#, pin_x#...) Esta directiva afecta al cdigo que el compilador generar para las instrucciones de entrada y salida. El mtodo fijo de hacer I/O causar que el compilador genere cdigo para hacer que un pin de I/O sea entrada o salida cada vez que se utiliza. Esto ahorra el byte de RAM usado en I/O normal.

Ejemplo: #use fixed_io(a_outputs=PIN_A2 ,PIN_A3)

#USE I2C (master/slave, SDA=Pin, SCL=Pin opciones) La librera I2C contiene funciones para implementar un bus I2C. La directiva #USE I2C permanece efectiva para las funciones I2C_START, I2C_STOP, I2C_READ,

I2C_WRITE e I2C_POLL hasta que se encuentre otra directiva #USE I2C. Se generan las funciones software a menos que se especifique la opcin NOFORCE_SW. El modo SLAVE slo debe usarse con las funciones SSP. Las opciones son:

OPCIONES:

MASTER Establece el modo maestro o principal SLAVE Modo esclavo SCL=pin Especifica el pin SCL (es un bit de direccin) SDA=pin Especifica el pin SDA ADDRESS=no Especifica la direccin del modo esclavo FAST Usa la especificacin rpida I2C SLOW Usa la especificacin lenta I2C RESTART_WDT Reinicia el WDT mientras espera en I2C_READ NOFORCE_SW Usa funciones hardware I2C

Ejemplos: #use I2C(master, sda=PIN_B0, scl=PIN_B1) #use I2C(slave,sda=PIN_C4,scl=PIN_C3 address=0xa0,NOFORCE_SW)

#USE RS232 (BAUD=baudios, XMIT=pin, RCV=pin...)

Esta directiva le dice al compilador la velocidad en baudios y los pines utilizados para la I/O serie. Esta directiva tiene efecto hasta que se encuentra otra directiva RS232.

La directiva #USE DELAY debe aparecer antes de utilizar #USE RS232. Esta directiva habilita el uso de funciones tales como GETCH, PUTCHAR y PRINTF. Si la I/O no es estndar es preciso poner las directivas FIXED_IO o FAST_IO delante de #USE RS232

OPCIONES: RESTART_WDT Hace que GETC() ponga a cero el WDT mientras espera un carcter. INVERT Invierte la polaridad de los pines serie (normalmente no es necesario con el convertidor de nivel, como el MAX232). No puede usarse con el SCI interno. PARITY=X Donde X es N, E, u O. BITS =X Donde X es 5-9 (no puede usarse 5-7 con el SCI). FLOAT_HIGH Se utiliza para las salidas de colecctor abierto. ERRORS Indica al compilador que guarde los errores recibidos en la variable RS232_ERRORS para restablecerlos cuando se producen.

BRGH1OK Permite velocidades de transmisin bajas en chips (uC's, memorias, etc) que tienen problemas de transmisin. Cuando utilizamos dispositivos con SCI y se especifican los pines SCI, entonces se usar el SCI. Si no se puede alcanzar una tasa de baudios dentro del 3% del valor deseado utilizando la frecuencia de reloj actual, se generar un error.

ENABLE=pin El pin especificado estar a nivel alto durante la transmisin. FORCE_SW Usa una UART software en lugar del hardware aun cuando se especifican los pines del hardware.

La definicin de RS232_ERRORS es como sigue:

Sin UART: El bit 7 es el 9 bit para el modo de datos de 9 bit. El bit 6 a nivel alto indica un fallo en el modo flotante alto. Con UART: Usado slo para conseguir: Copia del registro RCSTA, excepto: que el bit 0 se usa para indicar un error de paridad.

Ejemplo:

#use rs232(baud=9600, xmit=PIN_A2,rcv=PIN_A3)

#USE STANDARD_IO (puerto) Esta directiva afecta al cdigo que el compilador genera para las instrucciones de entrada y salida. El mtodo standar de hacer I/O causar que el compilador genere cdigo para hacer que un pin de I/O sea entrada o salida cada vez que se utiliza. En los procesadores de la serie 5X esto necesita un byte de RAM para cada puerto establecido como I/O estandar. Ejemplo: #use standard_io(A)

La declaracin for sirve para establecer un ciclo manejado por una variable que consiste en tres partes principales: la variable de inicio, hasta cuando terminar y la manera de aumentar esta variable. For se declara de la siguiente manera: for ( i = 0; i < 9; i++) { // declaraciones } Para utilizar esta declaracin primero se escribe la palabra for, a continuacin y entre parntesis se escriben las tres condiciones: primero el valor inicial de la variable, en este caso es i = 0; despus la condicin para que se realicen las declaraciones, o sea, mientras i sea menor que 9 ( i < 9 ) la declaracin se efectuar; y por ltimo el incremento o decremento de la variable ( i++ ); las declaraciones son la serie de funciones que se llevarn a cabo mientras i < 9. Las declaraciones pueden incluir prcticamente lo que sea, puede ser funciones o lo que desees. Las declaraciones de las variables van separadas por un punto y coma ( ; ), pero las tres van entre parntesis. No es necesario que la variable sea i, puede tener el nombre que t quieras como counter o cualquier palabra que se te ocurra. El valor de la variable, como hemos visto, no tiene que ser necesariamente numrico, puede ser igual a otra variable o elemento. Las declaraciones van entre { } Ejemplo: for ( i=0; i<14; i++) { alert ("El valor de i es igual a " + i ) } < name="forma"> En el siguiente ejemplo aparecer, al iniciarse la rutina, un mensaje que indicar el valor actual de i, el mensaje se repetir hasta que el valor de i sea menor que 14 (i < 14) o sea que el mensaje sera "El valor de i es igual a 0", "El valor de i es igual a 1", etc

FUNCIONES DE I/O DISCRETA INPUT(pin) Devuelve el estado '0' o '1' de la patilla indicada en pin. El mtodo de acceso de I/O Depende de la ltima directiva #USE *_IO utilizada. El valor de retorno es un entero corto. Ejemplo: while ( !input(PIN_B1) ); Nota: El argumento para las funciones de entrada y salida es una direccin de bit. Por ejemplo, para el bit 3 del port A (byte 5 de los SFR) tendra un valor Direccin de 5*8+3=43. Esto se puede definir como sigue: #define pin3_portA 43. Los pines o patillas de los dispositivos estn definidos como PIN_XX en los archivos de cabecera *.H. stos, se pueden modificar para que los nombres de los pines sean ms significativos para un proyecto determinado. OUTPUT_BIT(pin, value) Esta funcin saca el bit dado en value(0 o 1) por la patilla de I/O especificada en pin. El modo de establecer la direccin del registro, est determinada por la ltima directiva #USE *_IO. Ejemplo: output_bit( PIN_B0, 0); // es lo mismo que output_low(pin_B0); output_bit( PIN_B0,input( PIN_B1 ) ); // pone B0 igual que B1 output_bit( PIN_B0, shift_left(&data, 1, input(PIN_B1))); // saca por B0 el MSB de 'data' y al mismo tiempo

// desplaza el nivel en B1 al LSB de data.

OUTPUT_HIGH(pin) Pone a 'uno' el pin indicado. El mtodo de acceso de I/O depende de la ltima directiva #USE *_IO utilizada. Ejemplo: output_high(PIN_A0);

OUTPUT_LOW(pin) Pone a 'cero' el pin indicado. El mtodo de acceso de I/O depende de la ltima directiva #USE *_IO. Ejemplo: output_low(PIN_A0);

PORT_B_PULLUPS(flag) Esta funcin activa/desactiva las resistencias pullups en las entradas del puerto B. Flag puede ser TRUE (activa) o FALSE (desactiva). Ejemplo: port_b_pullups(FALSE); SET_TRIS_A(value) SET_TRIS_B(value) SET_TRIS_C(value) SET_TRIS_D(value) SET_TRIS_E(value) Estas funciones permiten escribir directamente los registros tri-estado para la configuracin de los puertos.

Esto debe usarse con FAST_IO() y cuando se accede a los puertos de I/O como si fueran memoria, igual que cuando se utiliza una directiva #BYTE. Cada bit de value representa una patilla. Un '1' indica que la patilla es de entrada y un '0' que es de salida. Ejemplo: SET_TRIS_B( 0x0F ); // pone B0, B1, B2 y B3 como entradas; B4, B5, B6 y B7 // como salidas, en un PIC 16c84 FUNCIONES DE RETARDOS DELAY_CYCLES(count) Esta funcin realiza retardos segn el nmero de ciclos de instruccin especificado en count; los valores posibles van desde 1 a 255. Un ciclo de instruccin es igual a cuatro periodos de reloj. Ejemplo: delay_cycles( 3 ); // retardo de 3ciclos instruccin; es igual que un NOP DELAY_MS(time) Esta funcin realiza retardos del valor especificado en time. Dicho valor de tiempo es en milisegundos y el rango es 0-65535. Para obtener retardos ms largos as como retardos 'variables' es preciso hacer llamadas a una funcin separada; vase el ejemplo siguiente. Es preciso utilizar la directiva #use delay(clock=frecuencia) antes de la llamada a esta funcin, para que el compilador sepa la frecuencia de reloj. Ejemplos: #use delay (clock=4000000) // reloj de 4MHz delay_ms( 2 ); // retardo de 2ms void retardo_segundos(int n) { // retardo de 'n' segundos; 0 <= n => 255 for (; n!=0; n--)

delay_ms( 1000 ); // 1 segundo } DELAY_US(time) Esta funcin realiza retardos del valor especificado en time. Dicho valor es en microsegundos y el rango va desde 0 a 65535. Es necesario utilizar la directiva #use delay antes de la llamada a esta funcin para que el compilador sepa la frecuencia de reloj. Ejemplos: #use delay(clock=20000000) delay_us(50); int espera = 10; delay_us(espera);

FUNCIONES DE CONTROL DEL PROCESADOR

DISABLE_INTERRUPTS (level) Esta funcin desactiva la interrupcin del nivel dado en level. El nivel GLOBAL prohbe todas las interrupciones, aunque estn habilitadas o permitidas. Los niveles de interrupcin son:

GLOBAL INT_AD INT_CCP2 INT_COMP

INT_EXT INT_EEPROM INT_SSP INT_ADOF

INT_RTCC INT_TIMER1 INT_PSP INT_RC INT_RB INT_TIMER2 INT_TBE INT_I2C INT_AD INT_CP1 INT_RDA INT_BUTTON

Ejemplo: disable_interrupts(GLOBAL); /* prohbe todas las interrupciones */

ENABLE_INTERRUPTS (level) Esta funcin activa la interrupcin del nivel dado en level. Queda a cargo del tcnico definir un procedimiento o rutina de atencin, para el caso que se produzca la interrupcin indicada. El nivel GLOBAL permite todas las interrupciones que estn habilitadas de forma individual. Vase tambin DISABLE_INTERRUPTS.

Ejemplo:

disable_interrupts(GLOBAL); // Prohbe todas las interrupciones enable_interrupts(INT_AD); // Quedan habilitadas estas dos interrupciones,enable_interrupts(INT_I2C); //pero hasta que no se habilite GLOBAL, no //podrn activarse enable_interrupts(GLOBAL); // Ahora s se pueden producir las interrupciones //anteriores. RESTART_CAUSE() Esta funcin devolver la razn por la que se ha producido el ltimo reset del procesador. Los valores de retorno pueden ser: WDT_FROM_SLEEP WDT_TIMEOUT MCLR_FROM_SLEEP NORMAL_POWER_UP Ejemplo: switch ( restart_cause() ) { case WDT_FROM_SLEEP: ; case WDT_TIMEOUT: handle_error();

} SLEEP() Esta funcin pone al micro en un estado de REPOSO. Ejemplo: SLEEP(); WRITE_BANK(bank, offset, value) Esta funcin escribe un byte de datos en el banco de memoria especificado. Value es el byte de datos a escribir; bank puede ser 1-3 segn el PIC; offset puede ser 0-15. Ejemplo: WRITE_BANK(1, 0, 23);

EJEMPLO DE UN PROGRAMA EN LANGUAJE C

/* parpadeo.c Programa que hace parpadear un led en RB7 cada ms */

#include <16C84.H> /* tipo de PIC */ #use delay( clock = 4000000 ) /* reloj de 4 MHz */ #byte puerto_b = 06 /* direccin del puerto B */ void main( void ) {

set_tris_b( 0x00 ); /* puerto B como salida */ puerto_b = 0; /* apaga todos los led */

do{ delay_us( 1000 ); /* retardo de 1000 (seg. */

bit_set( puerto_b, 7 ); /* enciende el led RB7 */ delay_us( 1000 ); /* espera 1 ms*/ bit_clear( puerto_b, 7); /* apaga el led */ } while( TRUE ); /* Repetir siempre */ }

Compilador PCW CCS Algunas de esas caractersticas son: Al compilar genera un cdigo mquina muy compacto y eficiente. Se integra perfectamente con MPLAB y otros simuladores/emuladores como PROTEUS para el proceso de depuracin. Incluye una biblioteca muy completa de funciones pre compiladas para el acceso al hardware de los dispositivos (entrada/salida, temporizaciones, conversor A/D, transmisin RS-232,bus I2C.,etc. Incorpora drivers para dispositivos externos, tales como pantallas LCD, teclados numricos, memorias EEPROM, conversores A/D, relojes en tiempo real, etc.(los drivers son pequeos programas que sirven de interfaz entre los dispositivos hardware y nuestro programa). Permite insertar partes de cdigo directamente en Ensamblador, manteniendo otras partes del programa en C.

Caractersticas del lenguaje C para este compilador El lenguaje C estndar es independiente de cualquier plataforma. Sin embargo, para la programacin de micro controladores es necesario disponer de determinados comandos que se refieran a partes especficas de su hardware, como el acceso a memoria, temporizadores, etc. Por este motivo, adems de los comandos, funciones y datos del lenguaje ANSI C, el compilador PCW incluye bibliotecas que incorporan determinados comandos que no son estndar, sino especficos para la familia de micro controlador PIC. stos son bsicamente de dos tipos: directivas del preprocesador y funciones pre compiladas Directivas del preprocesador. El compilador PCW dispone de 7 tipos bsicos de directivas:

Directivas derivadas del estndar de C, que permiten, entre otras funciones, un control bsico del cdigo y del flujo en el proceso de compilacin:

#DEFINE #ELIF #ELSE #ENDIF #ERROR #IF #IFDEF #IFNDEF #INCLUDE #LIST #NOLIST #PRAGMA #UNDEF

Directivas asociadas a las bibliotecas precompiladas, que proporcionan al compilador informacin relacionada con estas bibliotecas: #USE DELAY #USE FAST_IO #USE FIXED_IO #USE I2C #USE RS232 #USE STANDARD_IO Directivas relacionadas con la especificacin del dispositivo, por un lado, para definir los mapas de memoria y el juego de instrucciones, y por otro, incluir informacin necesaria para la programacin del dispositivo en los ficheros de salida de la compilacin:

#DEVICE #ID #FUSES #TYPE

Directivas de cualificacin de funciones, para identificar caractersticas especiales de una funcin: #INLINE #INT_DEFAULT #INT_GLOBAL #INT_xxxxx #SEPARATE Directivas de control del compilador, para definir opciones referidas a la compilacin del cdigo del programa: #CASE #OPT #ORG #PRIORITY Directivas de control de la memoria del microcontrolador, para gestionar y reservar el uso de determinadas zonas de memoria para variables: #ASM #BIT #BYTE #ENDASM #LOCATE #RESERVE #ROM #ZERO_RAM Identificadores predefinidos. Todas las directivas citadas hasta ahora, son comandos destinados a ser interpretados por el compilador, no por el micro controlador. Dentro del trmino genrico de directiva se incluyen, adems de estos comandos, unas variables que contienen informacin sobre el proceso de compilacin. Estas variables son lo que se denominan identificadores predefinidos del compilador: __DATE__ __DEVICE__ __PCB__ __PCH__ __PCM__ En un programa, las directivas se reconocen fcilmente porque comienzan por el smbolo #, mientras que los identificadores empiezan y acaban por doble subrayado (__). Funciones pre compiladas. Se puede facilitar considerablemente la tarea de programacin si no es necesario construir por nosotros mismos aquellas funciones que son de

utilizacin ms frecuente, como leer la entrada de un teclado o imprimir un determinado mensaje en una pantalla LCD conectada como salida. Existen funciones en C incluidas en el compilador PCW para manejar los diferentes recursos del micro controlador, desde el bus I2C hasta el conversor A/D.

Utilidades adicionales El entorno PCW incluye, adems del IDE y del compilador, una serie de utilidades adicionales con las que se amplan las posibilidades de ste, y que se encuentran en los mens View y Tools de la barra de mens, veamos algunas de ellas: Monitor del puerto serie: Consiste en un terminal que monitoriza la entrada y la salida del puerto serie del computador. Seleccin de dispositivos (Device Selection Tool): Esta utilidad consta de una base de datos con los dispositivos que puede programar el compilador, incluyendo todas sus caractersticas hardware, de manera que se puede emplear para buscar aquellos dispositivos que cumplan una serie de propiedades comunes. Editor de dispositivos (Device Editor): Este programa tambin emplea la base de datos de dispositivos, y permite editar los componentes para modificar sus caractersticas hardware, as como aadir nuevos dispositivos o eliminar algunos de ellos. Conversor numrico: Esta utilidad realiza conversiones entre los tipos de datos unsigned, signed, hex y float. Extraccin de datos de calibrado: Esta opcin permite leer los datos de calibracin existentes en la memoria de programa de un determinado dispositivo. Estos datos contienen informacin particular de cada micro controlador a su salida de fbrica, y se refieren a posibles problemas especiales que pudieran haber tenido lugar durante el desarrollo y fabricacin. Mediante esta opcin es posible leer estos datos y grabarlos en un fichero .H o .C que incorporar una directiva #ROM para dicho dispositivo, con lo que cada vez que se programe el micro controlador se incluirn estos datos de calibrado. Desensamblador: Esta opcin lee un fichero en Cdigo mquina y lo traduce a su equivalente en Ensamblador, con lo que se podra insertar este cdigo en un programa en C, mediante las directivas #ASM y #ENDASM. Puede que haya alguna herramienta de ms o de menos, eso depender de la versin de compilador que estemos utilizando

Ahora vamos a ver algunas consideraciones a tener en cuenta cuando vayamos a programar: En el tutorial que estamos siguiendo sobre programacin de Micro controladores en lenguaje C Hemos visto cmo hacer algunos ejemplos en C (la verdad es que pocos de momento ), pero no hemos visto nada sobre

aspectos de optimizacin de los programas. La optimizacin suele ser necesaria en muchas ocasiones, puesto que la memoria del micro controlador es un recurso escaso, y puede ocurrir que un programa que en un principio ocupa una cantidad de memoria mayor que la disponible, tras una optimizacin del cdigo reduzca su tamao de manera que s pueda programarse. A continuacin se indican algunas de las caractersticas que incorpora el compilador sobre este aspecto:

Insercin de cdigo Ensamblador: Mediante las directivas #ASM y #ENDASM es posible insertar cdigo Ensamblador directamente en el cdigo C, con lo que determinados procedimientos se pueden implementar directamente en Ensamblador, con el ahorro de cdigo y tiempo de ejecucin que ello implica. Gestin automtica de pginas de cdigo: los micro controladores PIC disponen de varias pginas de memoria de programa, lo que en la programacin manual supone tener en cuenta si los saltos se producen a otra pgina de cdigo diferente de la activa, y modificar las pginas de cdigo segn corresponda, ( y si no que se lo digan a los que programan en Ensamblador). Este aspecto es gestionado de manera automtica por el compilador, el cual, de manera transparente al usuario, insertar las instrucciones necesarias para el cambio de pgina de cdigo. Adems, durante el proceso de enlazado se analiza el cdigo objeto, de manera que aquellas funciones que son llamadas frecuentemente son situadas en la misma pgina de cdigo que la funcin que las llama, disminuyendo de este modo el tamao del cdigo y el retardo producido por la llamada a la funcin. Gestin automtica de bancos de memoria: El compilador tambin gestiona de manera automtica el cambio entre bancos de memoria RAM, y trata de minimizar el cambio entre bancos, intentando agrupar las variables locales utilizadas en cada funcin dentro de un mismo banco. Mapeo de la memoria del micro controlador desde el cdigo C: Las directivas #BIT y #BYTE permiten asignar variables del cdigo C a determinadas direcciones de la memoria del micro controlador, evitando de este modo que el compilador asigne automticamente variables a zonas de memoria que interesa mantener libres. Esta caracterstica tambin se puede realizar con otros tipos de datos, como las estructuras. Mapeo de tipos de datos de tamao bit: El compilador permite utilizar datos de tamao 1, 8 y 16 bits, y 32 bits en notacin de coma flotante. De estos datos, especial inters tienen los datos de tamao 1 bit (tipo Short Int), que permite utilizar de manera muy eficiente la memoria del micro controlador. Por ejemplo, en lugar de utilizar una variable de tipo #BYTE para implementar un indicador o flag, es posible utilizar una variable de tipo #BIT, con lo que la memoria ocupada es menor y el cdigo relacionado con esta variable se optimiza. Adems, las estructuras y uniones tambin permiten definir campos de bits, optimizando el almacenamiento de informacin de estos tipos de datos. Almacenamiento de constantes en memoria de programa: Los tipos de datos constantes, las cadenas de texto y las matrices o arrays son almacenados en la memoria de programa del microcontrolador, en

lugar de en la memoria de datos. Como consecuencia, y debido a la arquitectura Harvard de los PIC, en la que los segmentos de memoria de programa y datos son independientes, no es posible tratar las zonas de memoria de programa como datos, por lo que no se permite el empleo de punteros a arrays de constantes, ni tampoco a funciones, una nota a tener en cuenta para los que saben programar en C, pero desconocen las caractersticas de este compilador. Soporte de punteros y referencias: El compilador PCW permite el uso de punteros de 8 y 16 bits. Adems, tambin permite el paso de parmetros por referencia de variables, lo que proporciona la misma potencia que los punteros, mejorando al mismo tiempo la legibilidad del cdigo (esto lo veremos con ejemplos en el curso de C). Eficiente implementacin de variables y funciones: La eficiencia de los algoritmos de optimizacin empleados en este compilador permite que, en el caso de las variables, stas sean asignadas a zonas de memoria que se emplee la menor memoria posible de forma global, reutilizando para ello posiciones de memoria. Por ejemplo, el compilador asigna de manera automtica a una misma direccin de memoria varias variables definidas como locales en funciones diferentes a main, ya que en ningn momento podr existir ms de una de estas variables de manera simultnea, pues su valor dejar de existir al salir de la funcin donde se encuentran definidas. En cuanto a las funciones, es posible realizar anidaciones de funciones en niveles ms profundos que el permitido por la pila hardware, debido a una implementacin eficiente de las llamadas a estas funciones. Generacin del cdigo estrictamente necesario: En la compilacin del cdigo objeto final slo se incluyen aquellas funciones de las bibliotecas pre compilado que son utilizadas en el programa. De la misma forma, las funciones de usuario que no son llamadas nunca y las sentencias que no se pueden utilizar debido a la lgica del programa no son incluidas en el cdigo pre compilado.

SIMULADOR ISIS PROTEUS Proteus es una compilacin de programas de diseo y simulacin electrnica, desarrollado por Labcenter Electronics que consta de los dos programas principales: Ares e Isis, y los mdulos VSM y Electra. ISIS El Programa ISIS, Intelligent Schematic Input System (Sistema de Enrutado de Esquemas Inteligente) permite disear el plano elctrico del circuito que se desea realizar con componentes muy variados, desde simples resistencias, hasta alguno que otro microprocesador o microcontrolador, incluyendo fuentes de alimentacin, generadores de seales y muchos otros componentes con prestaciones diferentes. Los diseos realizados en Isis pueden ser simulados en tiempo real, mediante el mdulo VSM, asociado directamente con ISIS.

El mdulo VSM Una de las prestaciones de Proteus, integrada con ISIS, es VSM, el Virtual System Modeling (Sistema Virtual de Modelado), una extensin integrada con ISIS, con la cual se puede simular, en tiempo real, con posibilidad de ms rapidez; todas las caractersticas de varias familias de microcontroladores, introduciendo nosotros mismos el programa que controlar el microcontrolador y cada una de sus salidas, y a la vez, simulando las tareas que queramos que lleve a cabo con el programa. Se pueden simular circuitos con microcontroladores conectados a distintos dispositivos, como motores, lcds, teclados en matriz, etc. Incluye, entre otras, las familias de PIC's PIC10, PIC12, PIC16, PIC18, PIC24 y dsPIC33. ISIS es el corazn del entorno integrado PROTEUS. Combina un entorno de diseo de una potencia excepcional con una enorme capacidad de controlar la apariencia final de los dibujos. ARES ARES, o Advanced Routing and Editing Software (Software de Edicin y Ruteo Avanzado); es la herramienta de enrutado, ubicacin y edicin de componentes, se utiliza para la fabricacin de placas de circuito impreso, permitiendo editar generalmente, las capas superficial (Top Copper), y de soldadura (Bottom Copper).

Forma Manual Ejecutando ARES directamente, y ubicando cada componente en el circuito. Tener cuidado al DRC, Design Rules Checker (Verificador de Reglas de DISEO) Proteus es una potente herrmamienta usada por los mecatronicos Forma Automtica El propio programa puede trazar las pistas, si se guarda previamente el circuito en ISIS, y haciendo clic en el cono de ARES, en el programa, el programa compone la Netlist Mtodo 1 (Autorouter) Poner SOLO los componentes en la board Especificar el rea de la placa (con un rectngulo, tipo "Board Edge") Hacer clic en "Autorouter", en la barra de botones superior Editar la estrategia de ruteo en "Edit Strategies" Hacer clic en "OK"

Mtodo 2 (Electra Autorouter) Utilizando el mdulo Electra (Electra Auto Router), el cual, una vez colocados los componentes trazar automticamente las pistas realizando varias pasadas para optimizar el resultado. Con Ares adems se puede tener una visualizacin en 3D del PCB que se ha diseado, al haber terminado de realizar la ubicacin de piezas, capas y ruteo, con la herramienta "3D Visualization", en el men output, la cual se puede demorar, solo haciendo los trazos un periodo de tiempo un poco ms largo que el de los componentes, los cuales salen al empezar la visualizacin en 3D.

CONCLUSIN El compilador de C que vamos a utilizar es el PCW de la casa CCS Inc. A su vez, el compilador lo integraremos en un entorno de desarrollo integrado (IDE) que nos va a permitir desarrollar todas y cada una de las fases que se compone un proyecto, desde la edicin hasta la compilacin pasando por la depuracin de errores. La ltima fase, a excepcin de la depuracin y retoques hardware finales, ser programar el PIC. Al igual que el compilador de Turbo C, ste "traduce" el cdigo C del archivo fuente (.C) a lenguaje mquina para los microcontroladores PIC, generando as un archivo en formato hexadecimal (.HEX). Adems de ste, tambin genera otros seis ficheros, tal como se observa en la figura de la siguiente pgina. Finalmente, deciros que esta vez os presento los apuntes en soporte electrnico, a diferencia de ocasiones anteriores que estaban en formato impreso. Es una experiencia nueva y que como toda prueba tiene sus riesgos, aunque espero y deseo que, de una u otra forma logre prender la llama de la ilusin, o por lo menos despertar el inters por el estudio de la electrnica y en particular de este mundo inacabado de la programacin en C y los microcontroladores.

También podría gustarte