PIC Microcontroladores - Programando en C Carta

Embed Size (px)

DESCRIPTION

PIC Microcontroladores - Programando en C Carta

Citation preview

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    TOC Capitulo 1 Capitulo 2 Capitulo 3 Capitulo 4 Apndice A

    Book: PIC Microcontrollers - Programming in C

    Capitulo 1: El mundo de los microcontroladores

    La situacin actual en el campo de los microcontroladores se ha producido gracias al desarrollo de la tecnologa de fabricacin de loscircuitos integrados. Este desarrollo ha permitido construir las centenas de miles de transistores en un chip. Esto fue una condicin previapara la fabricacin de un microprocesador. Las primeras microcomputadoras se fabricaron al aadirles perifricos externos, tales comomemoria, lneas de entrada/salida, temporizadores u otros. El incremento posterior de la densidad de integracin permiti crear un circuitointegrado que contena tanto al procesador como perifricos. As es cmo fue desarrollada la primera microcomputadora en un solo chip,denominada ms tarde microcontrolador.

    1.1 Introduccin1.2 NMEROS, NMEROS, NMEROS...1.3 DETALLES IMPORTANTES1.4 MICROCONTROLADORES PIC

    1.1 INTRODUCCIN

    Los principiantes en electrnica creen que un microcontrolador es igual a un microprocesador. Esto no es cierto. Difieren uno del otro enmuchos sentidos. La primera y la ms importante diferencia es su funcionalidad. Para utilizar al microprocesador en una aplicacin real, sedebe de conectar con componentes tales como memoria o componentes buses de transmisin de datos. Aunque el microprocesador seconsidera una mquina de computacin poderosa, no est preparado para la comunicacin con los dispositivos perifricos que se leconectan. Para que el microprocesador se comunique con algn perifrico, se deben utilizar los circuitos especiales. As era en el principio yesta prctica sigue vigente en la actualidad.

    Por otro lado, al microcontrolador se le disea de tal manera que tenga todas las componentes integradas en el mismo chip. No necesita deotros componentes especializados para su aplicacin, porque todos los circuitos necesarios, que de otra manera correspondan a losperifricos, ya se encuentran incorporados. As se ahorra tiempo y espacio necesario para construir un dispositivo.

    QUE PUEDEN HACER LOS MICROCONTROLADORES?

    Para entender con ms facilidad las razones del xito tan grande de los microcontroladores, vamos a prestar atencin al siguiente ejemplo.

    Featured Development Tools

    Featured Compilers

    EasyPIC v7 DevelopmentSystem

    EasyPIC v7 is the seventh generationof our famous PIC developmentboard. It is the product of accumulatedknowledge over the past 10 years, andits state of the art of design,functionality and quality. Board comeswith PIC18F45K22 device. [moreinfo]

    mikroC PRO for PIC

    Popular PIC micocontrollers areloved by hobbyists and 8-bit geeks.mikroC helps you bring your ideas tolife easy as never before. [more info]

    Products Solutions Kits Easy Buy Support Downloads

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    Hace unos 10 aos, disear un dispositivo electrnico de control de un ascensor de un edificio de varios pisos era muy difcil, incluso paraun equipo de expertos. Ha pensado alguna vez en qu requisitos debe cumplir un simple ascensor? Cmo lidiar con la situacin cuandodos o ms personas llaman al ascensor al mismo tiempo? Cul llamada tiene la prioridad? Cmo solucionar las cuestiones de seguridad,de prdida de electricidad, de fallos, de uso indebido? Lo que sucede despus de resolver estos problemas bsicos es un procesometiculoso de disear los dispositivos adecuados utilizando un gran nmero de los chips especializados. Este proceso puede tardarsemanas o meses, dependiendo de la complejidad del dispositivo. Cuando haya terminado el proceso, llega la hora de disear una placa decircuito impreso y de montar el dispositivo.Un dispositivo enorme! Es otro trabajo difcil y tardado. Por ltimo, cuando todo est terminado yprobado adecuadamente, pasamos al momento crucial y es cuando uno se concentra, respira profundamente y enciende la fuente dealimentacin.

    Esto suele ser el punto en el que la fiesta se convierte en un verdadero trabajo puesto que los dispositivos electrnicos casi nuncafuncionan apropiadamente desde el inicio. Preprese para muchas noches sin dormir, correcciones, mejoras... y no se olvide de que todavaestamos hablando de cmo poner en marcha un simple ascensor.

    Cuando el dispositivo finalmente empiece a funcionar perfectamente y todo el mundo est satisfecho, y le paguen por el trabajo que hahecho, muchas compaas de desarrollo estarn interesadas en su trabajo. Por supuesto, si tiene suerte, cada da le traer una oferta detrabajo de un nuevo inversionista. Sin embargo, si lo requieren para trabajar en el control de los elevadores de un nuevo edificio que tienecuatro pisos ms de los que ya maneja su sistema de control. Sabe cmo proceder? Cree acaso que se pueden controlar las demandasde sus clientes? Pensamos que usted va a construir un dispositivo universal que se puede utilizar en los edificios de 4 a 40 pisos, una obramaestra de electrnica. Bueno, incluso si usted consigue construir una joya electrnica, su inversionista le esperarar delante de la puertapidiendo una cmara en el ascensor o una msica relajante en caso de fallo de ascensor. O un ascensor con dos puertas.

    De todos modos, la ley de Murphy es inexorable y sin duda usted no podr tomar ventaja a pesar de todos los esfuerzos que ha hecho. Pordesgracia, todo lo que se ha dicho hasta ahora sucede en la realidad. Esto es lo que dedicarse a la ingeniera electrnica realmentesignifica. Es as como se hacan las cosas hasta aparicin de los microcontroladores diseados - pequeos, potentes y baratos. Desde esemomento su programacin dej de ser una ciencia, y todo tom otra direccin ...

    El dispositivo electrnico capaz de controlar un pequeo submarino, una gra o un ascensor como el anteriormente mencionado, ahora estincorporado en un slo chip. Los microcontroladores ofrecen una amplia gama de aplicaciones y slo algunas se exploran normalmente. Letoca a usted decidir qu quiere que haga el microcontrolador y cargar un programa en l con las instrucciones apropiadas. Antes deencender el dispositivo es recomendable verificar su funcionamiento con ayuda de un simulador. Si todo funciona como es debido, incorporeel microcontrolador en el sistema. Si alguna vez necesita cambiar, mejorar o actualizar el programa, hgalo. Hasta cundo? Hasta quedarsatisfecho. Eso puede realizarse sin ningn problema.

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    Saba usted que todas las personas pueden ser clasificadas en uno de 10 grupos, en los que estn familiarizados con el sistema denumeracin binario y en los que no estn familiarizados con l. Si no entendi lo anterior significa que todava pertenece al segundo grupo.Si desea cambiar su estado, lea el siguiente texto que describe brevemente algunos de los conceptos bsicos utilizados ms tarde en estelibro (slo para estar seguro de que estamos hablando en los mismos trminos).

    1.2 NMEROS, NMEROS, NMEROS...

    La matemtica es una gran ciencia! Todo es tan lgico y simple... El universo de los nmeros se puede describir con slo diez dgitos. No

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    obstante, realmente tiene que ser as? Necesitamos exactamente esos 10 dgitos? Por supuesto que no, es slo cuestin del hbito.Acurdese de las lecciones de la escuela. Por ejemplo, qu significa el nmero 764? Cuatro unidades, seis decenas y siete centenas.Muy simple! Se podra expresar de una forma ms desarrollada? Por supuesto que s: 4 + 60 + 700. An ms desarrollado? S: 4*1 +6*10 + 7*100. Podra este nmero parecer un poco ms cientfico? La respuesta es s otra vez: 4*100 + 6*101 + 7*102. Qu significaesto realmente? Por qu utilizamos exactamente estos nmeros 100, 101 y 102 ? Por qu es siempre el nmero 10? Es porqueutilizamos 10 dgitos diferentes (0, 1, 2...8, 9). En otras palabras, es porque utilizamos el sistema de numeracin en base 10, es decir elsistema de numeracin decimal.

    SISTEMA DE NUMERACIN BINARIO

    Qu pasara si utilizramos slo dos nmeros 0 y 1? Si slo pudiramos afirmar (1) o negar (0) que algo existe. La respuesta es nadaespecial, seguiramos utilizando los mismos nmeros de la misma manera que utilizamos hoy en da, no obstante ellos pareceran un pocodiferentes. Por ejemplo: 11011010.Cuntas son realmente 11011010 pginas de un libro? Para entenderlo, siga la misma lgica como enel ejemplo anterior, pero en el orden invertido. Tenga en cuenta que se trata de aritmtica con slo dos dgitos 0 y 1, es decir, del sistemade numeracin en base 2 (sistema de numeracin binario).

    Evidentemente, se trata del mismo nmero representado en dos sistemas de numeracin diferentes. La nica diferencia entre estas dosrepresentaciones yace en el nmero de dgitos necesarios para escribir un nmero. Un dgito (2) se utiliza para escribir el nmero 2 en elsistema decimal, mientras que dos dgitos (1 y 0) se utilizan para escribir aquel nmero en el sistema binario. Ahora est de acuerdo quehay 10 grupos de gente? Bienvenido al mundo de la aritmtica binaria! Tiene alguna idea de dnde se utiliza?

    Excepto en las condiciones de laboratorio estrictamente controladas, los circuitos electrnicos ms complicados no pueden especificar conexactitud la diferencia entre dos magnitudes (dos valores de voltaje, por ejemplo), si son demasiado pequeos (ms pequeos que unos

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    pocos voltios). La razn son los ruidos elctricos y fenmenos que se presentan dentro de lo que llamamos entorno de trabajo real(algunos ejemplos de estos fenmenos son los cambios imprevisibles de la tensin de alimentacin, cambios de temperatura, tolerancia alos valores de los componentes etc...). Imagnese una computadora que opera sobre nmeros decimales al tratarlos de la siguiente manera:0=0V, 1=5V, 2=10V, 3=15V, 4=20V... 9=45V!?

    Alguien dijo bateras?

    Una solucin mucho ms fcil es una lgica binaria donde 0 indica la ausencia de voltaje, mientras que 1 indica la presencia de voltaje.Simplemente, es fcil de escribir 0 o 1 en vez de no hay voltaje o hay voltaje. Mediante el cero lgico (0) y uno lgico (1) la electrnica seenfrenta perfectamente y realiza con facilidad todas las operaciones aritmticas. Evidentemente, se trata de electrnica que en realidadaplica aritmtica en la que todos los nmeros son representados con slo dos dgitos y donde slo es importante saber si hay voltaje o no.Por supuesto, estamos hablando de electrnica digital.

    SISTEMA DE NUMERACIN HEXADECIMAL

    En el principio del desarrollo de las computadoras era evidente que a la gente le costaba mucho trabajar con nmeros binarios. Por eso, seestableci un nuevo sistema de numeracin, que utilizaba 16 smbolos diferentes. Es llamado el sistema de numeracin hexadecimal. Estesistema est compuesto de 10 dgitos a los que estamos acostumbrados (0, 1, 2, 3,... 9) y de seis letras del alfabeto A, B, C, D, E y F.Cul es el propsito de esta combinacin aparentemente extraa? Basta con mirar cmo todo en la historia de los nmeros binarios encajaperfectamente para lograr una mejor comprensin del tema.

    El mayor nmero que puede ser representado con 4 dgitos binarios es el nmero 1111. Corresponde al nmero 15 en el sistema decimal.En el sistema hexadecimal ese nmero se representa con slo un dgito F. Es el mayor nmero de un dgito en el sistema hexadecimal. Seda cuenta de la gran utilidad de estas equivalencias? El mayor nmero escrito con ocho dgitos binarios es a la vez el mayor nmero de dosdgitos en el sistema hexadecimal. Tenga en cuenta que una computadora utiliza nmeros binarios de 8 dgitos. Acaso se trata de unacasualidad?

    CDIGO BCD

    El cdigo BCD (Binary-Coded Decimal - Cdigo binario decimal) es un cdigo binario utilizado para representar a los nmeros decimales.Se utiliza para que los circuitos electrnicos puedan comunicarse con los perifricos utilizando el sistema de numeracin decimal o bienutilizando el sistema binario dentro de su propio mundo. Consiste en nmeros binarios de 4 dgitos que representan los primeros diezdgitos (0, 1, 2, 3...8, 9). Aunque cuatro dgitos pueden hacer 16 combinaciones posibles en total, el cdigo BCD normalmente utiliza a lasprimeras diez.

    CONVERSIN DE SISTEMAS DE NMERACIN

    El sistema de numeracin binario es el que utilizan los microcontroladores, el sistema decimal es el que nos resulta ms comprensible,mientras que el sistema hexadecimal presenta un balance entre los dos. Por eso, es muy importante aprender cmo convertir los nmerosde un sistema de numeracin a otro, por ejemplo, cmo convertir una serie de ceros y unos a una forma de representacin comprensiblepara nosotros.

    CONVERSIN DE NMEROS BINARIOS A DECIMALES

    Los dgitos en un nmero binario tienen ponderaciones diferentes lo que depende de sus posiciones dentro del nmero que estnrepresentando. Adems, cada dgito puede ser 1 o 0, y su ponderacin se puede determinar con facilidad al contar su posicin empezandopor la derecha. Para hacer una conversin de un nmero binario a decimal es necesario multiplicar las ponderaciones con los dgitoscorrespondientes (0 o 1) y sumar todos los resultados. La magia de la conversin de un nmero binario a decimal funciona de maravilla...Tiene duda? Veamos el siguiente ejemplo:

    Cabe destacar que es necesario utilizar slo dos dgitos binarios para representar a todos los nmeros decimales de 0 a 3. Porconsiguiente, para representar los nmeros de 0 a 7 es necesario utilizar tres dgitos binarios, para representar los nmeros de 0 a 15 -cuatro dgitos etc. Dicho de manera sencilla, el mayor nmero binario que se puede representar utilizando n dgitos se obtiene al elevar labase 2 a la potencia n. Luego, al resultado se le resta 1. Por ejemplo, si n=4:

    24 - 1 = 16 - 1 = 15

    Por consiguiente, al utilizar 4 dgitos binarios, es posible representar los nmeros decimales de 0 a 15, que son 16 valores diferentes entotal.

    CONVERSIN DE NMEROS HEXADECIMALES A DECIMALES

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    Para realizar una conversin de un nmero hexadecimal a decimal, cada dgito hexadecimal debe ser multiplicado con el nmero 16elevado al valor de su posicin. Por ejemplo:

    CONVERSIN DE NMEROS HEXADECIMALES A BINARIOS

    No es necesario realizar ningn clculo para convertir un nmero hexadecimal a binario. Los dgitos hexadecimales se reemplazansimplemente por los cuatro dgitos binarios apropiados. Ya que el dgito hexadecimal mximo es equivalente al nmero decimal 15, esnecesario utilizar cuatro dgitos binarios para representar un dgito hexadecimal. Por ejemplo:

    MARCAR LOS NMEROS

    El sistema de numeracin hexadecimal, junto con los sistemas binario y decimal, se consideran los ms importantes para nosotros. Es fcilrealizar una conversin de cualquier nmero hexadecimal a binario, adems es fcil de recordarlo. Sin obstante, estas conversiones puedenprovocar una confusin. Por ejemplo, qu significa en realidad la sentencia: Es necesario contar 110 productos en una cadena demontaje? Dependiendo del sistema en cuestin (binario, decimal o hexadecimal), el resultado podra ser 6, 110 o 272 productos,respectivamente. Por consiguiente, para evitar equivocaciones, diferentes prefijos y sufijos se aaden directamente a los nmeros. El prefijo$ o 0x as como el sufijo h marca los nmeros en el sistema hexadecimal. Por ejemplo, el nmero hexadecimal 10AF se puede escribir as:$10AF, 0x10AF o 10AFh. De manera similar, los nmeros binarios normalmente obtienen el sufijo % o 0B. Si un nmero no tiene ni sufijo niprefijo se considera decimal. Desafortunadamente, esta forma de marcar los nmeros no es estandarizada, por consiguiente depende de laaplicacin concreta.

    La siguiente es tabla comparativa que contiene los valores de nmeros 0-255 representados en tres sistemas de numeracin diferentes.Esto es probablemente la manera ms fcil de entender lgica comn aplicada a todos los sistemas de numeracin.

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    NMEROS NEGATIVOS

    Como ya hemos visto, para escribir un nmero negativo en matemticas, basta con aadirle el prefijo - (signo menos). Sin embargo, en laprogramacin, al acabarse el proceso de la compilacin, se quedan slo los nmeros binarios, volvindose las cosas ms complicadas. Seutilizan slo dos dgitos - 0 y 1, mientras que todos los dems nmeros, smbolos y signos se forman por medio de las combinaciones deestos dos dgitos. En el caso de los nmeros negativos, la solucin es la siguiente: En los nmeros negativos, el bit ms significativo (el bitdel extremo izquierdo) representa el signo del nmero (donde 0 ser positivo y 1 negativo). En el caso de un nmero de 8 bits, pararepresentar un valor numrico slo quedan 7 bits. De acuerdo a este tipo de codificacin el nmero +127 es el mayor nmero positivo consigno que se puede representar con 8 bits. Asimismo, hay cero (0) positivo y negativo (refirase a la tabla de la derecha). La siguientepregunta sera: Cmo es posible saber de qu nmero se trata? Por ejemplo, si ponemos el nmero 10000001, es -1 o 129? No sepreocupe, de eso se encarga el compilador. sta es la razn por la que se declaran variables al escribir el programa. Bueno, de eso vamosa hablar a continuacin.

    BIT

    La teora dice que un bit es la unidad bsica de informacin...Vamos a olvidarlo por un momento y demostrar qu es eso en la prctica. Larespuesta es - nada especial- un bit es un slo dgito binario. Similar a un sistema de numeracin decimal en el que los dgitos de unnmero no tienen la misma ponderacin (por ejemplo, los dgitos en el nmero 444 son los mismos pero tienen los valores diferentes), elsignificado de un bit depende de la posicin que tiene en nmero binario. En este caso no tiene sentido hablar de unidades, centenas etc.en los nmeros binarios, sus dgitos se denominan el bit cero (el primer bit a la derecha), el primer bit (el segundo bit a la derecha) etc.Adems, ya que el sistema binario utiliza solamente dos dgitos (0 y 1), el valor de un bit puede ser 0 o 1.

    No se confunda si se encuentra con un bit que tiene el valor 4, 16 o 64. Son los valores representados en el sistema decimal. Simplemente,nos hemos acostumbrado tanto a utilizar los nmeros decimales que estas expresiones llegaron a ser comunes. Sera correcto decir porejemplo, el valor del sexto bit en cualquier nmero binario equivale al nmero decimal 64. Pero todos somos humanos y los viejos hbitosmueren difcilmente. Adems, cmo le suena nmero uno-uno-cero-uno-cero...?

    BYTE

    Un byte consiste en 8 bits colocados uno junto al otro. Si un bit es un dgito, es lgico que los bytes representen los nmeros. Todas lasoperaciones matemticas se pueden realizar por medio de ellos, como por medio de los nmeros decimales comunes. Similar a los dgitosde cualquier nmero, los dgitos de un byte no tienen el mismo significado. El bit del extremo izquierdo tiene la mayor ponderacin, por esoes denominado el bit ms significativo (MSB). El bit del extremo derecho tiene la menor ponderacin, por eso es denominado el bit menossignificativo (LSB). Puesto que los 8 dgitos de un byte se pueden combinar de 256 maneras diferentes, el mayor nmero decimal que sepuede representar con un byte es 255 (una combinacin representa un cero).

    Un nibble o un cuarteto representa una mitad de byte. Dependiendo de la mitad del nmero en cuestin (izquierda o derecha), se lesdenomina nibbles altos o bajos, respectivamente.

    Usted seguramente ha pensado alguna vez en cmo es la electrnica dentro de un circuito integrado digital, un microcontrolador o unmicroprocesador. Cmo son los circuitos que realizan las operaciones matemticas complicadas y toman decisiones? Saba que susesquemas, aparentemente complicadas consisten en slo unos pocos elementos diferentes, denominados circuitos lgicos o compuertaslgicas?

    1.3 DETALLES IMPORTANTES

    El funcionamiento de estos elementos es basado en los principios establecidos por el matemtico britnico George Boole en la mitad del

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    Una compuerta lgica Y dispone de dos o msentradas y de una salida. En este caso la compuertautilizada dispone de slo dos entradas. Un uno lgico(1) aparecer en su salida slo en caso de queambas entradas (A Y B) sean llevadas a alto (1). Latabla a la derecha es la tabla de verdad que muestrala relacin entre las entradas y salidas de lacompuerta. El principio de funcionamiento es elmismo cuando la compuerta disponga de ms de dosentradas: la salida proporciona un uno lgico (1) slosi todas las entradas son llevadas a alto (1).

    Cualquier otra combinacin de voltajes de entradaproporcionar un cero lgico (0) en su salida.Utilizada en el programa, la operacin Y lgico esrealizada por una instruccin de programa, de la quevamos a hablar ms tarde. Por ahora basta conconocer que Y lgico en un programa se refiere a larealizacin de este tipo de operacin sobre los bitscorrespondientes de dos registros diferentes.

    De manera similar, la compuerta O tambin disponede dos o ms entradas y de una salida. Si lacompuerta dispone de slo dos entradas, es aplicablelo siguiente: la salida proporciona un uno lgico (1) siuna u otra entrada (A o B) es llevada a alto (1). Encaso de que la compuerta O disponga de ms de dosentradas, es aplicable lo siguiente: La salidaproporciona un uno lgico (1) si por lo menos unaentrada es llevada a alto (1). Si todas las entradasestn a cero lgico (0), la salida estar a cero lgico(0) tambin.

    En un programa, la operacin O lgico se realiza dela misma manera que la operacin Y.

    siglo 19 - es decir, antes de la invencin de la primera bombilla! En breve, la idea principal era de expresar las formas lgicas por medio delas funciones algebraicas. Tal idea pronto se transform en un producto prctico que se convirti ms tarde en lo que hoy en da conocemoscomo circuitos lgicos Y (AND), O (OR) o NO (NOT). El principio de su funcionamiento es conocido como algebra de Boole.

    CIRCUITOS LGICOS

    Algunas instrucciones de programa utilizadas por un microcontrolador funcionan de la misma manera que las compuertas lgicas, pero enforma de comandos. A continuacin vamos a explicar el principio de su funcionamiento.

    COMPUERTA Y (AND)

    COMPUERTA O (OR)

    COMPUERTA NO (NOT)

    La compuerta lgica NO dispone de una sola entrada y una sola salida, por lo que funciona muy simplemente. Cuando un cero lgico (0)aparezca en su entrada, la salida proporciona un uno lgico (1) y viceversa. Esto significa que esta compuerta invierte las seales por smismas y por eso es denominada inversor.

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    En el programa la operacin lgica NO se realiza sobre un byte. Elresultado es un byte con los bits invertidos. Si los bits de un byte seconsideran nmero, el valor invertido es un complemento a ese nmero.El complemento de un nmero es el valor que se aade al nmerohasta llegar al mayor nmero binario de 8 dgitos. En otras palabras, lasuma de un dgito de 8 nmeros y de su complemento es siempre 255.

    COMPUERTA XOR (O EXCLUSIVA)

    La compuerta XOR (O EXCLUSIVA) es un poco complicada encomparacin con las dems. Representa una combinacin de todas lascompuertas anteriormente descritas. La salida proporciona un uno lgico(1) slo si sus entradas estn en estados lgicos diferentes.

    En el programa, esta operacin se utiliza con frecuencia para comparar dos bytes. Laresta se puede utilizar con el mismo propsito (si el resultado es 0, los bytes son iguales).A diferencia de la resta, la ventaja de esta operacin lgica es que no es posible obtenerlos resultados negativos.

    REGISTROS

    Un registro o una celda de memoria es un circuito electrnico que puede memorizar el estado de un byte.

    REGISTROS SFR

    A diferencia de los registros que no tienen ninguna funcin especial y predeterminada, cada microcontrolador dispone de un nmero deregistros de funciones especiales (SFR), con la funcin predeterminada por el fabricante. Sus bits estn conectados a los circuitos internosdel microcontrolador tales como temporizadores, convertidores A/D, osciladores entre otros, lo que significa que directamente manejan elfuncionamiento de estos circuitos, o sea del microcontrolador. Imagnese ocho interruptores que manejan el funcionamiento de un circuitopequeo dentro del microcontrolador. Los registros SFR hacen exactamente lo mismo.

    En otras palabras, el estado de los bits de registros se fijadentro de programa, los registros SFR dirigen los pequeoscircuitos dentro del microcontrolador, estos circuitos seconectan por los pines del microcontrolador a un dispositivoperifrico utilizado para... Bueno, depende de usted.

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    PUERTOS DE ENTRADA/SALIDA (E/S)

    Para hacer til un microcontrolador, hay que conectarlo a un dispositivo externo, o sea, a un perifrico. Cada microcontrolador tiene uno oms registros (denominados puertos) conectados a los pines en el microcontrolador. Por qu se denominan como puertos deentrada/salida? Porque usted puede cambiar la funcin de cada pin como quiera. Por ejemplo, usted desea que su dispositivo encienda yapague los tres seales LEDs y que simultneamente monitoree el estado lgico de 5 sensores o botones de presin. Uno de los puertosdebe estar configurado de tal manera que haya tres salidas (conectadas a los LEDs) y cinco entradas (conectadas a los sensores). Eso serealiza simplemente por medio de software, lo que significa que la funcin de algn pin puede ser cambiada durante el funcionamiento.

    Una de las caractersticas ms importantes de los pines de entrada/salida (E/S) es la corriente mxima que pueden entregar/recibir. En lamayora de los microcontroladores la corriente obtenida de un pin es suficiente para activar un LED u otro dispositivo de baja corriente (10-20mA). Mientras ms pines de E/S haya, ms baja es la corriente mxima de un pin. En otras palabras, todos los puertos de E/S compartenla corriente mxima declarada en la hoja de especificacin tcnica del microprocesador.

    Otra caracterstica importante de los pines es que pueden disponer de los resistores pull-up. Estos resistores conectan los pines al polopositivo del voltaje de la fuente de alimentacin y su efecto se puede ver al configurar el pin como una entrada conectada a un interruptormecnico o a un botn de presin. Las ltimas versiones de los microcontroladores tienen las resistencias pull-up configurables porsoftware.

    Cada puerto de E/S normalmente est bajo el control de un registro SFR especializado, lo que significa que cada bit de ese registrodetermina el estado del pin correspondiente en el el microcontrolador. Por ejemplo, al escribir un uno lgico (1) a un bit del registro decontrol (SFR), el pin apropiado del puerto se configura automticamente como salida. Eso significa que el voltaje llevado a ese pin se puedeleer como 0 o 1 lgico. En caso contrario, al escribir 0 al registro SFR, el pin apropiado del puerto se configura como salida. Su voltaje (0V o5V) corresponde al estado del bit apropiado del registro del puerto.

    UNIDAD DE MEMORIA

    La unidad de memoria es una parte del microcontrolador utilizada para almacenar los datos. La manera ms fcil de explicarlo escompararlo con un armario grande con muchos cajones. Si marcamos los cajones claramente, ser fcil acceder a cualquiera de suscontenidos al leer la etiqueta en la parte delantera del cajn.

    De manera similar, cada direccin de memoria corresponde a una localidadde memoria. El contenido de cualquier localidad se puede leer y se le puede

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    acceder al direccionarla. La memoria se puede escribir en la localidad oleer.

    Hay varios tipos de memoria dentro del microcontrolador:

    MEMORIA ROM (READ ONLY MEMORY) - MEMORIA DE SLO LECTURA

    La memoria ROM se utiliza para guardar permanentemente el programa que se est ejecutando. El tamao de programa que se puedeescribir depende del tamao de esta memoria. Los microcontroladores actuales normalmente utilizan el direccionamiento de 16 bits, quesignifica que son capaces de direccionar hasta 64 Kb de memoria, o sea 65535 localidades. Por ejemplo, si usted es principiante, suprograma exceder pocas veces el lmite de varios cientos de instrucciones. Hay varios tipos de memoria ROM.

    Rom de mscara (enmascarada) - MROM

    La ROM enmascarada es un tipo de ROM cuyo contenido es programado por el fabricante. El trmino de mscara viene del proceso defabricacin, donde las partes del chip se plasman en las mascaras utilizadas durante el proceso de fotolitografa. En caso de fabricacin degrandes series, el precio es muy bajo. Olvide la idea de modificarla...

    OTP ROM (One Time Programmable ROM) - ROM programable una sola vez

    La memoria programable una sola vez permite descargar un programa en el chip, pero como dice su nombre, una sola vez. Si se detectaun error despus de descargarlo, lo nico que se puede hacer es descargar el programa correcto en otro chip.

    UV EPROM (UV Erasable Programmable ROM) - ROM programable borrable por rayos ultravioleta

    El encapsulado de este microcontrolador tiene una ventana reconocible en la parte alta. Eso permiteexponer la superficie del chip de silicio a la luz de ultravioleta y borrar el programa completamente envarios minutos. Luego es posible descargar un nuevo programa en l.

    La instalacin de esta ventana es complicada, lo que por supuesto afecta al precio. Desde nuestropunto de vista, desgraciadamente, de manera negativa...

    Memoria Flash

    Este tipo de memoria se invent en los aos 80 en los laboratorios de la compaa INTEL, como forma desarrollada de la memoria UVEPROM. Ya que es posible escribir y borrar el contenido de esta memoria prcticamente un nmero ilimitado de veces, losmicrocontroladores con memoria Flash son perfectos para estudiar, experimentar y para la fabricacin en pequea escala. Por la granpopularidad de esta memoria, la mayora de los microconroladores se fabrican con tecnologa flash hoy en da. Si usted va a comprar unmicrocontrolador, ste es en definitiva la opcin perfecta!

    MEMORIA RAM (RANDOM ACCESS MEMORY) - MEMORIA DE ACCESO ALEATORIO

    Al apagar la fuente de alimentacin, se pierde el contenido de la memoria RAM. Se utiliza para almacenar temporalmente los datos y losresultados inmediatos creados y utilizados durante el funcionamiento del microcontrolador. Por ejemplo, si el programa ejecuta la adicin (decualquier cosa) es necesario tener un registro que representa lo que se llama suma en vida cotidiana. Con tal propsito, uno de losregistros de la RAM es denominado suma y se utiliza para almacenar los resultados de la adicin.

    MEMORIA EEPROM (ELECTRICALLY ERASABLE PROGRAMMABLE ROM) - ROM PROGRAMABLE YBORRABLE ELCTRICAMENTE

    El contenido de la EEPROM se puede cambiar durante el funcionamiento (similar a la RAM), pero se queda permanentemente guardadodespus de la prdida de la fuente de alimentacin (similar a la ROM). Por lo tanto, la EEPROM se utiliza con frecuencia para almacenarlos valores creados durante el funcionamiento, que tienen que estar permanentemente guardados. Por ejemplo, si usted ha diseado una

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    llave electrnica o un alarma, sera estupendo permitir al usuario crear e introducir una contrasea por su cuenta. Por supuesto, la nuevacontrasea tiene que estar guardada al apagar la fuente de alimentacin. En tal caso una solucin perfecta es el microcontrolador con unaEEPROM embebida.

    INTERRUPCIN

    La mayora de programas utilizan interrupciones durante ejecucin de programa regular. El propsito del microcontrolador generalmenteconsiste en reaccionar a los cambios en su entorno. En otras palabras, cuando ocurre algo, el microcontrolador reacciona de algunamanera... Por ejemplo, al apretar el botn del mando a distancia, el microcontrolador lo registra y responde al comando cambiando de canal,subiendo o bajando el volumen etc. Si el microcontrolador pasar la mayora del tiempo comprobando varios botones sin parar - las horas,los das, esto no sera nada prctico.

    Por lo tanto, el microcontrolador aprendi un truco durante su evolucin. En vez de seguir comprobando algn pin o bit, el microconroladordeja su trabajo de esperar a un experto que reaccionar slo en caso de que suceda algo digno de atencin.

    La seal que informa al procesador central acerca de tal acontecimiento se denomina INTERRUPCIN.

    UNIDAD CENTRAL DE PROCESAMIENTO (CENTRAL PROCESSOR UNIT - CPU)

    Como indica su nombre, esto es una unidad que controla todos los procesos dentro del microcontrolador. Consiste en varias unidades mspequeas, de las que las ms importantes son:

    Decodificador de instrucciones es la parte que descodifica las instrucciones del programa y acciona otroscircuitos basndose en esto. El conjunto de instrucciones que es diferente para cada familia de microcontroladorexpresa las capacidades de este circuito;Unidad lgica aritmtica (Arithmetical Logical Unit - ALU) realiza todas las operaciones matemticas ylgicas sobre datos; yAcumulador o registro de trabajo. Es un registro SFR estrechamente relacionado con el funcionamiento de laALU. Es utilizado para almacenar todos los datos sobre los que se debe realizar alguna operacin (sumar, mover).Tambin almacena los resultados preparados para el procesamiento futuro. Uno de los registros SFR, denominadoRegistro Status (PSW), est estrechamente relacionado con el acumulador. Muestra el estado de un nmeroalmacenado en el acumulador (el nmero es mayor o menor que cero etc.) en cualquier instante dado.

    BUS

    El bus est formado por 8, 16 o ms cables. Hay dos tipos de buses: el bus de direcciones y el bus de datos. El bus de direcciones consisteen tantas lneas como sean necesarias para direccionar la memoria. Se utiliza para transmitir la direccin de la CPU a la memoria. El busde datos es tan ancho como los datos, en este caso es de 8 bits o lneas de ancho. Se utiliza para conectar todos los circuitos dentro delmicrocontrolador.

    COMUNICACIN EN SERIE

    La conexin paralela entre el microcontrolador y los perifricos a travs de los puertos de entrada/salida es una solucin perfecta para lasdistancias cortas - hasta varios metros. No obstante, en otros casos cuando es necesario establecer comunicacin entre dos dispositivos alargas distancias no es posible utilizar la conexin paralela. En vez de eso, se utiliza la conexin en serie.

    Hoy en da, la mayora de los microcontroladores llevan incorporados varios sistemas diferentes para la comunicacin en serie, como unequipo estndar. Cul de estos sistemas se utilizar en un caso concreto, depende de muchos factores, de los que ms importantes son:

    Con cuntos dispositivos el microcontrolador tiene que intercambiar los datos?Cul es la velocidad del intercambio de datos obligatoria?Cul es la distancia entre los dispositivos?Es necesario transmitir y recibir los datos simultneamente?

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    Una de las cosas ms importantes en cuanto a la comunicacin en serie es el Protocolo que debe ser estrictamente observado. Es unconjunto de reglas que se aplican obligatoriamente para que los dispositivos puedan interpretar correctamente los datos que intercambianmutuamente. Afortunadamente, los microcontroladores se encargan de eso automticamente, as que el trabajo de programador/usuario esreducido a la escritura y lectura de datos.

    VELOCIDAD DE TRANSMISIN SERIAL

    La velocidad de transmisin serial (baud rate) es el trmino utilizado para denotar el nmero de bits transmitidos por segundo [bps]. Fjeseque este trmino se refiere a bits, y no a bytes! El protocolo normalmente requiere que cada byte se transmita junto con varios bits decontrol. Eso quiere decir que un byte en un flujo de datos serial puede consistir en 11 bits. Por ejemplo, si velocidad de transmisin serial es300 bps un mximo de 37 y un mnimo de 27 bytes se pueden transmitir por segundo.

    Los sistemas de comunicacin serial ms utilizados son:

    I2C (INTER INTEGRATED CIRCUIT) - CIRCUITO INTER-INTEGRADO

    Circuito inter-integrado es un sistema para el intercambio de datos serial entre los microcontroladores y los circuitos integradosespecializados de generacin. Se utiliza cuando la distancia entre ellos es corta (el receptor y el transmisor estn normalmente en la mismaplaca de circuito impreso). La conexin se establece por medio de dos lneas - una se utiliza para transmitir los datos, mientras que la otrase utiliza para la sincronizacin (la seal de reloj). Como se muestra en la figura, un dispositivo es siempre el principal (master - maestro), elque realiza el direccionamiento de un chip subordinado (slave - esclavo) antes de que se inicie la comunicacin. De esta manera unmicrocontrolador puede comunicarse con 112 dispositivos diferentes. La velocidad de transmisin serial es normalmente 100 Kb/seg (elmodo estndar) o 10 Kb/seg (modo de velocidad de transmisin baja). Recientemente han aparecido los sistemas con la velocidad detransmisin serial 3.4 Mb/sec. La distancia entre los dispositivos que se comunican por el bus I2C est limitada a unos metros.

    SPI (SERIAL PERIPHERAL INTERFACE BUS) - BUS SERIAL DE INTERFAZ DE PERIFRICOS

    Un bus serial de interfaz de perifricos es un sistema para la comunicacin serial que utiliza hasta cuatro lneas (normalmente solo sonnecesarias tres) - para recibir los datos, para transmitir los datos, para sincronizar y (opcional) para seleccionar el dispositivo con el que secomunica. Esto es la conexin full duplex, lo que significa que los datos se envan y se reciben simultneamente.

    La velocidad de transmisin mxima es mayor que en el sistema de conexin I2C.

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    UART (UNIVERSAL ASYNCHRONOUS RECEIVER/TRANSMITTER) - TRANSMISOR-RECEPTOR ASNCRONOUNIVERSAL

    Este tipo de conexin es asncrona, lo que significa que no se utiliza una lnea especial para transmitir la seal de reloj. En algunasaplicaciones este rasgo es crucial (por ejemplo, en mandar datos a distancia por RF o por luz infrarroja). Puesto que se utiliza slo una lneade comunicacin, tanto el receptor como el transmisor reciben y envan los datos a velocidad misma que ha sido predefinida para mantenerla sincronizacin necesaria. Esto es una manera simple de transmitir datos puesto que bsicamente representa una conversin de datos de8 bits de paralelo a serial. La velocidad de transmisin no es alta, es hasta 1 Mbit/sec.

    OSCILADOR

    Los pulsos uniformes generados por el oscilador permiten elfuncionamiento armnico y sncrono de todos los circuitos delmicrocontrolador. El oscilador se configura normalmente de talmanera que utilice un cristal de cuarzo o resonador cermico paraestabilizacin de frecuencia. Adems, puede funcionar como uncircuito autnomo (como oscilador RC). Es importante decir quelas instrucciones del programa no se ejecutan a la velocidadimpuesta por el mismo oscilador sino varias veces ms despacio.Eso ocurre porque cada instruccin se ejecuta en varios ciclos deloscilador. En algunos microcontroladores se necesita el mismonmero de ciclos para ejecutar todas las instrucciones, mientrasque en otros el tiempo de ejecucin no es el mismo para todas lasinstrucciones. Por consiguiente, si el sistema utiliza el cristal decuarzo con una frecuencia de 20 MHZ, el tiempo de ejecucin deuna instruccin de programa no es 50 nS, sino 200, 400 o 800 nSdependiendo del tipo del microcontrolador.

    CIRCUITO DE ALIMENTACIN

    Hay que mencionar dos cosas dignas de atencin con relacin al circuito de la fuente de alimentacin de microcontroladores:

    Brown out es un estado potencialmente peligroso que ocurre al apagar el microcontrolador o en caso de que elvoltaje de la fuente de alimentacin salga de unos mrgenes debido al ruido elctrico. Como el microcontroladordispone de varios circuitos que funcionan a niveles de voltaje diferentes, ese estado puede causar uncomportamiento descontrolado. Para evitarlo, el microcontrolador normalmente tiene un circuito incorporado para elbrown out reset. El circuito reinicia inmediatamente el microcontrolador si el voltaje de alimentacin cae por debajodel lmite.El pin de reset (reinicio), marcado frecuentemente con MCLR (Master Clear Reset), sirve para el reinicio externodel microcontrolador al aplicar un cero (0) o un uno (1) lgico dependiendo del tipo del microcontrolador. En caso deque el circuito brown out no est incorporado, un simple circuito externo para el brown out reset se puede conectaral pin MCLR.

    TEMPORIZADORES/CONTADORES

    El oscilador del microcontrolador utiliza cristal de cuarzo para su funcionamiento. Aunque no se trata de la solucin ms simple, hay muchasrazones para utilizarlo. La frecuencia del oscilador es definida con precisin y muy estable, as que siempre genera los pulsos del mismoancho, lo que los hace perfectos para medicin de tiempo. Tales osciladores se utilizan en los relojes de cuarzo. Si es necesario medir eltiempo transcurrido entre dos eventos, basta con contar los pulsos generados por este oscilador. Esto es exactamente lo que hace eltemporizador.

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    La mayora de los programas utiliza estos cronmetros electrnicos en miniatura. Generalmente son registros SFR de 8 o 16 bits cuyocontenido se aumenta automticamente con cada pulso. Una vez que se llena el registro, se genera una interrupcin!

    Si el temporizador utiliza el oscilador de cuarzo interno para su funcionamiento, es posible medir el tiempo entre dos eventos (el valor deregistro en el momento de iniciar la medicin es T1, en el momento de finalizar la medicin es T2, el tiempo transcurrido es igual alresultado de la resta T2 - T1). Si los registros se aumentan con los pulsos que vienen de la fuente externa, tal temporizador se convierte enun contador.

    Esto es una explicacin simple de su funcionamiento. Es un poco ms complicado en prctica.

    CMO FUNCIONAN LOS TEMPORIZADORES?

    En prctica, los pulsos generados por el oscilador de cuarzo son llevados al circuito una vez por cada ciclo de mquina directamente o porel pre-escalador, lo que aumenta el nmero en el registro del temporizador. Si una instruccin (un ciclo de mquina) dura cuatro perodosdel oscilador de cuarzo, este nmero ser cambiado un milln de veces por segundo (cada microsegundo) al incorporar al cuarzo queoscila con una frecuencia de 4 MHz.

    Es fcil de medir los intervalos de tiempo cortos de la manera descrita anteriormente (hasta 256 microsegundos porque es el mayor nmeroque un registro puede contener). Esta obvia desventaja se puede superar de varias maneras: al utilizar el oscilador ms lento, por medio deregistros con ms bits, del pre-escalador o de la interrupcin. Las primeras dos soluciones tienen algunas debilidades as que serecomienda utilizar el pre-escalador y/o la interrupcin.

    UTILIZAR UN PREESCALADOR EN EL FUNCIONAMIENTO DEL TEMPORIZADOR

    Un pre-escalador es un dispositivo electrnico utilizado para dividir la frecuencia por un factor predeterminado. Esto quiere decir que senecesita llevar 1, 2, 4 o ms pulsos a su entrada para generar un pulso a la salida. La mayora de los microcontroladores disponen de uno o

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    ms pre-escaladores incorporados y su tasa de divisin puede ser cambiada dentro del programa. El pre-escalador se utiliza cuando esnecesario medir los perodos de tiempo ms largos. Si el temporizador y el temporizador perro guardin comparten un pre-escalador, steno se puede utilizar por los dos simultneamente.

    UTILIZAR UNA INTERRUPCIN EN EL FUNCIONAMIENTO DEL TEMPORIZADOR

    Si el registro del temporizador es de 8 bits, el mayor nmero que se puede escribir en l es 255 (en los registros de 16 bits es el nmero65.535). Si se excede este nmero, el temporizador se reinicia automticamente y el conteo comienza de nuevo en cero. Esto esdenominado desbordamiento o sobreflujo (overflow). Permitido por el programa, el desbordamiento puede provocar una interrupcin, lo queabre completamente nuevas posibilidades. Por ejemplo, el estado de registros utilizados para contar segundos, minutos o das puede serimplementado en una rutina de interrupcin. El proceso entero (excepto la rutina de interrupcin) se lleva a cabo internamente, lo quepermite que los circuitos principales del microcontrolador funcionen regularmente.

    La figura anterior describe el uso de una interrupcin en el funcionamiento del temporizador. Al asignarle un pre-escalador al temporizador,se producen retrasos de duracin arbitraria con mnima interferencia en la ejecucin del programa principal.

    CONTADORES

    Si un temporizador se suministra por los pulsos ingresados por el pin de entrada en el microcontrolador, se produce un contador.Evidentemente, es el mismo circuito electrnico. La nica diferencia es que los pulsos para contar se ingresan por el pin de entrada y quesu duracin (anchura) no es definida. Por eso, no se pueden utilizar para medicin de tiempo, sino que se utilizan para otros propsitos, porejemplo: contar los productos en la cadena de montaje, nmero de rotaciones del eje de un motor, pasajeros etc. (dependiendo del sensorutilizado.

    TEMPORIZADOR PERRO GUARDIN (WATCHDOG)

    El perro guardin es un temporizador conectado a un oscilador RC completamente independiente dentro del microcontrolador.

    Si el perro guardin est habilitado, cada vez que cuenta hasta el mximo valor en el que ocurre el desbordamiento del registro se generauna seal de reinicio del microcontrolador y la ejecucin de programa inicia en la primera instruccin. El punto es evitar que eso ocurra alutilizar el comando adecuado.

    La idea se basa en el hecho de que cada programa se ejecuta en varios bucles, ms largos o cortos. Si las instrucciones que reinician eltemporizador perro guardin se colocan en lugares estratgicos del programa, aparte los comandos que se ejecutan regularmente, elfuncionamiento del perro guardin no afectar a la ejecucin del programa. Si por cualquier razn (ruidos elctricos frecuentes en laindustria) el contador de programa se queda atrapado dentro de un bucle infinito, el valor del registro continuar aumentado por eltemporizador perro guardin alcanzar el mximo valor, el registro se desbordar y, aleluya! Ocurre el reinicio!

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    CONVERTIDOR A/D

    Las seales del mundo real son muy diferentes de lasque entiende el microcontrolador (ceros y unos), asque deben ser convertidas para que el microcontroladorpueda entenderlas. Un convertidor analgico-digital es uncircuito electrnico encargado de convertir las sealescontinuas en nmeros digitales discretos. En otraspalabras, este circuito convierte un nmero real en unnmero binario y se lo enva a la CPU para serprocesado. Este mdulo se utiliza para medir el voltajeen el pin de entrada.

    El resultado de esta medicin es un nmero (el valor digital) utilizado y procesado ms tarde en el programa.

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    ARQUITECTURA INTERNA

    Todos los microcontroladores actuales utilizan uno de dos modelos bsicos de arquitectura denominados Harvard y von-Neumann.

    Son dos maneras diferentes del intercambio de datos entre la CPU y la memoria.

    Arquitectura de von-Neumann

    Los microcontroladores que utilizan la arquitectura von- Neumann disponen de un solo bloquede memoria y de un bus de datos de 8 bits. Como todos los datos se intercambian por mediode estas 8 lneas, este bus est sobrecargado, y la comunicacin por si misma es muy lenta eineficaz. La CPU puede leer una instruccin o leer/escribir datos de/en la memoria. Los dosprocesos no pueden ocurrir a la vez puesto que las instrucciones y los datos utilizan el mismobus. Por ejemplo, si alguna lnea de programa dice que el registro de la memoria RAMllamado SUM debe ser aumentado por uno (instruccin: incf SUMA), el microcontroladorhar lo siguiente:

    El mismo bus de datos se utiliza para todas estas operaciones intermedias.

    ARQUITECTURA DE HARVARD

    Los microcontroladores que utilizan esta arquitectura disponen dedos buses de datos diferentes. Uno es de 8 bits de ancho yconecta la CPU con la memoria RAM. El otro consiste en variaslneas (12, 14 o 16) y conecta a la CPU y la memoria ROM. Porconsiguiente, la CPU puede leer las instrucciones y realizar elacceso a la memoria de datos a la vez. Puesto que todos losregistros de la memoria RAM son de 8 bits de ancho, todos losdatos dentro del microcontrolador que se intercambian son de lamisma anchura. Durante el proceso de la escritura de programa,slo se manejan los datos de 8 bits. En otras palabras, todo lo queusted podr cambiar en el programa y a lo que podr afectar serde 8 bits de ancho. Todos los programas escritos para estos

    1. Leer la parte de la instruccin de programa que especifica QU es lo que debe realizar (en este caso es lainstruccin para incrementar incf)

    2. Seguir leyendo la misma instruccin que especifica sobre CUL dato lo debe realizar (en este caso es elcontenido del registro SUMA)

    3. Despus de haber sido incrementado, el contenido de este registro se debe escribir en el registro del que fueledo (direccin del registro SUMA)

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    microcontroladores sern almacenados en la memoria ROMinterna del microcontrolador despus de haber sido compilados acdigo mquina. No obstante, estas localidades de memoria ROMno tienen 8, sino 12, 14 o 16 bits. 4, 6 o 8 bits adicionales representan una instruccin que especifica a la CPU qu hacer con los datos de8 bits.

    Las ventajas de este diseo son las siguientes:

    Todos los datos en el programa son de un byte (8 bits) de ancho. Como un bus de datos utilizado para lectura deprograma tiene unas lneas ms (12, 14 o 16), tanto la instruccin como el dato se pueden leer simultneamente alutilizar estos bits adicionales. Por eso, todas las instrucciones se ejecutan en un ciclo salvo las instrucciones desalto que son de dos ciclos.El hecho de que un programa (la ROM) y los datos temporales (la RAM) estn separados, permite a la CPU poderejecutar dos instrucciones simultneamente. Dicho de manera sencilla, mientras que se realiza la lectura o escriturade la RAM (que marca el fin de una instruccin), la siguiente instruccin se lee por medio de otro bus.En los microcontroladores que utilizan la arquitectura de von-Neumann, nunca se sabe cunta memoria ocuparalgn programa. Generalmente, la mayora de las instrucciones de programa ocupan dos localidades de memoria(una contiene informacin sobre QU se debe realizar, mientras que la otra contiene informa cin sobre CUL datose debe realizar). Sin embargo, esto no es una frmula rgida, sino el caso ms frecuente. En los microcontroladoresque utilizan una arquitectura Harvard, el bus de la palabra de programa es ms ancho que un byte, lo que permiteque cada palabra de programa est compuesto por una instruccin y un dato. En otras palabras, una localidad dememoria - una instruccin de programa.

    JUEGO DE INSTRUCCIONES

    El nombre colectivo de todas las instrucciones que puede entender el microcontrolador es llamadoJuego de Instrucciones. Cuando se escribe un programa en ensamblador, en realidad seespecifican instrucciones en el orden en el que deben ser ejecutadas. La restriccin principal es elnmero de instrucciones disponibles. Los fabricantes aceptan cualquiera de los dos enfoquesdescritos a continuacin:

    RISC (Reduced Instruction Set Computer) - Computadora con Juego de Instrucciones Reducidas

    En este caso la idea es que el microcontrolador reconoce y ejecuta slo operaciones bsicas (sumar, restar, copiar etc...) Las operacionesms complicadas se realizan al combinar stas (por ejemplo, multiplicacin se lleva a cabo al realizar adicin sucesiva). Es como intentarexplicarle a alguien con pocas palabras cmo llegar al aeropuerto en una nueva ciudad. Sin embargo, no todo es tan oscuro. Adems, elmicrocontrolador es muy rpido as que no es posible ver todas las acrobacias aritmticas que realiza. El usuario slo puede ver elresultado final de todas las operaciones. Por ltimo, no es tan difcil explicar dnde est el aeropuerto si se utilizan las palabras adecuadastales como: a la derecha, a la izquierda, el kilmetro etc.

    CISC (Complex Instruction Set Computer) - Computadoras con un juego de instrucciones complejo

    CISC es opuesto a RISC! Los microcontroladores diseados para reconocer ms de 200 instrucciones diferentes realmente pueden realizarmuchas cosas a alta velocidad. No obstante, uno debe saber cmo utilizar todas las posibilidades que ofrece un lenguaje tan rico, lo que noes siempre tan fcil...

    CMO ELEGIR UN MICROCONTROLADOR?

    Bueno, si usted es principiante, y ha tomado decisin de trabajar con los microcontroladores. Felicitaciones por la eleccin! No obstante, a

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    primera vista, no es fcil la eleccin del microcontrolador ms adecuado como parece a la primera vista. El problema no es el pequeorango de dispositivos a elegir, sino todo lo contrario!

    Antes de empezar a disear un dispositivo basado en un microcontrolador, tome en cuenta lo siguiente: cuntas entradas/lneas sonnecesarias para su funcionamiento, realizara el dispositivo otras operaciones adems encender/apagar un rel, necesita algn moduloespecializado tal como el de comunicacin en serie, convertidor A/D etc. Cuando usted tiene una clara imagen de lo que quiere, el rango deseleccin se reduce considerablemente, y le queda pensar en el precio. Va a tener varios dispositivos? Varios cientos? Un milln? Detodos modos ahora es ms claro.

    Si est pensando en todas estas cosas por primera vez, todo le parecer un poco confuso. Por esa razn, vaya paso a paso. Antes quenada, seleccione al fabricante, es decir, la familia de microcontroladores que ofrece. Luego, aprenda a trabajar con un modelo particular.Slo aprenda lo que necesite aprender, no entre demasiado en detalles. Resuelva el problema especfico y le pasar una cosa increble -ser capaz de manejar cualquier modelo del mismo fabricante...

    Ms o menos, todo se parece a montar en bicicleta: despus de varias cadas inevitables en el principio, ser capaz de mantener elequilibrio y montar en cualquier otra bicicleta. Por supuesto, nunca se olvida tanto de montar en bicicleta, como de la destreza deprogramacin!

    1.4 MICROCONTROLADORES PIC

    Los microcontroladores PIC desarrollados por Microchip Technology son probablemente la mejor opcin si es principiante. Hay variasrazones por lo que esto es verdadero...

    El nombre verdadero de este microcontrolador es PICmicro (Peripheral Interface Controller), conocido bajo el nombre PIC. Su primerantecesor fue creado en 1975 por la compaa General Instruments. Este chip denominado PIC1650 fue diseado para propsitoscompletamente diferentes. Diez aos ms tarde, al aadir una memoria EEPROM, este circuito se convirti en un verdaderomicrocontrolador PIC. Hace unos pocos aos la compaa Microchip Technology fabric la 5 billonsima muestra. Si est interesado enaprender ms sobre eso, siga leyendo.

    If you are interested in learning more about it, just keep on reading.

    La idea principal de este libro es proporcionar la informacin necesaria al usuario para que sea capaz de utilizar los microcontroladores enla prctica despus de leerlo. Para evitar explicaciones pesadas y las historias infinitas sobre las caractersticas tiles de losmicrocontroladores diferentes, este libro describe el funcionamiento de un modelo particular que pertenece a la clase media alta. EsPIC16F887 - bastante poderoso para ser digno de atencin y bastante simple para poder ser utilizado por cualquiera. As, los siguientescaptulos describen este microcontrolador en detalle y tambin se refieren a la familia PIC entera.

    Familia ROM[Kbytes]RAM

    [bytes] PinesFrecuenciade reloj.[MHz]

    EntradasA/D

    Resolucindel

    convertidorA/D

    Comparadores Temporizadoresde 8/16 bitsComunicacin

    serialSalidasPWM Otros

    Arquitectura de la gama baja de 8 bits, palabra de instruccin de 12 bits

    PIC10FXXX 0.375 -0.75 16 - 24 6 - 8 4 - 8 0 - 2 8 0 - 1 1 x 8 - - -

    PIC12FXXX 0.75 -1.5 25 - 38 8 4 - 8 0 - 3 8 0 - 1 1 x 8 - - EEPROM

    PIC16FXXX 0.75 - 3 25 -13414 -44 20 0 - 3 8 0 - 2 1 x 8 - - EEPROM

    PIC16HVXXX 1.5 25 18 -20 20 - - - 1 x 8 - -Vdd =15V

    Arquitectura de la gama media de 8 bits, palabra de instruccin de 14 bits

    PIC12FXXX 1.75 -3.564 -128 8 20 0 - 4 10 1 1 - 2 x 8 1 x 16 - 0 - 1 EEPROM

    PIC12HVXXX 1.75 64 8 20 0 - 4 10 1 1 - 2 x 8 1 x 16 - 0 - 1 -

    PIC16FXXX 1.75 - 14 64 -36814 -64 20 0 - 13 8 or 10 0 - 2 1 - 2 x 8 1 x 16 USART I2C SPI 0 - 3 -

    PIC16HVXXX 1.75 -3.564 -128

    14 -20 20 0 - 12 10 2 2 x 8 1 x 16 USART I2C SPI - -

    Arquitectura de la gama alta de 8 bits, palabra de instruccin de 16 bits

    PIC18FXXX 4 - 128 256 -393618 -80 32 - 48 4 - 16 10 or 12 0 - 3

    0 - 2 x 8 2 - 3 x16

    USB2.0CAN2.0 USART

    I2C SPI0 - 5 -

    PIC18FXXJXX 8 - 128 1024 -393628 -100 40 - 48 10 - 16 10 2

    0 - 2 x 8 2 - 3 x16

    USB2.0 USARTEthernet I2C

    SPI2 - 5 -

    PIC18FXXKXX 8 - 64 768 -393628 -44 64 10 - 13 10 2 1 x 8 3 x 16 USART I2C SPI 2 -

    Todos los microcontroladores PIC utilizan una arquitectura Harvard, lo que quiere decir que su memoria de programa est conectada a laCPU por ms de 8 lneas. Hay microcontroladores de 12, 14 y 16 bits, dependiendo de la anchura del bus. La tabla anterior muestra lascaractersticas principales de estas tres categoras.

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    Como se puede ver en la tabla de la pgina anterior, salvo los monstruos de 16 bits PIC 24FXXX y PIC 24HXXX - todos losmicrocontroladores tienen la arquitectura Harvard de 8 bits y pertenecen a una de las tres grandes grupos. Por eso, dependiendo deltamao de palabra de programa existen la primera, la segunda y la tercera categora de microcontroladores, es decir microcontroladores de12, 14 o 16 bits. Puesto que disponen del ncleo similar de 8 bits, todos utilizan el mismo juego de instrucciones y el esqueleto bsico dehardware conectado a ms o menos unidades perifricas.

    Los microcontroladores PIC con palabras de programa de 14 bits parecen ser la mejor opcin para los principiantes. Aqu est el porqu...

    JUEGO DE INSTRUCCIONES

    El juego de instrucciones para los microcontroladores 16F8XX incluye 35 instrucciones en total. La razn para un nmero tan reducido deinstrucciones yace en la arquietectura RISC. Esto quiere decir que las instrucciones son bien optimizadas desde el aspecto de la velocidadoperativa, la sencillez de la arquitectura y la compacidad del cdigo. Lo malo de la arquitectura RISC es que se espera del programador quehaga frente a estas instrucciones. Por supuesto, esto es relevante slo si se utiliza el lenguaje ensamblador para la programacin. Este librose refiere a la programacin en el lenguaje de alto nivel C, lo que significa que la mayor parte del trabajo ya fue hecho por alguien ms. As,slo se tienen que utilizar instrucciones relativamente simples.

    TIEMPO DE EJECUCIN DE INSTRUCCIONES

    Todas las instrucciones se ejecutan en un ciclo. La nicas excepciones pueden ser las instrucciones de ramificacin condicional o lasinstrucciones que cambian el contenido del contador de programa. En ambos casos, dos ciclos de reloj son necesarios para la ejecucin dela instruccin, mientras que el segundo ciclo se ejecuta como un NOP (No operation). Las instrucciones de un ciclo consisten en cuatrociclos de reloj. Si se utiliza un oscilador de 4 MHz, el tiempo nominal para la ejecucin de la instruccin es 1S. En cuanto a lasinstrucciones de ramificacin, el tiempo de ejecucin de la instruccin es 2S.

    Juego de instrucciones de los microcontroladores PIC de 14 bits:

    I N S T R U C C I N D E S C R I P C I N O P E R A C I N B A N D E R A C L K *

    Instrucciones para la transmisin de datos

    MOVLW k Mover literal a W k -> w 1

    MOVWF f Mover el contenido de W a f W -> f 1

    MOVF f,d Mover el contenido de f a d f -> d Z 1 1, 2

    CLRW Borrar el contenido de W 0 -> W Z 1

    CLRF f Borrar el contenido de f 0 -> f Z 1 2

    SWAPF f,d Intercambiar de nibbles en f f(7:4),(3:0) ->f(3:0),(7:4) 1 1, 2

    Instrucciones aritmtico - lgicas

    ADDLW k Sumar literal a W W+k -> W C, DC, Z 1

    ADDWF f,d Sumar el contenido de W y f W+f -> d C, DC ,Z 1 1, 2

    SUBLW k Restar W de literal k-W -> W C, DC, Z 1

    SUBWF f,d Restar W de f f-W -> d C, DC, Z 1 1, 2

    ANDLW k AND W con literal W AND k -> W Z 1

    ANDWF f,d AND W con f W AND f -> d Z 1 1, 2

    IORLW k OR inclusivo de W con literal W OR k -> W Z 1

    IORWF f,d OR inclusivo de W con f W OR f -> d Z 1 1, 2

    XORWF f,d OR exclusivo de W con literal W XOR k -> W Z 1 1, 2

    XORLW k OR exclusivo de W con f W XOR f -> d Z 1

    INCF f,d Sumar 1 a f f+1 -> f Z 1 1, 2

    DECF f,d Restar 1 a f f-1 -> f Z 1 1, 2

    RLF f,d Rotar F a la izquierda a travs del bit deAcarreo C 1 1, 2

    RRF f,d Rotar F a la derecha a travs del bit deAcarreo C 1 1, 2

    COMF f,d Complementar f f -> d Z 1 1, 2

    Instrucciones orientadas a bit

    BCF f,b Poner a 0 el bit b del registro f 0 -> f(b) 1 1, 2

    BSF f,b Poner a 1 el bit b del registro f 1 -> f(b) 1 1, 2

    Instrucciones de control de programa

    BTFSC f,b Saltar si bit b de registro f es 0 Skip if f(b) = 0 1 (2) 3

    BTFSS f,b Saltar si bit b de reg. f es 1 Skip if f(b) = 1 1 (2) 3

    1, 2,

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    DECFSZ f,d Disminuir f en 1. Saltar si el resultado es 0 f-1 -> d skip if Z = 1 1 (2) 3

    INCFSZ f,d Incrementar f en 1. Saltar si el resultado es 1 f+1 -> d skip if Z = 0 1 (2) 1, 2,3

    GOTO k Saltar a una direccin k -> PC 2

    CALL k Llamar a una subrutina PC -> TOS, k -> PC 2

    RETURN Retornar de una subrutina TOS -> PC 2

    RETLW k Retornar con literal en W k -> W, TOS -> PC 2

    RETFIE Retornar de una interupcin TOS -> PC, 1 -> GIE 2

    Otras instrucciones

    NOP No operacin TOS -> PC, 1 -> GIE 1

    CLRWDT Reiniciar el temporizador perro guardin 0 -> WDT, 1 -> TO, 1 ->PD TO, PD 1

    SLEEP Poner en estado de reposo 0 -> WDT, 1 -> TO, 0 ->PD TO, PD 1

    *1 Si un registro de E/S est modificado, el valor utilizado ser el valor presentado en los pines del microcontrolador.*2 Si la instruccin se ejecuta en el registro TMR y si d=1, el pre-escalador ser borrado.*3 Si la instruccin se ejecuta en el registro TMR y si d=1, el pre-escalador ser borrado.

  • El mundo de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/79/capitulo-1-el-mundo-de-los-microcontroladores/[19/06/2012 11:00:11 a.m.]

    table of contents | next chapter

    Arquitectura de los microcontroladores PIC de 8 bits. Cules de estos mdulos pertenecern al microcontrolador, depender del tipo demicrocontrolador.

    Related Links: Products News Forums Distributors About Us Legal Information Product Archive Contact Us

    Copyright 19982012. MikroElektronika. All rights reserved. All trade and/or services marks mentioned are the property of their respective owners.

  • Programacin de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/80/capitulo-2-programacion-de-los-microcontroladores/[19/06/2012 11:08:41 a.m.]

    TOC Capitulo 1 Capitulo 2 Capitulo 3 Capitulo 4 Apndice A

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

    Book: PIC Microcontrollers - Programming in C

    Capitulo 2 - Programacin de los microcontroladores

    Usted seguramente sabe que no es suficiente slo conectar el microcontrolador a los otros componentes y encender una fuente dealimentacin para hacerlo funcionar, verdad? Hay que hacer algo ms. Se necesita programar el microcontrolador. Si cree que esto escomplicado, est equivocado. Todo el procedimiento es muy simple. Basta con leer el texto para entender de lo que estamos hablando.

    2.1 LENGUAJES DE PROGRAMACIN2.2 CARACTERSTICAS PRINCIPALES DEL MIKROC2.3 TIPOS DE DATOS EN MIKROC2.4 VARIABLES Y CONSTANTES2.5 OPERADORES2.6 ESTRUCTURAS DE CONTROL2.7 TIPOS DE DATOS AVANZADOS2.8 FUNCIONES2.9 CARACTERSTICAS PRINCIPALES DEL PREPROCESADOR2.10 MIKROC PRO FOR PIC2.11 PROGRAMAR LOS PIC UTILIZANDO MIKROC PRO FOR PIC

    2.1 LENGUAJES DE PROGRAMACIN

    LENGUAJE ENSAMBLADOR

    Como el proceso de escribir un cdigo ejecutable eraconsiderablemente arduo, en consecuencia fuecreado el primer lenguaje de programacindenominado ensamblador (ASM). Siguiendo lasintaxis bsica del ensamblador, era ms fcil escribiry comprender el cdigo. Las instrucciones enensamblador consisten en las abreviaturas consignificado y a cada instruccin corresponde unalocalidad de memoria. Un programa denominadoensamblador compila (traduce) las instrucciones dellenguaje ensamblador a cdigo mquina (cdigobinario).

    HEste programa compila instruccin a instruccin sin optimizacin. Como permite controlar en detalle todos los procesos puestos en marchadentro del chip, este lenguaje de programacin todava sigue siendo popular.

    Ventajas de lenguajes de programacin de alto nivel

    A 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, hacindolomuy largo y difcil de manejar.Cada tipo de microcontrolador tiene su propio conjunto de instrucciones que un programador tiene que conocer para

    Featured Development Tools

    Featured Compilers

    EasyPIC v7 DevelopmentSystem

    EasyPIC v7 is the seventh generationof our famous PIC developmentboard. It is the product of accumulatedknowledge over the past 10 years, andits state of the art of design,functionality and quality. Board comeswith PIC18F45K22 device. [moreinfo]

    mikroC PRO for PIC

    Popular PIC micocontrollers areloved by hobbyists and 8-bit geeks.mikroC helps you bring your ideas tolife easy as never before. [more info]

    Products Solutions Kits Easy Buy Support Downloads

  • Programacin de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/80/capitulo-2-programacion-de-los-microcontroladores/[19/06/2012 11:08:41 a.m.]

    escribir un programaUn programador tiene que conocer el hardware del microcontrolador para escribir un programa

    Programa 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 delensamblador. En lenguajes de programacin de alto nivel varias instrucciones en ensamblador se sustituyen por una sentencia. Elprogramador ya no tiene que conocer el conjunto de instrucciones o caractersticas del hardware del microcontrolador utilizado. Ya no esposible conocer exactamente cmo se ejecuta cada sentencia, de todas formas ya no importa. Aunque siempre se puede insertar en elprograma una secuencia escrita en ensamblador.

    Si alguna vez ha escrito un programa para un microcontrolador PIC en lenguaje ensamblador, probablemente sepa que la arquitectura RISCcarece de algunas instrucciones. Por ejemplo, no hay instruccin apropiada para multiplicar dos nmeros. Por supuesto, para cadaproblema hay una solucin y ste no es una excepcin gracias a la aritmtica que permite realizar las operaciones complejas aldescomponerlas en un gran nmero operaciones ms simples. En este caso, la multiplicacin se puede sustituir con facilidad por adicinsucesiva (a x b = a + a + a + ... + a). Ya estamos en el comienzo de una historia muy larga... No hay que preocuparse al utilizar uno deestos lenguajes de programacin de alto nivel como es C, porque el compilador encontrar automticamente la solucin a ste problema yotros similares. Para multiplicar los nmeros a y b, basta con escribir a*b.

    Lenguaje C

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

  • Programacin de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/80/capitulo-2-programacion-de-los-microcontroladores/[19/06/2012 11:08:41 a.m.]

    La figura anterior es un ejemplo general de lo que sucede durante la compilacin de programa de un lenguaje de programacin de alto nivela bajo nivel.

    2.2 CARACTERSTICAS PRINCIPALES DEL MIKROC

    A continuacin vamos a presentar a los elementos principales del lenguaje mikroC desarrollado por Mikroelektronika. Este lenguaje es muysimilar al C estndar, no obstante en determinados aspectos difiere del ANSI estndar en algunas caractersticas. Algunas de estasdiferencias se refieren a las mejoras, destinadas a facilitar la programacin de los microcontroladores PIC, mientras que las dems son laconsecuencia de la limitacin de la arquitectura del hardware de los PIC. Aqu vamos a presentar caractersticas especficas del lenguajemikroC en la programacin de los microcontroladores PIC. El trmino C se utilizar para referirse a las caractersticas comunes de loslenguajes C y mikroC.

    Este libro describe una aplicacin muy concreta del lenguaje de programacin C utilizado en el compilador mikroC PRO for PIC. En estecaso, el compilador se utiliza para la programacin de los microcontroladores PIC.

    FASES DE COMPILACIN

    El proceso de compilacin consiste en varios pasos y se ejecuta automticamente por el compilador. Por con, un conocimiento bsico delfuncionamiento 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 utilizaautomticamente por el compilador al iniciarse el proceso de la compilacin. El compilador busca las directivas del preprocesador (quesiempre empiezan por #) dentro del cdigo y modifica el cdigo fuente de acuerdo con las directivas. En esta fase se llevan a caboinclusin de archivos, definicin de constantes y macros etc, lo que facilita el proceso. Ms tarde vamos a describir estas directivas endetalle. El analizador sintctico (parser) elimina toda la informacin intil del cdigo (comentarios, espacios en blanco). Luego, elcompilador traduce el cdigo a un archivo binario denominado archivo .mcl. El enlazador (linker) recupera toda la informacin requeridapara ejecutar el programa de los archivos externos y la agrupa en un solo archivo (.dbg). Adems, un proyecto puede contener ms de unarchivo fuente y el programador puede utilizar funciones predefinidas y agrupadas dentro de los archivos denominados libreras. Por ltimo,el generador .hex produce un archivo .hex. Es el archivo que se va a cargar en el microcontrolador.

  • Programacin de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/80/capitulo-2-programacion-de-los-microcontroladores/[19/06/2012 11:08:41 a.m.]

    Los lenguajes de programacin de alto nivel como es C le permiten solucionareste problema con facilidad al escribir cuatro funciones que se ejecutarncclicamente sin parar.

    La idea general es de dividir el problema en varios trozos, de los que cada unose puede escribir como una sola funcin. Todos los programas escritos enmikroC contienen por lo menos una funcin llamada main() que encierra entrellaves {} las sentencias a ser ejecutadas. Esto es la primera funcin a serejecutada al iniciarse la ejecucin de programa. Las otras funciones se puedenllamar dentro de la funcin main. En otras palabras, podemos decir que la funcinmain() es obligatoria, mientras que las dems son opcionales. Si todava no haescrito un programa en C, es probable que todo le resulte confuso. No sepreocupe, acptelo tal como es por el momento y ms tarde entender la sintaxis.

    El proceso entero de la compilacin que incluye todos los pasos anteriormente descritos se le denomina building.

    ESTRUCTURA DE PROGRAMA

    La idea principal de escribir un programa en C es de romper un problema mayor en varios trozos ms pequeos. Supongamos que esnecesario escribir un programa para el microcontrolador para medir la temperatura y visualizar los resultados en un LCD. El proceso demedicin se realiza por un sensor que convierte temperatura en voltaje. El microcontrolador utiliza el convertidor A/D para convertir estevoltaje (valor analgico) en un nmero (valor digital) que luego se enva al LCD por medio de varios conductores. En consecuencia, elprograma se divide en cuatro partes, de las que cada una corresponde a una accin especfica:

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

    1. Activar y configurar el convertidor A/D incorporado;

    2. Medir el valor analgico;

    3. Calcular temperatura; y

    4. Enviar los datos en el formato apropiado al LCD;

  • Programacin de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/80/capitulo-2-programacion-de-los-microcontroladores/[19/06/2012 11:08:41 a.m.]

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

  • Programacin de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/80/capitulo-2-programacion-de-los-microcontroladores/[19/06/2012 11:08:41 a.m.]

    COMENTARIOS

    Los comentarios son las partes del programa utilizados para aclarar las instrucciones de programa o para proporcionar ms informacin alrespecto. El compilador no hace caso a los comentarios y no los compila al cdigo ejecutable. Dicho de manera sencilla, el compilador escapaz de reconocer los caracteres especiales utilizados para designar dnde los comentarios comienzan y terminan y no hace nada decaso al texto entre ellos durante la compilacin. Hay dos tipos de tales caracteres. Unos designan los comentarios largos que ocupan variaslneas de programa marcados por la secuencia especial /*...*/, mientras que otros designan los comentarios cortos que caben en una solalnea //. 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 inclusolos programas simples sin utilizar los comentarios.

    2.3 TIPOS DE DATOS EN MIKROC

    En el lenguaje C, los datos tienen un tipo, o sea, cada dato utilizado en el programa debe tener su tipo especificado. Esto permite alcompilador conocer el tamao de dato (nmero de bytes requerido en la memoria) y su representacin. Hay varios tipos de datos que sepueden utilizar en el lenguaje de programacin mikroC dependiendo del tamao de dato y del rango de valores. La tabla muestra el rangode valores que los datos pueden tener cuando se utilizan en su forma bsica.

    T I P O D ED A T O D E S C R I P C I N

    T A M A O ( N M E R O D EB I T S ) R A N G O D E V A L O R E S

    char Texto (caracteres) 8 de 0 a 255

    int Valores enteros 16 de -32768 a 32767

    float Valores en punto flotante 32 de 1.1754943508210-38 a

    6.805647744071038

    double Valores en punto flotante de dobleprecisin 32de 1.1754943508210-38 a

    6.805647744071038

  • Programacin de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/80/capitulo-2-programacion-de-los-microcontroladores/[19/06/2012 11:08:41 a.m.]

    *Debido a las limitaciones impuestas por el hardware del microcontrolador, es imposible alcanzar una mayor precisin de datos que la deltipo 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 delos bytes de memoria necesarios. Por defecto, los datos de tipo int son con signo, mientras que los de tipo char son sin signo. El calificadorsigned (con signo) indica que el dato puede ser positivo o negativo. El prefijo unsigned indica que el dato puede ser slo positivo. Note queel prefijo es opcional.

    T I P O D ED A T O

    T I P O D E D A T O C O NP R E F I J O

    T A M A O ( N M E R O D EB I T S )

    R A N G O D EV A L O R E S

    char signed char 8 de -128 a 128

    int

    unsigned int 16 de 0 a 65535

    short int 8 de 0 a 255

    signed short int 8 de -128 a 127

    long int 32 de 0 a 4294967295

    signed long int 32 de -2147483648 a2147483647

    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 0a 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, sepuede 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 octalesempiezan 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:0B10011111

    0x11 // formato hexadecimal equivale a decimal 1711 // formato decimal-152 // formato decimal011 // formato octal equivale a decimal 9 0b11 // formato binario equivale a decimal 3

    Tipo 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 variasmaneras. 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^34

    Tipo 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 datode 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 CONSTANTES

  • Programacin de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/80/capitulo-2-programacion-de-los-microcontroladores/[19/06/2012 11:08:41 a.m.]

    Definiciones

    Una variable es un objeto nombrado capaz de contener un dato que puede ser modificado durante la ejecucin de programa. En C, lasvariables tienen tipo, que significa que es necesario especificar el tipo de dato que se le asigna a una variable (int, float etc.). Las variablesse 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 15

    Una constante tiene las mismas caractersticas que una variable excepto el hecho de que su valor asignado no puede ser cambiadodurante la ejecucin de programa. A diferencia de las variables, las constantes se almacenan en la memoria Flash del microcontrolador paraguardar el mayor espacio posible de memoria RAM. El compilador las reconoce por el nombre y el prefijo const. En mikroC, el compiladorreconoce 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 constante

    Cada variable o constante debe tener un identificador que lo distingue de otras variables y constantes. Refirase a los ejemplos anteriores, ay A son identificadores.

    Reglas para nombrar

    En 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 carctersubrayado '_'. El compilador es sensible a la diferencia entre minsculas y maysculas. Los nombres de funciones yvariables se escriben con frecuencia con minsculas, mientras que los nombres de constantes se escriben conmaysculas.Los identificadores no pueden empezar con un dgito.Los identificadores no pueden coincidir con las palabras clave del lenguaje mikroC, porque son las palabrasreservadas del compilador.

    El compilador mikroC reconoce 33 palabras clave:

    M I K R O C - P A L A B R A S C L A V E

    absolute data if return typedef

    asm default inline rx typeid

    at delete int sfr typename

    auto do io short union

    bit double long signed unsigned

    bool else mutable sizeof using

    break enum namespace static virtual

    case explicit operator struct void

    catch extern org switch volatile

    char false pascal template while

    class float private this

    code for protected throw

    const friend public true

    continue goto register try

    Ejemplos de los identificadores vlidos e invlidos:

    temperatura_V1 // OKPresin // OKno_corresponder // OKdat2string // OKSuM3 // OK

  • Programacin de los microcontroladores - Microcontroladores PIC Programacin en C con ejemplos

    http://www.mikroe.com/eng/chapters/view/80/capitulo-2-programacion-de-los-microcontroladores/[19/06/2012 11:08:41 a.m.]

    _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 blanco

    Declaracin de variables

    Cada variable debe ser declarada antes de ser utilizada en el programa. Como las variables se almacenan en la memoria RAM, esnecesario reservar el espacio para ellas (uno, dos o ms bytes). Al escribir un programa, usted sabe qu tipo de datos quiere utilizar y qutipo de datos espera como resultado de una operacin, mientras que el compilador no lo sabe. No se olvide de que el programa maneja lasvariables con los nombres asignados. El compilador las reconoce como nmeros en la memoria RAM sin conocer su tamao y formato. Paramejorar 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 peso

    Un mtodo ms rpido se le denomina declaracin con inicializacin (asignaci