Lenguaje C Para Microcontroladores AVR

Share Embed Donate


Short Description

Download Lenguaje C Para Microcontroladores AVR...

Description

Lenguaje C para Microcontroladores > Los compiladores de alto nivel

Introducción Los compiladores de alto nivel Los compiladores de alto nivel son las herramientas de programación mas potentes que existen. En resumidas cuentas, el compilador traducirá el programa escrito en su lenguaje (C, Basic, Pascal u otro) en código ensamblador y luego generará los archivos de depuración (*.dbg, *.cof, *.d31, etc.) necesarios y de ejecución (*.hex). Al trabajar con un lenguaje de alto nivel el programador ya no tiene que preocuparse (o lo hace muy poco) por las características hardware ni por el ensamblador nativo de cada microcontrolador. Esto simplifica de manera asombrosa el desarrrollo de proyectos. Los compiladores se encargan de traducir el código fuente al código objeto de cada microcontrolador sin inportar mucho cuál sea. Por ejemplo, un código escrito para un PIC16F84 podría ser facilmente compilado para un PIC16F877A u otro, y viceversa. Inclusive es posible adaptar un código para un microcontrolador de otra marca, por ejemplo, de Freescale o Atmel. Eso se llama portabilidad.

¿Por qué C y no Basic? Ciertamente, el Basic es el lenguaje más fácil de aprender (no es exactamente la razón de su nombre). Y aunque los programadores en C de ordenadores miren con desdén a los que usan el Basic, en el mundo de los microcontroladores los compiladores Basic no tienen motivo para sentirse menos. De hecho, algunos pueden ser casi tan eficientes como los mejores compiladores C. Las características (muchas veces complejas) del C fueron ideadas para el trabajo con sofisticados proyectos, propios de los ordenadores. Muchas de esas características ya no resultan tan ventajosas en el limitado hardware de los microcontroladors y se convierten en prescindibles. Además, la simplicidad de los compiladores Basic para microcontroladores también permite que varios de ellos, como MBasic o PIC Basic Pro (por citar algunos) mantengan una compatibilidad entre sus códigos que no se encuentra entre los compiladores C. Ésas podrían ser razones más que convincentes para empezar por el Basic y, de hecho, es la opción que muchos han elegido. ¿Por qué nosotros no? Porque es verdad comprobable que los mejores programadores trabajan en C (no siempre exclusivamente, pero lo manejan). Por consiguiente, los proyectos más fantásticos y alucinantes que se pueden encontrar están en C. Es más, la mayoría de, por no decir todos, los programadores de Basic tarde o temprano se ven obligados a aprender el C. No sé tú, pero yo opino que esa razón pesa más. Además, dada la robustez y la aceptación del lenguaje C, se lo ha tomado como referencia para lenguajes de otros propósitos como Java, JavaScript, php o de Matlab, entre otros. Así que, el C podrá servirte para trabajar en otros campos. El programador de C podría, inclusive, aprender luego el Basic sin el menor esfuerzo; lo contrario no es cierto.

¿Qué compilador C utilizar?

No quiero burlarme de nadie, pero una vez leí en Internet el comentario de un novato: “Quiero programar microcontroladores en C. Ya descargué el Visual C++. ¿Qué más necesito?” :). Aparte del lenguaje, nada tiene que ver un compilador para ordenadores con los compiladores para µCs. Poco tiene que ver un compilador para PICs que otro para otros µCs. Inclusive, poco tiene que ver un compilador de PICs de una compañía con otro de otra compañía. Veamos grosso modo algunos aspectos de los compiladores de PICs más conocidos. Hi-tech C. Es uno de los compiladores producidos por la empresa htsoft. Es quizá el más eficiente y el que mejor soporta el lenguaje C estándar. Su entorno IDE también incluye el mejor depurador ICD. Como contraparte, su apego al hardware del µC le resta algo de portabilidad. Tampoco luce librerías incorporadas como otros productos. Pero su principal desventaja es su elevado precio. Y, por si fuera poco, el compilador para la familia de partes PIC18 se vende por separado. IAR C. Los compiladores C de la compañía iar systems tienen básicamente las mismas características mencionadas de los compiladores de htsoft, incluyendo sus propios depuradores. Así mismo, las versiones para los PIC16 y PIC18 se distribuyen por separado. Actualmente, no sé por qué, ya no está disponible la primera versión. CCS C. La empresa ccsinfo decidió dotar a sus compiladores C una capa extra que aísla al programador de los recursos intrínsecos del µC. Esto puede afectar la portabilidad de sus códigos a otros compiladores, pero resulta inmejorable, si solo se trabaja en el lenguaje de CCS C, para transportar los códigos de un PIC a otro (de cualquier familia) con un esfuerzo sin comparación. Además, incluye en un solo paquete los compiladores para los PICs de las familias Baseline, Midrange (PIC16 básicamente) y High performance (PIC18). Al igual que los softwares anteriores, sus librerías estándar, como stdlib.h, stdio.h, string.h y math.h, son muy completas y potentes; pero CCS C supera a sus rivales al incorporar librerías para controlar todos los módulos internos del PIC y también muchísimos dispositivos externos. Mikro C. La compañía Mikroelektronika vende compiladores para PICs en los lenguajes C (MikroC), Basic (MikroBasic) y Pascal (MikroPascal). Yo diría que el estilo de Mikro C se parece al de Hi-tech C y sus facilidades tratan de acercarse a las de CCS C: aunque en muchos casos aún es necesario acceder a los registros internos del PIC, cuenta con librerías para controlar sus módulos internos. También tiene una apreciable cantidad de librerías para interfacear dispositivos externos. Lo malo es que todas ellas están precompiladas y no se podrían modificar, en caso de ser necesario. Mikroelektronika y CCS también comercializan sus propias tarjetas de entrenamiento para el aprendizaje de sus productos. Para más información puedes visitar sus sitios web. MPLAB C18. Excelente compilador desarrollado por los ingenieros de Microchip. No es gratuito como el MPLAB, pero creo que es el que ofrece la versión demo más generosa: es 100 % funcional por 60 días. Lamentablemente, como sugiere su nombre, solo trabaja con las partes PIC18. Quizá lo probemos en otro momento. Otros. Aún hay otros compiladores C (como Bytecraft, BoostC y FedC) que algo menos reconocidos como los anteriores, lo que no significa que sean malos.

También he visto algunos de código abierto, pero no son buenos: la gente del GNU trabaja más con el AVR GCC, un “Señor Compilador”. Es uno de los pocos casos donde el software libre supera a los comerciales. Como se puede entrever, está orientado a los microcontroladores AVR, de Atmel. Es, además, el compilador más difícil de todos; por eso lo estudiaremos en el Módulo 4. En cuanto a cuál compilador usar: la idea de este curso no es aprender a programar con un compilador en particular, y tampoco pretendo promocionar alguno. Después de todo, una victoria depende más de la habilidad guerrero que de su espada. He visto “super programas” hechos con el compilador más modesto. En este Módulo 2 uso BoostC porque es muy fácil, porque nos permitirá ver más de cerca cómo funcionan las cosas dentro del PIC y, sobre todo, porque el salto de él a otros compiladores será mucho más fácil que hacerlo al revés. En el Módulo 3 migraremos al CCS C (que además del lenguaje C usa su propio “argot”) y en el Módulo 4 trabajaremos especialmente con AVR GCC.

¡Ánimo! No es tan difícil Pienso que, comparado con el Basic para microcontroladores, el C es infinitamente más difícil de aprender. Quienes lo usan, en gran parte, son personas que han tenido experiencia programando ordenadores, personas que han estudiado más de un libro para dominarlo. Es, literalmente, como aprender un nuevo idioma, y eso no es algo que se hace de la noche a la mañana. ¿Eso no suena muy alentador? Para simplificar las cosas, en este capítulo no voy a exponer todas las reglas del lenguaje C, aunque sí la mayoría; digamos el 95 % de lo necesario. El resto: o es solo aplicable a los PCs, o son temas raros o que difieren demasiado entre de compilador a otro y conviene más revisarlos en sus respectivos manuales. También, y para ahorrar los ejemplos prácticos, asumo que no eres un novato cualquiera, asumo que conoces algo de programación (aunque sea en ensamblador), que sabes cómo usar las subrutinas, que sabes cómo emplear los bucles, que sabes lo que significa redirigir el flujo de un programa, que sabes para qué sirven las variables, etc. Si no, estarás algo perdido. Finalmente, no es necesario que te aprendas de golpe todo el capítulo; bastará con que lo leas fluidamente una primera vez y regresar luego a consultar algunos puntos de duda. La parte más complicada es Arrays y Punteros, sobre todo los punteros. Así que, ten paciencia con ellos.

Estructura de un programa en C Tomaremos en cuenta este sencillísimo ejemplo, escrito para el compilador Hitech PICC. #include

// Incluir este archivo

/* La siguiente directiva establece la Palabra de Configuración */ __CONFIG ( PWRTEN & WDTDIS & XT & UNPROTECT ); void pausa(void) { unsigned int c;

// Llave de apertura del bloque de pausa // Declarar variable c (de 16 bits)

for(c=0; c b) {

a = 0; } if(a == b) { a++; } else { b--; } while( a >= b) { a = a + b; } for(i=0; i b) a = 0; if(a == b) a++; else b--; while( a >= b) a = a + b; for(i=0; i Desplazamiento a la derecha Ejemplos: char m; int n; m m m m n n m m m

= = = = = = = = =

0x48; m & 0x0F; m | 0x24; m & 0b11110000; 0xFF00; ~n; m | 0b10000001; m & 0xF0; m ^ 0b00110000;

m = 0b00011000; m = m >> 2; n = 0xFF1F; n = n y < >= . Nota: no debe haber ningún espacio entre el operador y el signo igual. Ejemplos: int a; a += 50; a += 20; a *= 2; a &= 0xF0; a
View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF