DOCUMENTACIÓN PARA EL TRABAJO CON LA PLATAFORMA GUADALBOT I.E.S VIRGEN DE LAS NIEVES Programación C para microcontroladores Tema 1. Introducción Índice de contenidos Introducción..........................................................................................................................................2 Estructura de un programa en C...........................................................................................................3 Elementos fundamentales de un programa en C. Los comentarios......................................................3 Elementos fundamentales de un programa en C. Las sentencias o instrucciones................................4 Elementos fundamentales de un programa en C. Programas o funciones (bloques)............................4 Elementos fundamentales de un programa en C. Las directivas de preprocesado...............................5 1 Introducción Un compilador de alto nivel es una herramienta de programación que nos traducirá el programa escrito en su lenguaje (C, Basic, Pascal, etc) en código ensamblador y luego generará los archivos de depuración (*.dbg, *.cof, *.d31, etc.) necesarios y, por supuesto, el archivo ejecutable, código máquina o código objeto (*.hex). Además hace que el programador no deba preocuparse por el hardware ni por el ensamblador nativo del microcontrolador (µC). Debemos aclarar antes de continuar que lo que vamos a ver en estos temas, aparte del lenguaje, nada tiene que ver con la programación de ordenador tipo PC. Algunos de los compiladores para microcontroladores son: • • • Hi-tech C • • • • • • CCS C Mikro C MPLAB C18 • • Lo desarrolla la empresa htsoft. Muy eficiente y soporta muy bien el lenguaje C estándar. Su entorno IDE (Integrated Development Environment o Entorno de desarrollo integrado) incluye el depurador ICD (In Circuit Debugger o depuración en circuito). Muy cercano al hardware del µC. No dispone de librerías incorporadas. Elevado precio y además el compilador para la familia PIC18 se vende por separado. Lo desarrolla la empresa ccsinfo. Aisla al programador de los recursos del µC. Además de las librerias estándar, como stdlib.h, stdio.h, string.h y math.h incorpora librerias para controlar todos los módulos internos del PIC así como muchos dispositivos externos. Se comercializan tarjetas entrenadoras. En un mismo paquete incluye los compiladores para: ◦ PIC10. Micros de 8 bits, 6 pines y bajas prestaciones. ◦ PIC12. Micros de 8 bits, 8 pines y bajas prestaciones. ◦ PIC16. Micros de 8 bits, variedad en número de pines y prestaciones medias. ◦ PIC18. Micros de 8 bits, variedad en número de pines y prestaciones altas. • Lo desarrolla y comercializa la empresa Mikroelektronika. Muy similar en sus librerias al CCS pero en Mikro C están precompiladas y, por tanto, no son modificables. Se comercializan tarjetas entrenadoras. • • Lo desarrolla y comercializa la empresa Microchip. MPLAB es gratuito pero no lo es C18. • • El compilador de C que vamos a utilizar es el PCW de la casa CCS Inc. Nosotros desarrollaremos todos los ejemplos en CCS. 2 Estructura de un programa en C De forma generalizada, la estructura de un programa en C la vemos en la figura 1. Figura 1 Donde vemos que existen: • Directivas de preprocesado: son las encargadas de controlar la conversión del programa a código objeto. • Programas o funciones: se trata de bloques de código o conjuntos de instrucciones. Podemos poner todos los necesarios pero siempre debe existir uno definido como principal y que es la denominada función main(). • Instrucciones: Van controlando el comportamiento del PIC en cualquier momento. • Comentarios: Describen el programa. Seguidamente vamos a describir cada uno de estos apartados. Elementos fundamentales de un programa en C. Los comentarios Los comentarios tienen el propósito de documentar y realizar aclaraciones en el código del programa. Va a ser todo el texto que siga a las barritas // en una línea (comentarios simples) y todo lo que está entre los signos /* y */. Se identifican fácilmente porque suelen aparecer en color gris. Los comentarios son ignorados por el compilador por lo que no pasan a formar parte del código objeto. En la Figura 2 vemos posibles aplicaciones de los dos tipos de comentarios posibles correspondiendo la zona sombreada a código válido. 3 Figura 2 Elementos fundamentales de un programa en C. Las sentencias o instrucciones Un programa en C se ejecuta sentencia a sentencia. Salvo las excepciones (que veremos) una sentencia debe finalizar siempre con punto y coma (;), siendo este símbolo el que actua como separador de sentencias. A continuación vemos la función main de un ejemplo en el que se hacen parpadear los ocho diodos LED's conectados al puerto B. void main() { while(TRUE) //Bucle infinito { output_b(0x00); //Puerto B a 0 delay_ms(500); //Retardo output_b(0xFF); //Puerto B a 1 delay_ms(500); } } Este código también lo podemos escribir, quitando los comentarios, de la forma siguiente: void main(){while(TRUE){output_b(0x00);delay_ms(500);output_b(0xFF); delay_ms(500);}} Pero evidentemente, aunque el funcionamiento es el mismo, resulta mucho más versatil la primera opción para el trabajo cotidiano y, no digamos, si tenemos que editar el programa pasado un tiempo. Vemos que los espacios, tabulaciones y comentarios sólo sirven para dar un aspecto ordenado y aclarar el funcionamiento de nuestro código. Por tanto deducimos que es una muy buena práctica de programación aprender a realizar código legible. Elementos fundamentales de un programa en C. Programas o funciones (bloques) Un bloque de código delimita un grupo de instrucciones encerrado entre llaves ({ }) y, normalmente, establece una función o un grupo de sentencias o bloque de programa. Como podemos ver en el ejemplo anterior, la función main() tiene su bloque de código encerrado entre llaves, así como la sentencia while(TRUE), que encierra sus 4 instrucciones entre llaves, como vemos en la figura 3. Además el editor asociado al compilador nos va a resaltar cuáles son las llaves de inicio y de cierre de cada bloque, lo que nos ayudará bastante en nuestro trabajo. Figura 3 Se dice que el lenguaje de programación C es un lenguaje orientado a funciones, y tanto es así que cualquier programa C debe contener como mínimo una función, la main(). Las funciones nos van a servir para una mejor estructuración de los programas ya que van a permitir definir tareas concretas que podremos ejecutar simplemente llamandolas. Elementos fundamentales de un programa en C. Las directivas de preprocesado Habitualmente se nombran como directivas para el preprocesador, dado que se evaluan antes de compilar el programa. Estas directivas en si mismas no son código ejecutable, simplemente suelen ser indicaciones sobre cómo se compilará el código. Normalmente las directivas del ANSI C o C estándar son soportadas por los compiladores C para PIC, como por ejemplo #include, #define, #if, #elif, #endif, etc. Además, un compilador especifico tendrá sus propias directivas. En temas posteriores estudiaremos a fondo cada uno de los apartados reseñados hasta ahora. 5