Aprendiendo a programar Microcontroladores PIC en Lenguaje C con CCS

Por Andrés Raúl Bruno Saravia

Entrega Nº 4.
Se dice que el lenguaje C es un lenguaje de nivel medio. La razón de esta indicación está en que en C se pueden crear programas que manipulan la máquina casi como lo hace el lenguaje Ensamblador, pero utilizando una sintaxis que se asemeja más a los lenguajes de alto nivel. De los lenguajes de alto nivel toma las estructuras de control que permiten programar de forma estructurada. Al tener características de los lenguajes de bajo nivel se puede tomar el control absoluto del microcontrolador. Además tiene atajos que gustan mucho a los programadores al tener una sintaxis menos restrictiva que lenguajes como Pascal por ejemplo, lo que le convierte en el lenguaje idóneo para crear cualquier tipo de aplicación. Sus características básicas son: • • • • • Es un lenguaje estructurado y modular. Lo que facilita su compresión y escritura Es un lenguaje que incorpora manejo de estructuras de bajo nivel (punteros, bits), lo que le acerca a los lenguajes de segunda generación Permite utilizar estructuras de datos complejas (arrays, pilas, colas, textos,...) Es un lenguaje compilado Permite crear todo tipo de aplicaciones

¿Cual es estructura de un programa en Lenguaje C?
Un programa en C consta de una o más funciones, las cuales están compuestas de diversas sentencias o instrucciones. Una sentencia indica una acción a realizar por parte del programa. Una función no es más que (por ahora) un nombre con el que englobamos a las sentencias que posee a fin de poder invocarlas mediante dicho nombre.

necesitamos incluir esos archivos en nuestro código mediante una sentencia especial #include . } } . Una directiva de preprocesador es una instrucción para el compilador con el que trabajamos.NOWDT.h En todos los lenguajes de programación. es la que contiene las etiquetas de todos los registros de funciones especiales del MCU PIC que hayamos seteado en el proyecto. En el caso de CCS esta librería está disponible en la cabecera 16Fxxx. De esta forma en CCS el código de este programa es: #include <18f14k50. delay_ms(500). que en realidad es una directiva de preprocesador.NOPLLEN. Como a veces las funciones se almacenan en archivos externos. Esos símbolos permiten delimitar bloques en el código. delay_ms(500). el primer programa a realizar es el famoso Hola mundo. En el lenguaje C estándar los archivos de cabecera tienen extensión h.NOLVP. Una de las librerías más utilizadas en los programas. output_low(LED1).CPUDIV1. El uso es: #include <cabeceraDeArchivoExterno> La directiva #include permite indicar un archivo de cabecera en el que estará incluida la función que utilizamos.h> #use delay(crystal=12000000)// #fuses HS.NODEBUG. El nombre de la función puede ser invocado desde otras sentencias simplemente poniendo como sentencia el nombre de la función.MCLR #define LED1 PIN_B4 void main(void) { setup_adc_ports(NO_ANALOGS).NOBROWNOUT.La idea es: parámetros nombreDeFunción(parámetros) { Sentencias. un programa que escribe este texto en pantalla.PUT. este programa se traduce en hacer titilar un led. En el mundo de los microcontroladores PIC. Los archivos de cabecera son los que permiten utilizar funciones externas (o librerías) en nuestro programa. } Los símbolos { y } indican el inicio y el final de la función. while(1) { output_high(LED1).

conceptualmente . Los nombres que pongamos nosotros también conviene ponerles en minúsculas ya que el código es mucho más legible así.el programa principal. que en principio devuelven un valor. No es lo mismo main que MAIN. La idea directriz de C es la definición de procedimientos (funciones). todas las definiciones que puedan hacerse no serán concretas. Ahora bien al escribir sentencias hay que tener en cuenta las siguientes normas: (1) Toda sentencia en C termina con el símbolo "punto y coma" (. se requiere un mínimo conocimiento de sus fundamentos antes de poner las manos sobre el teclado. es una entidad con ciertas características generales. Un entero. también es en C una función (la más externa).) (2) Los bloques de sentencia empiezan y terminan delimitados con el símbolo de llave ({ y }). A está función le antecede y precede la palabra void. pues son adaptables de acuerdo con la implementación. En el caso de crear un programa ejecutable. Tan importante como saber escribir sentencias es utilizar los comentarios. su valor es devuelto al sistema operativo como código de conclusión del programa. Esas líneas se utilizan para documentar el programa. Esta labor de documentación es fundamental. pero su implementación diferirá en distintos equipos. de otro modo una persona que modifique el código de otra lo tendría muy complicado. Todas las palabras claves de C están en minúsculas. En este sentido. Incidentalmente. En este aspecto es particularmente importante comprender los diferentes tipos de datos y las reglas que rigen su operación.¿Cuáles son los elementos de un programa en C? Los programas en C se basan en sentencias las cuales siempre se incluyen dentro de una función. Ante todo. ¿Qué es un comentario? Se trata de texto que es ignorado por el compilador al traducir el código. por ejemplo. C está diseñado con vistas a la compatibilidad. . Todavía es más importante cuando el código va a ser tratado por otras personas. esas sentencias están dentro de la función main. Así { significa inicio y } significa fin (3) En C hay distinción entre mayúsculas y minúsculas. De otro modo el código se convierte en ilegible incluso para el programador que lo diseñó. Lo que para nosotros es . En C los comentarios se delimitan entre los símbolos /* y */ para los bloque y // para las lineas // Esto es un comentario usado para las líneas /* Esto es un comentario el compilador hará caso omiso de este texto*/ ¿Qué debemos considerar como importante en C? C no es un lenguaje dócil para enfrentarlo intuitivamente por primera vez.

cada variable tiene un rango de visibilidad (procedimientos en los que es reconocida). al terminarse un procedimiento. C acepta sólo ciertos caracteres como significativos. Existencia: relacionado con la anterior característica. los dígitos.z Dígitos: 0 – 9 Guión bajo: _ Coma . simbolizadas mediante datos alfanuméricos (cuyas reglas de construcción trataremos más adelante). que depende de cómo se la haya declarado. y el guión bajo (underscore: ‘_’).) que no serán analizadas por C. conceptos con los que supondremos que el lector está familiarizado. de A a Z). etc. Visibilidad: en un programa C. Toda cadena alfanumérica con significación en C está compuesta exclusivamente por estos caracteres. Ellos se emplean como delimitadores. es posible que el contenido de una variable perdure. El segundo incluye todos los caracteres representables. Mayúsculas: A . presentan características que será muy importante considerar: • • • Tipo de dato: cada variable (también las constantes) está caracterizada por el tipo de dato que representa. Sin embargo. nombres de archivo. Punto y coma . En todos los casos. por ejemplo. Las variables. Los caracteres a los que C asigna especial significado se pueden clasificar en alfanuméricos y signos especiales. mayúsculas y minúsculas. otros caracteres pueden formar parte de expresiones literales (constantes literales. Dos puntos : Signo de interrogación ? Signo de admiración ! Comilla simple ‘ Comilla doble “ Barra vertical | Barra / Barra invertida \ Tilde ~ Signo más + Signo menos Paréntesis izquierdo ( Paréntesis derecho ) Corchete izquierdo [ Corchete derecho ] Llave izquierda { Llave derecha { Signo Mayor > Signo Menor < Signo igual = Asterisco * Ampersand & Porciento % Caret ^ . Punto . las mayúsculas son consideradas distintas de las minúsculas. operadores. o signos especiales. Los signos especiales son los listados a continuación. Los caracteres alfanuméricos incluyen las letras (alfabeto inglés. o que se pierda.C maneja los datos en forma de variables y constantes.Z Minúsculas: a . ¿Cuál es el grupo de caracteres de C? C emplea dos conjuntos de caracteres: • • El primero de ellos incluye todos los caracteres que tienen algún significado para el compilador.

el valor es un entero positivo en el rango 0 a 255. Sólo pueden contener letras y números. hasta definir el tipo de una variable) y tienen un especial significado para el compilador es por ello que no pueden usarse como identificadores: auto break case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while ¿Cuáles son los tipos de datos básicos que maneja CCS? El estándar Ansi define un conjunto de tipos básicos y su tamaño mínimo. Las palabras reservadas o también conocidas como “palabras claves” sirven para indicar al microcontrolador que realice una tarea muy determinada (desde evaluar una comparación. las mayúsculas se usan para las constantes. Máxima longitud: 32 caracteres. dsPIC30 y dsPIC33) : . etc. sin embargo para el compilador CCS en 8 bits (PCB. etc. No se deben confundir con palabras reservadas de C. ni main. Deben comenzar con una letra. pero no caracteres especiales. constantes. En distintas implementaciones del lenguaje C estos tamaños puede cambiar. En CCS los tamaños están definidos por el ancho del bus de datos que posee el microcontrolador PIC. Como norma se utilizan las minúsculas. así por ejemplo: el int se define en Ansi C como un tipo de dato que almacena enteros en un rango de –32767 hasta +32767. de esta forma los tamaños para los micros de 8 bits (PIC10. (underscore).) y hay diferencias entre mayúsculas y minúsculas.PCM y PCH).PIC12 y PIC16) no son iguales al de los micros de 16 bits de datos (PIC24. por ejemplo no puede llamarse int. (una variable.¿Qué es un identificador? Los identificaremos se utilizan para identificar. salvo el guión bajo. funciones. (valga la redundancia): variables.

dsPIC30 y dsPIC33 TIPO ANCHO EN BITS char (carácter) 8 int (entero) 16 long(entero largo) 32 long long (entero extra largo)64 float (real) 32 double 64 short 8 void 0 BYTES 1 2 4 8 4 8 1 0 BYTES 1 1 2 4 4 0 0 A diferencia del compilador ANSI C CCS tiene sus tipos de datos predefinidos sin signo.PIC16 y PIC18 TIPO ANCHO EN BITS char (carácter) 8 int (entero) 8 long(entero largo) 16 long long (entero extra largo)32 float (real) 32 short 1 void 0 Micros PIC24. PIC12. estos pueden ser los siguientes: OPERADOR + * / % -++ ACCIÓN Resta Suma Multiplicación división. es decir que solo podemos almacenar valores positivos excepto que especifiquemos antes del tipo la palabra clave signed ¿Qué son los operadores aritméticos en C ? Son usados para definir una operación aritmética entre distintos operandos. (sólo para enteros) Resto de la división entera Decremento Incremento .Micros PIC10.

. generalmente se usan dentro de las estructuras condicionales que luego veremos. B toma el valor de 8. B = A++. B = ++A. OPERADOR && || ! ACCIÓN And Or Not La operación lógica no se realiza a nivel bit entre los operandos. B toma el valor de 9. Pero de plantearse lo siguiente: A = 8.Los operadores de decremento e incremento equivalen a: a = a + 1 = a++ a=a-1=a-En caso de presentarse a con el operador delante: A = 8. primero ocurre la asignación y luego el incremento en A. ejemplo (condición 1) && (condición 2) establece que si se cumple la condición 1 y la condición 2. O sea que en este último caso. Los utilizados son los siguientes: OPERADOR > >= < <= == != ACCIÓN Mayor que Mayor igual que Menor que Menor igual que Igual que Distinto que ¿Qué son los operadores lógicos? Estos operadores se usan para establecer una relación lógica entre 2 comparaciones. sino que establece una relación entre condiciones comparativas en las que participan los operandos. ¿Para qué son los operadores de relación? Estos operadores se usan para establecer una relación comparativa entre dos operandos.

cualquier valor distinto de 0 es VERDADERO... Continuará.En C. Bueno hasta aquí hemos llegado con el artículo... FALSO es 0 (cero).. nos encontraremos en nuestra próxima nota. ..