todo sobre pic en español

65
Capitulo 2 - Programación de los microcontroladores Usted seguramente sabe que no es suficiente sólo conectar el microcontrolador a los otros componentes y encender una fuente de alimentación para hacerlo funcionar, ¿verdad? Hay que hacer algo más. Se necesita programar el microcontrolador. Si cree que esto es complicado, está equivocado. Todo el procedimiento es muy simple. Basta con leer el texto para entender de lo que estamos hablando. 2.1 LENGUAJES DE PROGRAMACIÓN 2.2 CARACTERÍSTICAS PRINCIPALES DEL MIKROC 2.3 TIPOS DE DATOS EN MIKROC 2.4 VARIABLES Y CONSTANTES 2.5 OPERADORES 2.6 ESTRUCTURAS DE CONTROL 2.7 TIPOS DE DATOS AVANZADOS 2.8 FUNCIONES 2.9 CARACTERÍSTICAS PRINCIPALES DEL PREPROCESADOR 2.10 MIKROC PRO FOR PIC 2.11 PROGRAMAR LOS PIC UTILIZANDO MIKROC PRO FOR PIC 2.1 LENGUAJES DE PROGRAMACIÓN El microcontrolador ejecuta el programa cargado en la memoria Flash. Esto se denomina el código ejecutable y está compuesto por una serie de ceros y unos, aparentemente sin significado. Dependiendo de la arquitectura del microcontrolador, el código binario está compuesto por palabras de 12, 14 o 16 bits de anchura. Cada palabra se interpreta por la CPU como una instrucción a ser ejecutada durante el funcionamiento del microcontrolador. Todas las instrucciones que el microcontrolador puede reconocer y ejecutar se les denominan colectivamente Conjunto de instrucciones. Como es más fácil trabajar con el sistema de numeración hexadecimal, el código ejecutable se representa con frecuencia como una serie de los números hexadecimales denominada código Hex. En los microcontroladores PIC con las palabras de programa de 14 bits de anchura, el conjunto de instrucciones tiene 35 instrucciones diferentes.

Upload: brayan-tupa

Post on 13-Sep-2015

29 views

Category:

Documents


1 download

DESCRIPTION

este documento nos enseña a manejar un pc

TRANSCRIPT

Capitulo 2 - Programacin de los microcontroladoresUsted seguramente sabe que no es suficiente slo conectar el microcontrolador a los otros componentes y encender una fuente de alimentacin para hacerlo funcionar, verdad? Hay que hacer algo ms. Se necesita programar el microcontrolador. Si cree que esto es complicado, est equivocado. Todo el procedimiento es muy simple. Basta con leer el texto para entender de lo que estamos hablando. 2.1 LENGUAJES DE PROGRAMACIN 2.2 CARACTERSTICAS PRINCIPALES DEL MIKROC 2.3 TIPOS DE DATOS EN MIKROC 2.4 VARIABLES Y CONSTANTES 2.5 OPERADORES 2.6 ESTRUCTURAS DE CONTROL 2.7 TIPOS DE DATOS AVANZADOS 2.8 FUNCIONES 2.9 CARACTERSTICAS PRINCIPALES DEL PREPROCESADOR 2.10 MIKROC PRO FOR PIC 2.11 PROGRAMAR LOS PIC UTILIZANDO MIKROC PRO FOR PIC2.1 LENGUAJES DE PROGRAMACIN

El microcontrolador ejecuta el programa cargado en la memoria Flash. Esto se denomina el cdigo ejecutable y est compuesto por una serie de ceros y unos, aparentemente sin significado. Dependiendo de la arquitectura del microcontrolador, el cdigo binario est compuesto por palabras de 12, 14 o 16 bits de anchura. Cada palabra se interpreta por la CPU como una instruccin a ser ejecutada durante el funcionamiento del microcontrolador. Todas las instrucciones que el microcontrolador puede reconocer y ejecutar se les denominan colectivamente Conjunto de instrucciones. Como es ms fcil trabajar con el sistema de numeracin hexadecimal, el cdigo ejecutable se representa con frecuencia como una serie de los nmeros hexadecimales denominada cdigo Hex. En los microcontroladores PIC con las palabras de programa de 14 bits de anchura, el conjunto de instrucciones tiene 35 instrucciones diferentes.

LENGUAJE ENSAMBLADOR

Como el proceso de escribir un cdigo ejecutable era considerablemente arduo, en consecuencia fue creado el primer lenguaje de programacin denominado ensamblador (ASM). Siguiendo la sintaxis bsica del ensamblador, era ms fcil escribir y comprender el cdigo. Las instrucciones en ensamblador consisten en las abreviaturas con significado y a cada instruccin corresponde una localidad de memoria. Un programa denominado ensamblador compila (traduce) las instrucciones del lenguaje ensamblador a cdigo mquina (cdigo binario).HEste programa compila instruccin a instruccin sin optimizacin. Como permite controlar en detalle todos los procesos puestos en marcha dentro del chip, este lenguaje de programacin todava sigue siendo popular.Ventajas de lenguajes de programacin de alto nivelA pesar de todos los lados buenos, el lenguaje ensamblador tiene algunas desventajas: Incluso una sola operacin en el programa escrito en ensamblador consiste en muchas instrucciones, hacindolo muy largo y difcil de manejar. Cada tipo de microcontrolador tiene su propio conjunto de instrucciones que un programador tiene que conocer para escribir un programa Un programador tiene que conocer el hardware del microcontrolador para escribir un programaPrograma escrito en C (El mismo programa compilado al cdigo ensamblador):

Los lenguajes de programacin de alto nivel (Basic, Pascal, C etc.) fueron creados con el propsito de superar las desventajas del ensamblador. En lenguajes de programacin de alto nivel varias instrucciones en ensamblador se sustituyen por una sentencia. El programador ya no tiene que conocer el conjunto de instrucciones o caractersticas del hardware del microcontrolador utilizado. Ya no es posible conocer exactamente cmo se ejecuta cada sentencia, de todas formas ya no importa. Aunque siempre se puede insertar en el programa una secuencia escrita en ensamblador.Si alguna vez ha escrito un programa para un microcontrolador PIC en lenguaje ensamblador, probablemente sepa que la arquitectura RISC carece de algunas instrucciones. Por ejemplo, no hay instruccin apropiada para multiplicar dos nmeros. Por supuesto, para cada problema hay una solucin y ste no es una excepcin gracias a la aritmtica que permite realizar las operaciones complejas al descomponerlas en un gran nmero operaciones ms simples. En este caso, la multiplicacin se puede sustituir con facilidad por adicin sucesiva (a x b = a + a + a + ... + a). Ya estamos en el comienzo de una historia muy larga... No hay que preocuparse al utilizar uno de estos lenguajes de programacin de alto nivel como es C, porque el compilador encontrar automticamente la solucin a ste problema y otros similares. Para multiplicar los nmeros a y b, basta con escribir a*b.

Lenguaje CEl lenguaje C dispone de todas las ventajas de un lenguaje de programacin de alto nivel (anteriormente descritas) y le permite realizar algunas operaciones tanto sobre los bytes como sobre los bits (operaciones lgicas, desplazamiento etc.). Las caractersticas de C pueden ser muy tiles al programar los microcontroladores. Adems, C est estandarizado (el estndar ANSI), es muy portable, as que el mismo cdigo se puede utilizar muchas veces en diferentes proyectos. Lo que lo hace accesible para cualquiera que conozca este lenguaje sin reparar en el propsito de uso del microcontrolador. C es un lenguaje compilado, lo que significa que los archivos fuentes que contienen el cdigo C se traducen a lenguaje mquina por el compilador. Todas estas caractersticas hicieron al C uno de los lenguajes de programacin ms populares.

La figura anterior es un ejemplo general de lo que sucede durante la compilacin de programa de un lenguaje de programacin de alto nivel a bajo nivel.2.2 CARACTERSTICAS PRINCIPALES DEL MIKROCA continuacin vamos a presentar a los elementos principales del lenguaje mikroC desarrollado por Mikroelektronika. Este lenguaje es muy similar al C estndar, no obstante en determinados aspectos difiere del ANSI estndar en algunas caractersticas. Algunas de estas diferencias se refieren a las mejoras, destinadas a facilitar la programacin de los microcontroladores PIC, mientras que las dems son la consecuencia de la limitacin de la arquitectura del hardware de los PIC. Aqu vamos a presentar caractersticas especficas del lenguaje mikroC en la programacin de los microcontroladores PIC. El trmino C se utilizar para referirse a las caractersticas comunes de los lenguajes C y mikroC.

Este libro describe una aplicacin muy concreta del lenguaje de programacin C utilizado en el compilador mikroC PRO for PIC. En este caso, el compilador se utiliza para la programacin de los microcontroladores PIC.FASES DE COMPILACINEl proceso de compilacin consiste en varios pasos y se ejecuta automticamente por el compilador. Por con, un conocimiento bsico del funcionamiento puede ser til para entender el concepto del lenguaje mikroC.El archivo fuente contiene el cdigo en mikroC que usted escribe para programar el microcontrolador. El preprocesador se utiliza automticamente por el compilador al iniciarse el proceso de la compilacin. El compilador busca las directivas del preprocesador (que siempre empiezan por #) dentro del cdigo y modifica el cdigo fuente de acuerdo con las directivas. En esta fase se llevan a cabo inclusin de archivos, definicin de constantes y macros etc, lo que facilita el proceso. Ms tarde vamos a describir estas directivas en detalle. Elanalizador sintctico(parser) elimina toda la informacin intil del cdigo (comentarios, espacios en blanco). Luego, elcompiladortraduce el cdigo a un archivo binario denominado archivo .mcl. Elenlazador(linker) recupera toda la informacin requerida para ejecutar el programa de los archivos externos y la agrupa en un solo archivo (.dbg). Adems, un proyecto puede contener ms de un archivo fuente y el programador puede utilizar funciones predefinidas y agrupadas dentro de los archivos denominados libreras. Por ltimo, elgenerador .hexproduce un archivo .hex. Es el archivo que se va a cargar en el microcontrolador.

El proceso entero de la compilacin que incluye todos los pasos anteriormente descritos se le denominabuilding.ESTRUCTURA DE PROGRAMALa idea principal de escribir un programa en C es de romper un problema mayor en varios trozos ms pequeos. Supongamos que es necesario escribir un programa para el microcontrolador para medir la temperatura y visualizar los resultados en un LCD. El proceso de medicin se realiza por un sensor que convierte temperatura en voltaje. El microcontrolador utiliza el convertidor A/D para convertir este voltaje (valor analgico) en un nmero (valor digital) que luego se enva al LCD por medio de varios conductores. En consecuencia, el programa se divide en cuatro partes, de las que cada una corresponde a una accin especfica:1. Activar y configurar el convertidor A/D incorporado;2. Medir el valor analgico;3. Calcular temperatura; y4. Enviar los datos en el formato apropiado al LCD;Los lenguajes de programacin de alto nivel como es C le permiten solucionar este problema con facilidad al escribir cuatro funciones que se ejecutarn cclicamente sin parar.La idea general es de dividir el problema en varios trozos, de los que cada uno se puede escribir como una sola funcin. Todos los programas escritos en mikroC contienen por lo menos una funcin llamada main() que encierra entre llaves {} las sentencias a ser ejecutadas. Esto es la primera funcin a ser ejecutada al iniciarse la ejecucin de programa. Las otras funciones se pueden llamar dentro de la funcin main. En otras palabras, podemos decir que la funcin main() es obligatoria, mientras que las dems son opcionales. Si todava no ha escrito un programa en C, es probable que todo le resulte confuso. No se preocupe, acptelo tal como es por el momento y ms tarde entender la sintaxis.

Y ahora, su primer programa real! La figura muestra la estructura de programa, sealando las partes en las que consiste.

La manera de escribir el cdigo en C es muy importante. Por ejemplo, C difiere entre minsculas y maysculas, as que la funcin main() no se puede escribir MAIN() o Main(). Adems, note que dos lneas del cdigo dentro de la funcin terminan con un punto y coma. En C todas las sentencias deben terminar con un punto y coma ;, as el compilador puede aislarlas y traducirlas a cdigo mquina.

COMENTARIOSLos comentarios son las partes del programa utilizados para aclarar las instrucciones de programa o para proporcionar ms informacin al respecto. El compilador no hace caso a los comentarios y no los compila al cdigo ejecutable. Dicho de manera sencilla, el compilador es capaz de reconocer los caracteres especiales utilizados para designar dnde los comentarios comienzan y terminan y no hace nada de caso al texto entre ellos durante la compilacin. Hay dos tipos de tales caracteres. Unos designan los comentarios largos que ocupan varias lneas de programa marcados por la secuencia especial /*...*/, mientras que otros designan los comentarios cortos que caben en una sola lnea //. Aunque los comentarios no pueden afectar a la ejecucin de programa, son tan importantes como cualquier otra parte de programa. Aqu est el porqu... Con frecuencia es necesario mejorar, modificar, actualizar, simplificar un programa... No es posible interpretar incluso los programas simples sin utilizar los comentarios.2.3 TIPOS DE DATOS EN MIKROCEn el lenguaje C, los datos tienen un tipo, o sea, cada dato utilizado en el programa debe tener su tipo especificado. Esto permite al compilador conocer el tamao de dato (nmero de bytes requerido en la memoria) y su representacin. Hay varios tipos de datos que se pueden utilizar en el lenguaje de programacin mikroC dependiendo del tamao de dato y del rango de valores. La tabla muestra el rango de valores que los datos pueden tener cuando se utilizan en su forma bsica.TIPO DE DATODESCRIPCINTAMAO (NMERO DE BITS)RANGO DE VALORES

charTexto (caracteres)8de 0 a 255

intValores enteros16de -32768 a 32767

floatValores en punto flotante32de 1.1754943508210-38a 6.805647744071038

doubleValores en punto flotante de doble precisin32de 1.1754943508210-38a 6.805647744071038

*Debido a las limitaciones impuestas por el hardware del microcontrolador, es imposible alcanzar una mayor precisin de datos que la del tipo float. Por eso, el tipo double en mikroC equivale al tipo float.Al aadir un prefijo (calificador) a cualquier tipo de dato entero o carcter, el rango de sus posibles valores cambia as como el nmero de los bytes de memoria necesarios. Por defecto, los datos de tipo int son con signo, mientras que los de tipo char son sin signo. El calificador signed (con signo) indica que el dato puede ser positivo o negativo. El prefijo unsigned indica que el dato puede ser slo positivo. Note que el prefijo es opcional.TIPO DE DATOTIPO DE DATO CON PREFIJOTAMAO (NMERO DE BITS)RANGO DE VALORES

charsigned char8de -128 a 128

intunsigned int16de 0 a 65535

short int8de 0 a 255

signed short int8de -128 a 127

long int32de 0 a 4294967295

signed long int32de -2147483648 a 2147483647

Tipo entero (int)Un entero es un nmero sin parte fraccionaria que puede estar expresado en los siguientes formatos: Hexadecimal (base 16): el nmero empieza con 0x (o 0X). Los enteros hexadecimales consisten en los dgitos (de 0 a 9) y/o las letras (A, B, C,D, E, F). Por ejemplo: 0x1A. Decimal (base 10): el nmero consiste en los dgitos (de 0 a 9). El primer dgito no puede ser 0. En este formato, se puede introducir el signo de nmero (+ o -). Por ejemplo: 569, -25, +1500. Octal (base 8): los nmeros se representan a base 8 utilizando slo 8 dgitos (de 0 a 7). Los enteros octales empiezan con 0. Por ejemplo: 056. Binario: cuando un entero empieza con 0b (o 0B) se representan como una serie de bits (0 y 1). Por ejemplo: 0B100111110x11 // formato hexadecimal equivale a decimal 1711 // formato decimal-152 // formato decimal011 // formato octal equivale a decimal 9 0b11 // formato binario equivale a decimal 3Tipo punto flotante (float)El tipo punto flotante (float) se utiliza para los nmeros reales con el punto decimal. Los datos de tipo float se pueden representar de varias maneras. Un dato float es siempre consigno (signed).0. // = 0.0-1.23 // = -1.2323.45e6 // = 23.45 * 10^62e-5 // = 2.0 * 10^-53E+10 // = 3.0 * 10^10.09E34 // = 0.09 * 10^34Tipo carcter (char)El tipo char es considerado como un entero por el compilador. No obstante, se utiliza normalmente para los datos de tipo carcter. Un dato de tipo carcter est encerrado entre comillas y codificado en un carcter ASCII.59 // entero'p' // carcter ASCII 'p'Una secuencia de caracteres es denominada cadena (string). Las cadenas estn encerradas entre comillas dobles, por ejemplo:"Presione el botn RA0"2.4 VARIABLES Y CONSTANTESDefinicionesUna variable es un objeto nombrado capaz de contener un dato que puede ser modificado durante la ejecucin de programa. En C, las variables tienen tipo, que significa que es necesario especificar el tipo de dato que se le asigna a una variable (int, float etc.). Las variables se almacenan en la memoria RAM y el espacio de memoria que ocupan (en bytes) depende de su tipo./* dos lneas de programa consecutivas. En la primera lnea del programase define el tipo de variable */

int a = 1000; // Variable a es de tipo int y equivale a 1000a = 15; // a equivale a 15Una constante tiene las mismas caractersticas que una variable excepto el hecho de que su valor asignado no puede ser cambiado durante la ejecucin de programa. A diferencia de las variables, las constantes se almacenan en la memoria Flash del microcontrolador para guardar el mayor espacio posible de memoria RAM. El compilador las reconoce por el nombre y el prefijo const. En mikroC, el compilador reconoce automticamente el tipo de dato de una constante, as que no es necesario especificar el tipo adicionalmente./* dos lneas de programa consecutivas */

const A = 1000 // el valor de la constante A est definidoA = 15; // ERROR! no se puede modificar el valor de la constanteCada variable o constante debe tener un identificador que lo distingue de otras variables y constantes. Refirase a los ejemplos anteriores, a y A son identificadores.Reglas para nombrarEn mikroC, los identificadores pueden ser tan largos como quiera. Sin embargo, hay varias restricciones: Los identificadores pueden incluir cualquiera de los caracteres alfabticos A-Z (a-z), los dgitos 0-9 y el carcter subrayado '_'. El compilador es sensible a la diferencia entre minsculas y maysculas. Los nombres de funciones y variables se escriben con frecuencia con minsculas, mientras que los nombres de constantes se escriben con maysculas. Los identificadores no pueden empezar con un dgito. Los identificadores no pueden coincidir con las palabras clave del lenguaje mikroC, porque son las palabras reservadas del compilador.El compilador mikroC reconoce 33 palabras clave:MIKROC - PALABRAS CLAVE

absolutedataifreturntypedef

asmdefaultinlinerxtypeid

atdeleteintsfrtypename

autodoioshortunion

bitdoublelongsignedunsigned

boolelsemutablesizeofusing

breakenumnamespacestaticvirtual

caseexplicitoperatorstructvoid

catchexternorgswitchvolatile

charfalsepascaltemplatewhile

classfloatprivatethis

codeforprotectedthrow

constfriendpublictrue

continuegotoregistertry

Ejemplos de los identificadores vlidos e invlidos:temperatura_V1 // OKPresin // OKno_corresponder // OKdat2string // OKSuM3 // OK_vtexto // OK7temp // NO -- no puede empezar con un nmero%ms_alto // NO -- no pueden contener caracteres especialesif // NO -- no puede coincidir con una palabra reservadaj23.07.04 // NO -- no puede contener caracteres especiales (punto)nombre de variable // NO -- no puede contener espacio en blancoDeclaracin de variablesCada variable debe ser declarada antes de ser utilizada en el programa. Como las variables se almacenan en la memoria RAM, es necesario reservar el espacio para ellas (uno, dos o ms bytes). Al escribir un programa, usted sabe qu tipo de datos quiere utilizar y qu tipo de datos espera como resultado de una operacin, mientras que el compilador no lo sabe. No se olvide de que el programa maneja las variables con los nombres asignados. El compilador las reconoce como nmeros en la memoria RAM sin conocer su tamao y formato. Para mejorar la legibilidad de cdigo, las variables se declaran con frecuencia al principio de las funciones: variable;Es posible declarar ms de una variable de una vez si tienen el mismo tipo. variable1, variable2, variable3;Aparte del nombre y del tipo, a las variables se les asignan con frecuencia los valores iniciales justamente enseguida de su declaracin. Esto no es un paso obligatorio, sino una cuestin de buenas costumbres. Se parece a lo siguiente:unsigned int peso; // Declarar una variable llamada pesopeso = 20; // Asignar el valor 20 a la variable pesoUn mtodo ms rpido se le denomina declaracin con inicializacin (asignacin de los valores iniciales):unsigned int peso = 20; // peso est declarado y su valor es 20Si hay varias variables con el mismo valor inicial asignado, el proceso se puede simplificar:unsigned int peso1 = peso2 = peso3 = 20;int valor_inicial = un_mnimo_de_petrleo = 0; Tenga cuidado de no declarar la misma variable otra vez dentro de la misma funcin. Puede modificar el contenido de una variable al asignarle un nuevo valor tantas veces que quiera Al declarar una variable, siempre piense en los valores que la variable tendr que contener durante la ejecucin de programa. En el ejemplo anterior, peso1 no se puede representar con un nmero con punto decimal o un nmero con valor negativo.Declaracin de constantesSimilar a las variables, las constantes deben ser declaradas antes de ser utilizadas en el programa. En mikroC, no es obligatorio especificar el tipo de constante al declararla. Por otra parte, las constantes deben ser inicializadas a la vez que se declaran. El compilador reconoce las constantes por su prefijo const utilizado en la declaracin. Dos siguientes declaraciones son equivalentes:const int MINIMUM = -100; // Declarar constante MINIMUMconst MINIMUM = -100; // Declarar constante MINIMUMLas constantes pueden ser de cualquier tipo, incluyendo cadenas:const T_MAX = 3.260E1; // constante de punto flotante T_MAXconst I_CLASS = 'A'; // constante carcter I_CLASSconst Mensaje = "Presione el botn IZQUIERDA"; // constante de cadena MensajeLas constantes de enumeracin son un tipo especial de constantes enteras que hace un programa ms comprensible al asignar los nmeros ordinales a las constantes. Por defecto, el valor 0 se asigna automticamente a la primera constante entre llaves, el valor 1 a la segunda, el valor 2 a la tercera etc.enum surtidores {AGUA,GASLEO,CLORO}; // AGUA = 0; GASLEO = 1; CLORO = 2Es posible introducir directamente el valor de una constante dentro de la lista de enumeraciones. El incremento se detiene al asignar un valor a un elemento de matriz, despus se reinicia a partir del valor asignado. Vea el siguiente ejemplo:enum surtidores {AGUA,GASLEO=0,CLORO}; // AGUA = 0; GSOLEO = 0; CLORO = 1Las constantes de enumeracin se utilizan de la siguiente manera:int Velocidad_de_ascensorenum motor_de_ascensor {PARADA,INICIO,NORMAL,MXIMO};Velocidad_de_ascensor = NORMAL; // Velocidad_de_ascensor = 2Definir los nuevos tipos de datosLa palabra clavetypedefle permite crear con facilidad los nuevos tipos de datos.typedef unsigned int positivo; // positivo es un sinnimo para el tipo sin signo intpositivo a,b; // Variables a y b son de tipo positivoa = 10; // Variable a equivale a 10b = 5; // Variable b equivale a 5mbito de variables y constantesUna variable o una constante es reconocida por el compilador en base de su identificador. Un identificador tiene significado si el compilador lo puede reconocer. El mbito de una variable o una constante es el rango de programa en el que su identificador tiene significado. El mbito es determinado por el lugar en el que se declara una variable o una constante. Intentar acceder a una variable o una constante fuera de su mbito resulta en un error. Una variable o una constante es invisible fuera de su mbito. Todas las variables y constantes que pensamos utilizar en un programa deben ser declaradas anteriormente en el cdigo. Las variables y constantes pueden ser globales o locales. Una variable global se declara en el cdigo fuente, fuera de todas las funciones, mientras que una variable local se declara dentro del cuerpo de la funcin o dentro de un bloque anidado en una funcin.

A las variables globales se les puede acceder de cualquiera parte en el cdigo, an dentro de las funciones con tal de que sean declaradas. El mbito de una variable global est limitado por el fin del archivo fuente en el que ha sido declarado.El mbito de variables locales est limitado por el bloque encerrado entre llaves {} en el que han sido declaradas. Por ejemplo, si estn declaradas en el principio del cuerpo de funcin (igual que en la funcinmain) su mbito est entre el punto de declaracin y el fin de esa funcin. Refirase al ejemplo anterior. A las variables locales declaradas enmain()no se les puede acceder desde laFuncin_1y al revs.Un bloque compuesto es un grupo de declaraciones y sentencias (que pueden ser bloques tambin) encerradas entre llaves. Un bloque puede ser una funcin, una estructura de control etc. Una variable declarada dentro de un bloque se considera local, o sea, existe slo dentro del bloque. Sin embargo, las variables declaradas fuera del mbito todava son visibles.Aunque las constantes no pueden ser modificadas en el programa, siguen las mismas reglas que las variables. Esto significa que son visibles dentro de su bloque a excepcin de las constantes globales (declaradas fuera de cualquier funcin). Las constantes se declaran normalmente en el inicio del cdigo fuera de cualquier funcin (como variables globales).Clases de almacenamientoLas clases de almacenamiento se utilizan para definir el mbito y la vida de variables, constantes y funciones dentro de un programa. En mikroC se pueden utilizar diferentes clases de almacenamiento: autoes una clase de almacenamiento por defecto para las variables locales, as que se utiliza raramente. Se utiliza para definir que una variable local tiene duracin local. La clase de almacenamiento auto no se puede utilizar con variables globales.

statices una clase de almacenamiento por defecto para las variables globales. Especifica que una variable es visible dentro del archivo. A las variables locales declaradas con el prefijostaticse les puede acceder dentro del archivo fuente (o sea se comportan como variables globales). extern: la palabra claveexternse utiliza cuando el programa est compuesto por diferentes archivos fuente. Esto le permite utilizar una variable, una constante o una funcin declarada en otro archivo. Por supuesto, para compilar y enlazar este archivo correctamente, el mismo debe ser incluido en su proyecto. En los siguientes ejemplos, el programa consiste en dos archivos:File_1 y File_2. ElFile_1utiliza una variable y una funcin declaradas enFile_2.File 1:extern int cnt; // Variable cnt es visible en File_1extern void hello(); // Funcin hello()se puede utilizar en File_1

void main(){ PORTA = cnt++; // Cualquier modificacin de cnt en File_1 ser visible en File_2 hello(); // Funcin hello()se puede llamar desde aqu}File 2:int cnt = 0; void hello();

void hello(){ // Modificaciones que afectan a la. // cnt en File_1 son visibles aqu ..}2.5 OPERADORESUn operador es un smbolo que denota una operacin aritmtica, lgica u otra operacin particular. Dicho de manera sencilla, varias operaciones aritmticas y lgicas se realizan por medio de los operadores. Hay ms de 40 operaciones disponibles en el lenguaje C, pero se utiliza un mximo de 10-15 de ellas en prctica. Cada operacin se realiza sobre uno o ms operandos que pueden ser variables o constantes. Adems, cada operacin se caracteriza por la prioridad de ejecucin y por la asociatividad.OPERADORES ARITMTICOSLos operadores aritmticos se utilizan en las operaciones aritmticas y siempre devuelven resultados numricos. Hay dos tipos de operadores, los unitarios y los binarios. A diferencia de las operaciones unitarias que se realizan sobre un operando, las operaciones binarias se realizan sobre dos operandos. En otras palabras, se requieren dos nmeros para ejecutar una operacin binaria. Por ejemplo: a+b o a/b.OPERADOROPERACIN

+Adicin

-Resta

*Multiplicacin

/Divisin

%Resto de la divisin

int a,b,c; // Declarar 3 enteros a, b, ca = 5; // Inicializar ab = 4; // Inicializar bc = a + b; // c = 9c = c%2; // c = 1. Esta operacin se utiliza con frecuencia // para comprobar la paridad. En este caso, el // resultado es 1 lo que significa que la variable // es un nmero imparoOPERADORES DE ASIGNACINHay dos tipos de asignacin en el lenguaje C: Los operadores simples asignan los valores a las variables utilizando el carcter comn '='. Por ejemplo: a =8 Las asignaciones compuestas son especficas para el lenguaje C. Consisten en dos caracteres como se muestra en la tabla a la derecha. Se utilizan para simplificar la sintaxis y habilitar la ejecucin ms rpida.OPERADOREJEMPLO

ExpresinEquivalente

+=a += 8a = a + 8

-=a -= 8a = a - 8

*=a *= 8a = a * 8

/=a /= 8a = a / 8

%=a %= 8a = a % 8

int a = 5; // Declarar e inicializar la variable aa += 10; // a = a + 10 = 15OPERADORES DE INCREMENTO Y DECREMENTOLas operaciones de incremento y decremento por 1 se denotan con "++" y "--". Estos caracteres pueden preceder o seguir a una variable. En primer caso (++x), la variable x ser incrementada por 1 antes de ser utilizada en la expresin. De lo contrario, la variable se utilizar en la expresin antes de ser aumentada por 1. Lo mismo se aplica a la operacin de decremento.OPERADOREJEMPLODESCRIPCIN

++++aVariable "a" es incrementada por 1

a++

----bVariable "a" es decrementada por 1

b--

int a, b, c;a = b = 5;c = 1 + a++; // c = 6b = ++c + a // b = 7 + 6 = 13OPERADORES RELACIONALESLos operadores relacionales se utilizan en comparaciones con el propsito de comparar dos valores. En mikroC, si una expresin es evaluada como falsa (false), el operador devuelve 0, mientras que si una oracin es evaluada como verdadera (true), devuelve 1. Esto se utiliza en expresiones tales como si la expresin es evaluada como verdadera, entonces...OPERADORDESCRIPCINEJEMPLOCONDICIN DE VERACIDAD

>mayor queb > asibes mayor quea

>=mayor o igual quea >= 5siaes mayor o igual que5

de izquierda a derecha

< >=de izquierda a derecha

== !=de izquierda a derecha

&de izquierda a derecha

^de izquierda a derecha

|de izquierda a derecha

&&de izquierda a derecha

||de derecha a izquierda

?:de derecha a izquierda

Baja= += -= *= /= /= &= ^= |= =de izquierda a derecha

int a, b, res;a = 10;b = 100;res = a*(a + b); // resultado = 1100res = a*a + b; // resultado = 200CONVERSIN DE TIPOS DE DATOSAlgunas operaciones implican conversin de datos. Por ejemplo, si divide dos valores enteros, hay una alta posibilidad de que el resultado no sea un entero. El mikroC realiza una conversin automtica cuando se requiera.Si dos operandos de tipo diferente se utilizan en una operacin aritmtica, el tipo de operando de la prioridad ms baja se convierte automticamente en el tipo de operando de la prioridad ms alta. Los tipos de datos principales se colocan segn el siguiente orden jerrquico:

La autoconversin se realiza asimismo en las operaciones de asignacin. El resultado de la expresin de la derecha del operador de la asignacin siempre se convierte en el tipo de la variable de la izquierda del operador. Si el resultado es de tipo de la prioridad ms alta, se descarta o se redondea para coincidir con el tipo de la variable. Al convertir un dato real en un entero, siempre se descartan los nmeros que siguen al punto decimal.int x; // A la variable x se le asigna el tipo integer (un entero)x = 3; // A la variable x se le asigna el valor 3x+ = 3.14; // El valor 3.14 se agrega a la variable x al // realizar la operacin de asignacin

/* El resultado de la adicin es 6 en vez de 6.14, como era de esperar.Para obtener el resultado esperado sin descartar los nmeros que siguen alpunto decimal, se debe declarar x como un punto flotante. */Para realizar una conversin explcita, antes de escribir una expresin o una variable hay que especificar el tipo de resultado de operacin entre parntesis.double distancia, tiempo, velocidad;distancia = 0.89;tiempo = 0.1;velocidad = (int)(a/b); // c = (int)8.9 = 8.0velocidad = ((int)a)/b; // c = 0/0.1 = 0.02.6 ESTRUCTURAS DE CONTROLESTRUCTURAS CONDICIONALESLas condiciones son ingredientes comunes de un programa. Las condiciones permiten ejecutar una o varias sentencias dependiendo de validez de una expresin. En otras palabras,Si se cumple la condicin (...), se debe hacer (...). De lo contrario, si la condicin no se cumple, se debe hacer (...). Los operandos condicionalesif-elseyswitchse utilizan en las operaciones condicionales. Una sentencia condicional puede ser seguida por una sola sentencia o por un bloque de sentencias a ser ejecutadas.OPERADOR CONDICIONAL if-elseEl operadorifse puede utilizar solo o asociado al operadorelse (if-else).Ejemplo del operadorif:if(expresin) operacin;Si el resultado de la expresin encerrada entre parntesis es verdadero (distinto de 0) la operacin se realiza y el programa contina con la ejecucin. Si el resultado de laexpresines falso (0), laoperacinno se realiza y el programa contina inmediatamente con la ejecucin.Como hemos mencionado, la otra forma combina tanto el operador if como el else:if(expresin) operacin1 else operacin2;Si el resultado de laexpresines verdadero (distinto de 0), se realizaoperacin1, de lo contrario se realiza laoperacin2. Despus de realizar una de las operaciones, el programa contina con la ejecucin.La sentenciaif-elsese parece a lo siguiente:if(expresin)operacin1elseoperacin2Si operacin1 u operacin2 est compuesta, escriba una lista de sentencias encerradas entre llaves. Por ejemplo:if(expresin) {... //... // operacin1...} //elseoperacin2El operadorif-elsese puede sustituir por el operador condicional '?:':(expresin1)? expresin2 : expresin3Si el valor de laexpresin1es distinto de 0 (verdadero), el resultado de la expresin entera ser equivalente al resultado obtenido de laexpresin2. De lo contrario, si laexpresin1es 0 (falso), el resultado de la expresin entera ser equivalente al resultado obtenido de laexpresin3. Por ejemplo:maximum = (a>b)? a : b // A la variable maximum se le asigna el // valor de la variable mayor(a o b)Operador SwitchA diferencia de la sentenciaif-elseque selecciona entre dos opciones en el programa, el operadorswitchpermite elegir entre varias opciones. La sintaxis de la sentenciaswitches:switch (selector) // Selector es de tipo char o int{case constante1: operacin1 // El grupo de operadores que se ejecutan si ... // el selector y la constante1 son equivalentes break; case constante2:

operacin2 // El grupo de operadores se ejecuta si ... // el selector y la constante2 son equivalentes

break; ... default: operacin_esperada // El grupo de operadores que se ejecuta si ... // ninguna constante equivale al selector break;}La operacin switch se ejecuta de la siguiente manera: primero se ejecuta el selector y se compara con la constante1. Si coinciden, las sentencias que pertenecen a ese bloque se ejecutan hasta llegar a la palabra clave break o hasta el final de la operacin switch. Si no coinciden, el selector se compara con la constante2. Si coinciden, las sentencias que pertenecen a ese bloque se ejecutan hasta llegar a la palabra clave break etc. Si el selector no coincide con ninguna constante, se ejecutarn las operaciones que siguen al operador default.Tambin es posible comparar una expresin con un grupo de constantes. Si coincide con alguna de ellas, se ejecutarn las operaciones apropiadas:switch (das) // La variable das representa un da de la semana.{ // Es necesario determinar si es un da laborable o no lo es case1:case2:case3:case4:case5: LCD_message = 'Da laborable'; break; case6:case7: LCD_message = 'Fin de semana'; break; default:LCD_message_1 = 'Elija un da de la semana'; break;}La palabra clave de C break se puede utilizar en cualquier tipo de bloques. Al utilizar break, es posible salir de un bloque aunque la condicin para su final no se haya cumplido. Se puede utilizar para terminar un bucle infinito, o para forzar un bucle a terminar antes de lo normal.BUCLESA menudo es necesario repetir una cierta operacin un par de veces en el programa. Un conjunto de comandos que se repiten es denominado un bucle de programa. Cuntas veces se ejecutar, es decir cunto tiempo el programa se quedar en el bucle, depende de las condiciones de salir del bucle.Bucle WhileEl buclewhilese parece a lo siguiente:while(expresin){comandos...}Los comandos se ejecutan repetidamente (el programa se queda en el bucle) hasta que la expresin llegue a ser falsa. Si la expresin es falsa en la entrada del bucle, entonces el bucle no se ejecutar y el programa continuar desde el fin del bucle while.Un tipo especial del bucle de programa es un bucle infinito. Se forma si la condicin sigue sin cambios dentro del bucle. La ejecucin es simple en este caso ya que el resultado entre llaves es siempre verdadero (1=verdadero), lo que significa que el programa se queda en el mismo bucle:while(1){ // En vez de "while(1)", se puede escribir "while(true)"... // Expresiones encerradas entre llaves se ejecutarn... // repetidamente (bucle infinito)}Bucle ForEl bucleforse parece a lo siguiente:for(expresin_inicial; expresin_de_condicin; cambiar_expresin) { operaciones ...}La ejecucin de esta secuencia de programa es similar al buclewhile, salvo que en este caso el proceso de especificar el valor inicial (inicializacin) se realice en la declaracin. La expresin_ inicial especifica la variable inicial del bucle, que ms tarde se compara con la expresin_ de_condicin antes de entrar al bucle. Las operaciones dentro del bucle se ejecutan repetidamente y despus de cada iteracin el valor de la expresin_inicial se incrementa de acuerdo con la regla cambiar_expresin. La iteracin contina hasta que la expresin_de_condicin llegue a ser falsa.for(k=0; k