manual pic micro control adores en basic

Upload: diego-andrade-zeas

Post on 15-Jul-2015

557 views

Category:

Documents


1 download

TRANSCRIPT

PIC Microcontrollers - Programming in BASICy y y y y y

TOC Capitulo 1 Capitulo 2 Captulo 3 Captulo 4 Apndice A

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

y y y y

1.1 Introduccin 1.2 Nmeros, nmeros, nmeros... 1.3 Detalles importantes 1.4 Microcontroladores PIC

Los principiantes en electrnica creen que un microcontrolador es igual a un microprocesador. Esto no es cierto. Difieren uno del otro en muchos sentidos. La primera y la ms importante diferencia es su funcionalidad. Para utilizar al microprocesador en una aplicacin real, se debe de conectar con otros componentes, en primer lugar con la memoria. Aunque el microprocesador se considera una mquina de computacin poderosa, no est preparado para la comunicacin con los dispositivos perifricos que se le conectan. Para que el microprocesador se comunique con algn perifrico, se deben utilizar los circuitos especiales. As era en el principio y esta 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 de otros componentes especializados para su aplicacin, porque todos los circuitos necesarios, que de otra manera correspondan a los perifricos, ya se encuentran incorporados. As se ahorra tiempo y espacio necesario para construir un dispositivo. Para entender con ms facilidad las razones del xito tan grande de los microcontroladores, vamos a prestar atencin al siguiente ejemplo. Hace unos 10 aos, disear un dispositivo electrnico de control de un ascensor de un edificio de varios pisos era muy difcil, incluso para un equipo de expertos. Ha pensado alguna vez en qu requisitos debe cumplir un simple ascensor? Cmo lidiar con la situacin cuando dos 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 proceso meticuloso de disear los dispositivos adecuados utilizando un gran nmero de los chips especializados. Este proceso puede tardar semanas o meses, dependiendo de la complejidad del dispositivo. Cuando haya terminado el proceso, llega la hora de disear una placa de circuito impreso y de montar el dispositivo.Un dispositivo enorme! Es otro trabajo difcil y tardado. Por ltimo, cuando todo est terminado y probado adecuadamente, pasamos al momento crucial y es cuando uno se concentra, respira profundamente y enciende la fuente de alimentacin. Esto suele ser el punto en el que la fiesta se convierte en un verdadero trabajo puesto que los dispositivos electrnicos casi nunca funcionan

apropiadamente desde el inicio. Preprese para muchas noches sin dormir, correcciones, mejoras... y no se olvide de que todava estamos 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 ha hecho, muchas compaas de desarrollo estarn interesadas en su trabajo. Por supuesto, si tiene suerte, cada da le traer una oferta de trabajo de un nuevo inversionista. Sin embargo, si lo requieren para trabajar en el control de los elevadores de un nuevo edificio que tiene cuatro pisos ms de los que ya maneja su sistema de control. Sabe cmo proceder? Cree acaso que se pueden controlar las demandas de sus clientes? Pensamos que usted va a construir un dispositivo universal que se puede utilizar en los edificios de 4 a 40 pisos, una obra maestra de electrnica. Bueno, incluso si usted consigue construir una joya electrnica, su inversionista le esperarar delante de la puerta pidiendo 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. Por desgracia, todo lo que se ha dicho hasta ahora sucede en la realidad. Esto es lo que dedicarse a la ingeniera electrnica realmente significa. Es as como se hacan las cosas hasta aparicin de los microcontroladores diseados - pequeos, potentes y baratos. Desde ese momento 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 est incorporado en un slo chip. Los microcontroladores ofrecen una amplia gama de aplicaciones y slo algunas se exploran normalmente. Le toca a usted decidir qu quiere que haga el microcontrolador y cargar un programa en l con las instrucciones apropiadas. Antes de encender el dispositivo es recomendable verificar su funcionamiento con ayuda de un simulador. Si todo funciona como es debido, incorpore el microcontrolador en el sistema. Si alguna vez necesita cambiar, mejorar o actualizar el programa, hgalo. Hasta cundo? Hasta quedar satisfecho. Eso puede realizarse sin ningn problema.

Saba usted que todas las personas pueden ser clasificadas en uno de 10 grupos, en los que estn familiarizados con el sistema de numeracin 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 este libro (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 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 significa esto realmente? Por qu utilizamos exactamente estos nmeros 100, 101 y 102 ? Por qu es siempre el nmero 10? Es porque utilizamos 10 dgitos diferentes (0, 1, 2...8, 9). En otras palabras, es porque utilizamos el sistema de numeracin en base 10, es decir el sistema 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 nada especial, seguiramos utilizando los mismos nmeros de la misma manera que utilizamos hoy en da, no obstante ellos pareceran un poco diferentes. Por ejemplo: 11011010.Cuntas son realmente 11011010 pginas de un libro? Para entenderlo, siga la misma lgica como en el 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 sistema de 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 dos representaciones yace en el nmero de dgitos necesarios para escribir un nmero. Un dgito (2) se utiliza para escribir el nmero 2 en el sistema decimal, mientras que dos dgitos (1 y 0) se utilizan para escribir aquel nmero en el sistema binario. Ahora est de acuerdo que hay 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 con exactitud la diferencia entre dos magnitudes (dos valores de voltaje, por ejemplo), si son demasiado pequeos (ms pequeos que unos 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 a los 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. Es ms 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 se enfrenta perfectamente y realiza con facilidad todas las operaciones aritmticas. Evidentemente, se trata de electrnica que en realidad aplica 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 HEXADECIMALEn el principio del desarrollo de las computadoras era evidente que a la gente le costaba mucho trabajar con nmeros binarios. Por eso, se estableci un nuevo sistema de numeracin, que utilizaba 16 smbolos diferentes. Es llamado el sistema de numeracin hexadecimal. Este sistema 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 encaja perfectamente para lograr una mejor comprensin del tema.

El mayor nmero que puede ser representado con 4 dgitos binarios es el nmero 1111. Co-rresponde 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. Se da cuenta de la gran utilidad de estas equivalencias? El mayor nmero escrito con ocho dgitos binarios es a la vez el mayor nmero de dos dgitos en el sistema hexadecimal. Tenga en cuenta que una computadora utiliza nmeros binarios de 8 dgitos. Acaso se trata de una casualidad?

CDIGO BCDEl cdigo BCD (Binary-Coded Decimal - Cdigo binario decimal) es un cdigo binario utilizado para representar a los nmeros decimales. Consiste en nmeros binarios de 4 dgitos que representan los primeros diez dgitos (0, 1, 2, 3...8, 9). Aunque cuatro dgitos pueden hacer 16 combinaciones posibles en total, el cdigo BCD normalmente utiliza a las primeras diez.

CNVERSIN DE SISTEMAS DE NUMERACINEl 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 nmeros de un sistema de numeracin a otro, por ejemplo, cmo convertir una serie de ceros y unos a una forma de representacin comprensible para nosotros.

Conversin de Nmeros Binarios a DecimalesLos mismos dgitos en un nmero binario tienen ponderaciones diferentes lo que depende de sus posiciones dentro del nmero que estn representando. Adems, cada dgito puede contener 1 o 0, y su ponderacin se puede determinar con facilidad al contar su posicin empezando por la derecha. Para hacer una conversin de un nmero binario a decimal es necesario multiplicar los dgitos (0 o 1) con su ponderacin de posicin (20, 21, 22, 23 etc.) 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. Para los nmeros mayores, se deben utilizar los dgitos binarios adicionales. Por consiguiente, 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 la base 2 a la potencia n. Luego, al resultado se le resta 1. Por ejemplo, si n=4: 2 - 1 = 16 - 1 = 154

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

CONVERSIN DE NMEROS HEXADECIMALES A DECIMALESPara realizar una conversin de un nmero hexadecimal a decimal, cada dgito hexadecimal debe ser multiplicado con el nmero 16 elevado al valor de su posicin. Despus, el resultado obtenido se debe sumar. Por ejemplo:

CONVERSIN DE NMEROS HEXADCIMALES A BINARIOS

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

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.

MARCAR LOS NMEROS

El sistema de numeracin hexadecimal, junto con los sistemas binario y decimal, se consideran los ms importantes para nosotros. Es fcil realizar una conversin de cualquier nmero hexadecimal a binario, adems es fcil de recordarlo. Sin obstante, estas conversiones pueden provocar una confusin. Por ejemplo, qu significa en realidad la sentencia: Es necesario contar 110 productos en una cadena de montaje? 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. Los prefijos $ y 0x marcan los nmeros hexadecimales. Por ejemplo, el nmero hexadecimal 10AF se puede escribir como $10AF o 0x10AF. De manera similar, los nmeros binarios normalmente obtienen el prefijo %. Si un nmero no tiene ni sufijo ni prefijo se considera decimal. Desafortunadamente, esta forma de marcar los nmeros no es estandarizada, por consiguiente depende de la aplicacin concreta.

BITLa 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. La respuesta es - nada especial- un bit es un slo dgito binario. Similar a un sistema de numeracin decimal en el que los dgitos de un nmero no tienen la misma ponderacin (por ejemplo, los dgitos en el nmero 444 son los mismos pero tienen los valores diferentes), el significado 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 re-presentados en el sistema decimal. Simplemente, nos hemos acostumbrado tanto a utilizar los nmeros decimales que estas expresiones llegaron a ser comunes. Sera correcto decir por ejemplo, el valor del sexto bit en cualquier nmero binario equivale al nmero decimal 64. Pero todos somos humanos y los viejos hbitos mueren 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 las operaciones matemticas se pueden realizar por medio de ellos, como por medio de los nmeros decimales comunes. Similar a los dgitos de cualquier nmero, los dgitos de un byte no tienen el mismo significado. El bit del extremo izquierdo tiene la mayor ponderacin, por eso es denominado el bit ms significativo (MSB). El bit del extremo derecho tiene la menor ponderacin, por eso es denominado el bit menos significativo (LSB). Puesto que los 8 dgitos de un byte se pueden combinar de 256 maneras diferentes, el mayor nmero decimal que se puede 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 les denomina 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 un microprocesador. Cmo son los circuitos que realizan las operaciones matemticas complicadas y toman decisiones? Saba que sus esquemas, aparentemente complicadas consisten en slo unos pocos elementos diferentes, denominados circuitos lgicos o compuertas lgicas?

1.3 DETALLES IMPORTANTESEl funcionamiento de estos elementos es basado en los principios establecidos por el matemtico britnico George Boole en la mitad del siglo 19 - es decir, antes de la invencin de la primera bombilla. La idea principal era de expresar las formas lgicas por medio de las funciones algebraicas. Tal idea pronto se transform en un producto prctico que se convirti ms tarde en lo que hoy en da conocemos como circuitos lgicos Y (AND), O (OR) o NO (NOT). El principio de su funcionamiento es conocido como algebra de Boole.

CIRCUITOS LGICOSAlgunas instrucciones de programa funcionan de la misma manera que las compuertas lgicas. A continuacin vamos a explicar el principio de su funcionamiento.

Compuerta Y (AND)

Una compuerta lgica Y dispone de dos o ms entradas y de una salida. En este caso la compuerta utilizada dispone de slo dos entradas. Un uno lgico (1) aparecer en su salida slo en caso de que ambas entradas (A y B) sean llevadas a alto (1). La tabla a la derecha muestra la relacin entre las entradas y salidas de la compuerta Y.

El principio de funcionamiento es el mismo cuando la compuerta disponga de ms de dos entradas: la salida proporciona un uno lgico (1) slo si todas las entradas son llevadas a alto (1). Cualquier otra combinacin de voltajes de entrada proporcionar un cero lgico (0) en su salida. Utilizada en el programa, la operacin Y lgico es realizada por una instruccin de programa, de la que vamos a hablar ms tarde. Por ahora basta con conocer que Y lgico en un programa se refiere a la realizacin de este tipo de operacin sobre los bits correspondientes de dos registros diferentes.Compuerta O (OR)

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

En un programa, la operacin O lgico se realiza de la misma manera que la operacin Y lgico.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 s mismas y por eso es denominada inversor.

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

&2038(57$;252(;&/86,9$

La compuerta XOR (O EXCLUSIVA) es un poco complicada en comparacin con las dems. Representa una combinacin de todas las compuertas 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. La resta 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 obtener los resultados negativos.

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

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

En otras palabras, el estado de los bits de registros se fija dentro de programa, los registros SFR dirigen los pequeos circuitos dentro del microcontrolador, estos circuitos se conectan por los pines del microcontrolador a un dispositivo pe-rifrico utilizado para... Bueno, depende de usted.

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 o ms registros (denominados puertos) conectados a los pines en el microcontrolador. Por qu se denominan como

puertos de entrada/salida? Porque usted puede cambiar la funcin de cada pin como quiera. Por ejemplo, usted desea que su dispositivo encienda y apague los tres seales LEDs y que simultneamente monitoree el estado lgico de 5 sensores o botones de presin. Uno de los puertos debe estar configurado de tal manera que haya tres salidas (conectadas a los LEDs) y cinco entradas (conectadas a los sensores). Eso se realiza 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 la mayora de los microcontroladores la corriente obtenida de un pin es suficiente para activar un LED u otro dispositivo de baja corriente (10-20mA). Otra caracterstica importante de los pines es que pueden disponer de los resistores pull-up. Estos resistores conectan los pines al polo positivo del voltaje de la fuente de alimentacin y su efecto se puede ver al configurar el pin como una entrada conectada a un interruptor mecnico o a un botn de presin. Las ltimas versiones de los microcontroladores tienen las resistencias pullup configurables por software. Cada puerto de E/S normalmente est bajo el control de un registro SFR especializado, lo que significa que cada bit de ese registro determina el estado del pin correspondiente en el el microcontrolador. Por ejemplo, al escribir un uno lgico (1) a un bit del registro de control (SFR), el pin apropiado del puerto se configura automticamente como salida. Eso significa que el voltaje llevado a ese pin se puede leer 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 o 5V) corresponde al estado del bit apropiado del registro del puerto (0 o 1 lgico, respectivamente).

UNIDAD DE MEMORIALa unidad de memoria es una parte del microcontrolador utilizada para almacenar los datos. La manera ms fcil de explicarlo es compararlo con un armario grande con muchos cajones. Si marcamos los cajones claramente, ser fcil acceder a cualquiera de

sus

contenidos

al

leer

la

etiqueta

en

la

parte

delantera

del

cajn.

De manera similar, cada direccin de memoria corresponde a una localidad de memoria. El contenido de cualquier localidad se puede leer y se le puede acceder al direccionarla. La memoria se puede escribir en la localidad o leer.

Hay varios tipos de memoria dentro del microcontrolador:Memoria ROM (Read Only Memory) - memoria de slo lecturaLa memoria ROM se utiliza para guardar permanentemente el programa que se est ejecutando. El tamao de programa que se puede escribir depende del tamao de esta memoria. Los microcontroladores actuales normalmente utilizan el direccionamiento de 16 bits, que significa que son capaces de direccionar hasta 64 Kb de memoria, o sea 65535 localidades. Por ejemplo, si usted es principiante, su programa exceder pocas veces el lmite de varios cientos de instrucciones. Hay varios tipos de memoria ROM.

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

OTP ROM (One Time Programmable ROM) - ROM programable una sola vezLa memoria programable una sola vez permite descargar un programa en el chip, pero como dice su nombre, una sola vez. Si se detecta un error despus de descargarlo, lo nico que se puede hacer es descargar el programa correcto en otro chip.

UV EEPROM (ROM Erasable programmable ROM) - ROM programable borrable por rayos ultravioleta

El encapsulado de este microcontrolador tiene una ventana reconocible en la parte alta. Eso permite exponer la superficie del chip de silicio a la luz de ultravioleta y borrar el programa completamente en varios 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 nuestro punto de vista, desgraciadamente, de manera negativa... Memoria FlashEste tipo de memoria se invent en los aos 80 en los laboratorios de la compaa INTEL, como forma desarrollada de la memoria UV EPROM. Ya que es posible escribir y borrar el contenido de esta memoria prcticamente un nmero ilimitado de veces, los microcontroladores con memoria Flash son perfectos para estudiar, experimentar y para la fabricacin en pequea escala. Por la gran popularidad de esta memoria, la mayora de los microconroladores se fabrican con tecnologa flash hoy en da. Si usted va a comprar un microcontrolador, ste es en definitiva la opcin perfecta!

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

Memoria EEPROM (Electrically Erasable Programmable ROM) - ROM programable y borrable elctricamenteEl contenido de la EEPROM se puede cambiar durante el funcionamiento (similar a la RAM), pero se queda permanentemente guardado despus de la prdida de la fuente de alimentacin (similar a la ROM). Por lo tanto, la EEPROM se utiliza con frecuencia para almacenar los valores creados durante el funcionamiento, que tienen que estar permanentemente guardados. Por ejemplo, si usted ha diseado una llave electrnica o un alarma, sera estupendo permitir al usuario crear e introducir una contrasea por su cuenta. Por supuesto, la nueva contrasea tiene que estar guardada al apagar la fuente de alimentacin. En tal caso una solucin perfecta es el microcontrolador con una EEPROM embebida.

INTERRUPCINLa mayora de programas utilizan interrupciones durante ejecucin de programa regular. El propsito del microcontrolador generalmente consiste en reaccionar a los cambios en su entorno. En otras palabras, cuando ocurre algo, el microcontrolador reacciona de alguna manera... 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 microconrolador deja 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.

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 consiste en tantas lneas como sean necesarias para direccionar la memoria. Se utiliza para transmitir la direccin de la CPU a la memoria. El bus de datos es tan ancho como los datos, en este caso es de 8 bits o cables de ancho. Se utiliza para conectar todos los circuitos dentro del microcontrolador.

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 ms pequeas, de las que las ms importantes son:

y y

y

Decodificador de instrucciones. Es la parte que descodifica las instrucciones del programa y acciona otros circuitos basndose en esto; Unidad lgica aritmtica (Arithmetical Logical Unit - ALU) realiza todas las operaciones matemticas y lgicas sobre datos. El conjunto de instrucciones que es diferente para cada familia de microcontrolador expresa las capacidades de este circuito; y Acumulador o registro de trabajo. Es un registro SFR estrechamente relacionado con el funcionamiento de la ALU. Es un tipo de escritorio de trabajo 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, denominado Registro Status (PSW), est estrechamente relacionado con el acumulador. Muestra el estado de un nmero almacenado en el acumulador (el nmero es mayor o menor que cero etc.) en cualquier instante dado. El acumulador es denominado registro de trabajo (working register), o sea, registro W o solamente W.

COMUNICACIN SERIE

La conexin paralela entre el microcontrolador y los perifricos a travs de los puertos de entrada/salida es una solucin perfecta para las distancias cortas - hasta varios metros. No obstante, cuando es necesario establecer comunicacin entre dos dispositivos a largas 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 un equipo estndar. Cul de estos sistemas se utilizar en un caso concreto, depende de muchos factores, de los que ms importantes son:

y y

Con cuntos dispositivos el microcontrolador tiene que intercambiar los datos? Cul es la velocidad del intercambio de datos obligatoria?

y y

Cul es la distancia entre los dispositivos? Es necesario transmitir y recibir los datos simultneamente?

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

VELOCIDAD DE TRANSMISIN DE DATOSLa velocidad de transmisin de datos (data rate) es el trmino utilizado para denotar el nmero de bits transmitidos por segundo [bps]. Fjese que este trmino se refiere a bits, y no a bytes! El protocolo normalmente requiere que cada byte se transmita junto con varios bits de control. Eso quiere decir que un byte en un flujo de datos serial puede consistir en 11 bits. Por ejemplo, si velocidad de transmisin serial es 300 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-IntegradoCircuito inter-integrado es un sistema para el intercambio de datos serial entre los microcontroladores y los circuitos integrados de nueva generacin. Se utiliza cuando la distancia entre ellos es corta (el receptor y el transmisor estn normalmente en la misma placa de circuito impreso). La conexin se establece por medio de dos lneas - una se utiliza para transmitir los datos, mientras que la otra se utiliza para la sincronizacin (la seal de reloj). Como se muestra en la figura, un dispositivo es siempre el principal (master - maestro), el que realiza el direccionamiento de un chip subordinado (slave - esclavo) antes de que se inicie la comunicacin. De esta manera un microcontrolador puede comunicarse con 112 dispositivos diferentes. La velocidad de transmisin de datos es normalmente 100 Kb/seg (el modo estndar) o 10 Kb/seg (modo de velocidad de transmisin de datos

baja). Recientemente han aparecido los sistemas con la velocidad de transmisin de datos de 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 PERIFRICOSUn bus serial de interfaz de perifricos es un sistema para la comunicacin serial que utiliza tres de cuatro lneas - para recibir los datos, para transmitir los datos, para sincronizar y (opcional) para seleccionar el dispositivo con el que se comunica. Esto es la conexin full duplex, lo que significa que los datos se envan y se reciben simultneamente.

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

UART (UNIVERSAL ASYNCHRONOUS RECEIVER/TRANSMITTER) - TRANSMISOR - RECEPTOR ASNCRONO UNIVERSALEste tipo de conexin es asncrona, lo que significa que no se utiliza una lnea especial para transmitir la seal de reloj. En algunas aplicaciones este rasgo es crucial (por ejemplo, en mandar datos a distancia por RF o por luz infrarroja). Puesto que se utiliza slo una lnea de comunicacin, tanto el receptor como el transmisor reciben y envan los datos a velocidad misma que ha sido predefinida para mantener la sincronizacin necesaria. Esto es una manera simple de transmitir datos puesto que bsicamente representa una conversin de datos de 8 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 el funcionamiento armnico y sncrono de todos los circuitos del microcontrolador. El oscilador se configura normalmente de tal manera que utilice un cristal de cuarzo o resonador cermico para estabilizacin de frecuencia. Adems, puede funcionar como un circuito autnomo (como oscilador RC). Es importante decir que las instrucciones del programa no se ejecutan a la velocidad impuesta por el mismo oscilador sino varias veces ms despacio. Eso ocurre porque cada instruccin se ejecuta en varios ciclos del oscilador. En algunos microcontroladores se necesita el mismo nmero de ciclos para ejecutar todas las instrucciones, mientras que en otros el tiempo de ejecucin no es el mismo para todas las instrucciones. Por consiguiente, si el sistema utiliza el cristal de cuarzo con una frecuencia de 20 MHZ, el tiempo de ejecucin de una instruccin de programa no es 50 nS, sino 200, 400 o 800 nS dependiendo del tipo del microcontrolador.

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

y

y

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

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

La mayora de los programas utiliza estos cronmetros electrnicos en miniatura. Generalmente son registros SFR de 8 o 16 bits cuyo contenido 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 de registro en el momento de iniciar la medicin es T1, en el momento de finalizar la medicin es T2, el tiempo transcurrido es igual al resultado de la resta T2 - T1). Si los registros se aumentan con los pulsos que vienen de la fuente externa, tal temporizador se convierte en un contador. Esto es una explicacin simple de su funcionamiento. Es un poco ms complicado en prctica.

CMO FUNCIONAN LOS TEMRPORIZADORES?

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

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

UTILIZAR UN PRE-ESCALADOR EN EL FUNCIONAMIENTO DEL TEMPORIZADORUn pre-escalador es un dispositivo electrnico utilizado para dividir la frecuencia por un factor predeterminado. Esto quiere decir que se necesita 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 ms pre-escaladores incorporados y su tasa de divisin puede ser cambiada dentro del programa. El preescalador se utiliza cuando es necesario medir los perodos de tiempo ms largos.

UTILIZAR UNA INTERRUPCIN EN EL FUNCIONAMIENTO DEL TEMPORIZADORSi 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 nmero 65.535. Si se excede este nmero, el temporizador se reinicia automticamente y el conteo comienza de nuevo en cero. Esto es denominado desbordamiento o sobreflujo (overflow). Permitido por el programa, el desbordamiento puede provocar una interrupcin, lo que abre completamente nuevas posibilidades. Por ejemplo, el estado de registros utilizados para contar segundos, minutos o das puede ser implementado en una rutina de interrupcin. El proceso entero (excepto la rutina de

interrupcin) se lleva a cabo internamente, lo que permite 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.

CONTADORESSi 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 capaz de funcionar en dos modos diferentes. La nica diferencia es que los pulsos para contar se ingresan por el pin de entrada y que su duracin (anchura) no es definida. Por eso, no se pueden utilizar para medicin de tiempo, sino que se utilizan para otros propsitos, por ejemplo: contar los productos en la cadena de montaje, nmero de rotaciones del eje de un motor, pasajeros etc. (dependiendo del sensor utilizado).

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 genera una seal de reinicio del microcontrolador y la ejecucin de programa inicia en la primera instruccin. El punto es evitar que eso ocurra al utilizar 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 el temporizador perro guardin se colocan en lugares estratgicos del programa, aparte los comandos que se ejecutan regularmente, el funcionamiento del perro guardin no afectar a la ejecucin del programa. Si por cualquier razn (con frecuencia por los ruidos elctricos) el contador de programa se queda atrapado dentro de un bucle infinito, el valor del registro continuar aumentado por el temporizador perro guardin alcanzar el mximo valor, el registro se desbordar y, aleluya! Ocurre el reinicio y el programa ser ejecutado desde el principio!

CONVERTIDOR A/D

Las seales externas son muy diferentes de las que entiende el microcontrolador (solamente 0V y 5V), as que deben ser convertidas para que el microcontrolador pueda entenderlas. Un convertidor analgico-digital es un circuito electrnico encargado de convertir las seales continuas en nmeros digitales discretos. En otras palabras, este circuito convierte un nmero real en un nmero binario y se lo enva a la CPU para ser procesado. Este mdulo se utiliza para medir el voltaje en el pin de entrada (voltaje analgico).

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

ARQUITECTURA INTERNATodos los microcontroladores actuales utilizan uno de dos modelos bsicos de arquitectura denominados Harvard y vonNeumann. 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 bloque de memoria y de un bus de datos de 8 bits. Como todos los datos se intercambian por medio de estas 8 lneas, este bus est sobrecargado, y la comunicacin por si misma es muy lenta e ineficaz. La CPU puede leer una instruccin o leer/escribir datos de/en la memoria. Los dos procesos no pueden ocurrir a la vez puesto que las instrucciones y los datos utilizan el mismo bus. Por ejemplo, si alguna lnea de programa dice que el registro de la memoria RAM llamado SUM debe ser aumentado por uno (instruccin: incf SUMA), el microcontrolador har lo siguiente: 1. Leer la parte de la instruccin de programa que especifica QU es lo que debe realizar (en este caso es la instruccin para incrementar incf)

2. Seguir leyendo la misma instruccin que especifica sobre CUL dato lo debe realizar (en este caso es el contenido del registro SUMA) 3. Despus de haber sido incrementado, el contenido de este registro se debe escribir en el registro del que fue ledo (direccin del registro SUMA)El mismo bus de datos se utiliza para todas estas operaciones intermedias al intercambiar los datos entre la CPU y la memoria.

ARQUITECTURA DE HARVARD

Los microcontroladores que utilizan esta arquitectura disponen de dos buses de datos diferentes. Uno es de 8 bits de ancho y conecta la CPU con la memoria RAM. El otro consiste en varias lneas (12, 14 o 16) y conecta a la CPU y la memoria ROM. Por consiguiente, la CPU puede leer las instrucciones y realizar el acceso a la memoria de datos a la vez. Puesto que todos los registros de la memoria RAM son de 8 bits de ancho, todos los datos dentro del microcontrolador que se intercambian son de la misma anchura. Durante el proceso de la escritura de programa, slo se manejan los datos de 8 bits. En otras palabras, todo lo que usted podr cambiar en el programa y a lo que podr afectar ser de 8 bits de ancho. Todos los programas escritos para estos microcontroladores sern almacenados en la memoria ROM interna del microcontrolador despus de haber sido compilados a cdigo mquina. No obstante, estas localidades de memoria ROM no 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 de 8 bits.Las ventajas de esta arquitectura son las siguientes:

y

y

y

Todos los datos en el programa son de un byte (8 bits) de ancho. Como un bus de datos utilizado para lectura de programa tiene unas lneas ms (12, 14 o 16), tanto la instruccin como el dato se pueden leer simultneamente al utilizar estos bits adicionales. Por eso, todas las instrucciones se ejecutan en un ciclo salvo las instrucciones de salto 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 poder ejecutar dos instrucciones simultneamente. Dicho de manera sencilla, mientras que se realiza la lectura o escritura de 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 ocupar algn 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 informacin sobre CUL dato se debe realizar). Sin embargo, esto no es una frmula rgida, sino el caso ms frecuente. En los microcontroladores que utilizan una arquitectura Harvard, el bus de la palabra de programa es ms ancho que un byte, lo que permite que cada palabra de programa est

compuesto por una instruccin y un dato. En otras palabras, una localidad de memoria - una instruccin de programa.

JUEGO DE INSTRUCCIONES

El nombre colectivo de todas las instrucciones que puede entender el microcontrolador es llamado Juego de Instrucciones. Cuando se escribe un programa en ensamblador, en realidad se especifican instrucciones en el orden en el que deben ser ejecutadas. La restriccin principal es el nmero de instrucciones disponibles. Los fabricantes normalmente elijen entre una de dos soluciones opuestas y disean los microcontroladores que aplican el mayor o el menor nmero posible de instrucciones. En otras palabras, elijen entre dos juegos de instrucciones - RISC o CISC, respectivamente.RISC (REDUCED INSTRUCTION SET COMPUTER) - COMPUTADORA CON JUEGO DE INSTRUCCIONES REDUCIDASEn este caso la idea es que el microcontrolador reconoce y ejecuta slo operaciones bsicas (sumar, restar, copiar etc...) Las operaciones ms complicadas se realizan al combinar stas. Por ejemplo, multiplicacin se lleva a cabo al realizar adicin sucesiva. Es como intentar explicarle a alguien con pocas palabras cmo llegar al aeropuerto en una nueva ciudad. Sin embargo, no todo es tan oscuro. Por ltimo, no es tan difcil explicar dnde est el aeropuerto si se utilizan las palabras adecuadas tales como: a la derecha, a la izquierda, el kilmetro etc.

CISC (COMPLEX INSTRUCTION SET COMPUTER) - COMPUTADORAS CON JUEGO DE INTRUCCIONES COMPLEJOCISC es opuesto a RISC! Los microcontroladores diseados para reconocer ms de 200 instrucciones diferentes realmente pueden realizar muchas cosas a alta velocidad. No obstante, uno debe saber cmo utilizar todas las posibilidades que ofrece un lenguaje tan rico, lo que no es 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 primera vista, no es fcil la eleccin del microcontrolador ms adecuado como parece a la primera vista. El problema no es el pequeo rango 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 son necesarias para su funcionamiento, realizara el dispositivo otras operaciones adems encender/apagar un rel, necesita algn modulo especializado tal como el de comunicacin en serie, convertidor A/D etc. Cuando usted tiene una clara imagen de lo que quiere, el rango de seleccin se reduce considerablemente, y le queda pensar en el precio. Va a tener varios dispositivos? Varios cientos? Un milln? De todos 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 que nada, 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 que pertenece a la misma familia...

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

1.4 MICROCONTROLADORES PICEl nombre verdadero de este microcontrolador es PICmicro - controlador de interfaz perifrico (Peripheral Interface Controller), conocido bajo el nombre PIC. Su primer antecesor fue creado en 1975 por la compaa General Instruments. Este chip denominado PIC1650 fue diseado para propsitos completamente diferentes. Aproximadamente diez aos ms tarde, al aadir una memoria EEPROM, este circuito se convirti en un verdadero microcontrolador PIC.

Si est interesado en aprender ms sobre eso, siga leyendo. La idea principal de este libro es proporcionar la informacin necesaria al usuario para que sea capaz de utilizar los microcontroladores en la prctica. Para evitar explicaciones pesadas y las historias infinitas sobre las caractersticas tiles de los microcontroladores diferentes, este libro describe el funcionamiento de un modelo particular que pertenece a la clase media alta. Es PIC16F887 - bastante poderoso para ser digno de atencin y bastante simple para poder ser utilizado por cualquiera. As, los siguientes captulos describen este microcontrolador en detalle y tambin se refieren a la familia PIC entera.. Todos los microcontroladores PIC utilizan una arquitectura Harvard, lo que quiere decir que su memoria de programa est conectada a la CPU por ms de 8 lneas. Hay microcontroladores de 12, 14 y 16 bits, dependiendo de la anchura del bus. La siguiente tabla rmuestra las caractersticas principales de estas tres categoras de los microcontroladores PIC.Frecuencia Pines de reloj[MHz] Resolucin del convertidor A/D

Familia

ROM [Kbytes]

RAM [bytes]

Entradas A/D

Comparadores

Temporizadores de 8/16 bits

Com. serial

Salidas PWM

Otros

Arquitectura de la gama baja de 8 bits, palabra de instruccin de 12 bits PIC10FXXX PIC12FXXX PIC16FXXX PIC16HVXXX 0.375 0.75 0.75 - 1.5 0.75 - 3 1.5 16 - 24 25 - 38 25 - 134 25 6-8 8 14 44 18 20 4-8 4-8 20 20 0-2 0-3 0-3 8 8 8 0-1 0-1 0-2 1x8 1x8 1x8 1x8 EEPROM EEPROM Vdd = 15V

Arquitectura de la gama media de 8 bits, palabra de instruccin de 14 bits PIC12FXXX PIC12HVXXX PIC16FXXX 1.75 - 3.5 1.75 1.75 - 14 64 - 128 64 64 - 368 8 8 14 20 20 20 0-4 0-4 0 - 13 10 10 8 or 10 1 1 0-2 1 - 2 x 8 1 x 16 1 - 2 x 8 1 x 16 1 - 2 x 8 1 x 16 USART I2C SPI 0-1 0-1 0-3 EEPROM -

64 PIC16HVXXX 1.75 - 3.5 64 - 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 3936 1024 3936 768 3936 18 80 28 100 28 44 32 - 48 4 - 16 10 or 12 0-3 0-2x 82-3x 16 0-2x 82-3x 16 1 x 8 3 x 16 USB2.0 CAN2.0 USART I2C SPI USB2.0 USART Ethernet I2C SPI USART I2C SPI 0-5 -

PIC18FXXJXX

8 - 128

40 - 48

10 - 16

10

2

2-5

-

PIC18FXXKXX

8 - 64

64

10 - 13

10

2

2

-

Como se puede ver en la tabla de la pgina anterior, salvo los monstruos de 16 bits PIC 24FXXX y PIC 24HXXX - todos los microcontroladores tienen la arquitectura Harvard de 8 bits y pertenecen a una de las tres grandes grupos. Por eso, dependiendo del tamao de palabra de programa existen la primera, la segunda y la tercera categora de microcontroladores, es decir microcontroladores de 12, 14 o 16 bits. Puesto que disponen del ncleo similar de 8 bits, todos utilizan el mismo juego de instrucciones y el esqueleto bsico de hardware 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 INSTRUCCIONESEl juego de instrucciones para los microcontroladores 16F8XX incluye 35 instrucciones en total. La razn para un nmero tan reducido de instrucciones yace en la arquietectura RISC. Esto quiere decir que las instrucciones son bien optimizadas desde el aspecto de la velocidad operativa, la sencillez de la arquitectura y la compacidad del cdigo. La desventaja de la arquitectura RISC es que se espera del programador que haga frente a estas instrucciones. Por supuesto, esto es relevante slo si se utiliza el lenguaje ensamblador para la programacin. Este libro se refiere a la programacin en el lenguaje de alto nivel Basic, 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 INSTRUCCIONESTodas las instrucciones se ejecutan en un ciclo. La nicas excepciones pueden ser las instrucciones de ramificacin condicional o las instrucciones que cambian el contenido del contador de programa. En ambos casos, dos ciclos de reloj son necesarios para la ejecucin de la instruccin, mientras que el segundo ciclo se ejecuta como un NOP (No operation). Las instrucciones de un ciclo consisten en cuatro ciclos de reloj. Si se utiliza un oscilador de 4 MHz, el tiempo nominal para la ejecucin de la instruccin es 1mS. En cuanto a las instrucciones de ramificacin, el tiempo de ejecucin de la instruccin es 2S. Juego de instrucciones de los microcontroladores PIC de 14 bits:IN S T R U C C I N DES CR IP CIN O P E R A C I N B A N D ER A CLK *

Instrucciones para la transmisin de datos MOVLW k MOVWF f MOVF f,d CLRW CLRF f SWAPF f,d Mover literal a W Mover el contenido de W a f Mover el contenido de f a d Borrar el contenido de W Borrar el contenido de f Intercambiar de nibbles en f k -> w W -> f f -> d 0 -> W 0 -> f f(7:4),(3:0) -> f(3:0),(7:4) Z Z Z 1 1 1 1 1 1 2 1, 2 1, 2

Instrucciones aritmtico - lgicas ADDLW k ADDWF f,d SUBLW k SUBWF f,d ANDLW k ANDWF f,d IORLW k IORWF f,d XORWF f,d XORLW k INCF f,d DECF f,d Sumar literal a W Sumar el contenido de W y f Restar W de literal Restar W de f AND W con literal AND W con f OR inclusivo de W con literal OR inclusivo de W con f OR exclusivo de W con literal OR exclusivo de W con f Sumar 1 a f Restar 1 a f W+k -> W W+f -> d k-W -> W f-W -> d W AND k -> W W AND f -> d W OR k -> W W OR f -> d W XOR k -> W W XOR f -> d f+1 -> f f-1 -> f C, DC, Z C, DC ,Z C, DC, Z C, DC, Z Z Z Z Z Z Z Z Z 1 1 1 1 1 1 1 1 1 1 1 1 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2 1, 2

RLF f,d

Rotar F a la izquierda a travs del bit de Acarreo

C

1

1, 2

RRF f,d COMF f,d

Rotar F a la derecha a travs del bit de Acarreo Complementar f f -> d

C Z

1 1

1, 2 1, 2

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

Instrucciones de control de programa BTFSC f,b BTFSS f,b DECFSZ f,d INCFSZ f,d GOTO k CALL k RETURN RETLW k RETFIE Saltar si bit b de registro f es 0 Saltar si bit b de reg. f es 1 Disminuir f en 1. Saltar si el resultado es 0. Incrementar f en 1. Saltar si el resultado es 1. Saltar a una direccin Llamar a una subrutina Retornar de una subrutina Retornar con literal en W Retornar de una interupcin Skip if f(b) = 0 Skip if f(b) = 1 f-1 -> d skip if Z = 1 f+1 -> d skip if Z = 0 k -> PC PC -> TOS, k -> PC TOS -> PC k -> W, TOS -> PC TOS -> PC, 1 -> GIE 1 (2) 1 (2) 1 (2) 1 (2) 2 2 2 2 2 3 3 1, 2, 3 1, 2, 3

Otras instrucciones NOP CLRWDT SLEEP No operacin Reiniciar el temporizador perro guardin Poner en estado de reposo TOS -> PC, 1 -> GIE 0 -> WDT, 1 -> TO, 1 -> PD 0 -> WDT, 1 -> TO, 0 -> PD TO, PD TO, PD 1 1 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 el contador de programa est modificado o el resultado de prueba es un uno lgico (1), la instruccin tiene una duracin de dos ciclos. El segundo ciclo se ejecuta como un NOP

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

PIC Microcontrollers - Programming in BASICy y y y y y

TOC Capitulo 1 Capitulo 2 Captulo 3 Captulo 4 Apndice A

Captulo 2: Programacin de los microcontroladoresUsted seguramente sabe que no solo es suficiente 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 para que sea capaz de hacer algo til. Este captulo trata de la programacin en Basic, por lo que vamos a presentar lo bsico que tiene que saber para escribir un programa. Le puede parecer complicado, sobre todo si no tiene experiencia en este campo. no se rinda, respire profundamente y empiece a programar...

2.1 LENGUAJES DE PROGRAMACIN

y y y

2.1 LENGUAJES DE PROGRAMACIN 2.2 CARACTERSTICAS PRINCIPALES DEL LENGUAJE DE PROGRAMACIN BASIC 2.3 COMPILADOR MIKROBASIC PRO FOR PIC

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 es interpretada por la CPU como una instruccin a ser ejecutada durante el funcionamiento del microcontrolador. 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. A todas las instrucciones que el microcontrolador puede reconocer y ejecutar se le denominan colectivamente Juego de instrucciones. En los microcontroladores PIC con las palabras de programa de 14 bits de anchura, el conjunto de instrucciones tiene 35 instrucciones diferentes.

Normalmente los programas se escriben en el lenguaje ensamblador cuando se requiere controlar completamente la ejecucin de programa. Como el proceso de escribir un cdigo ejecutable era considerablemente arduo, en consecuencia fue creado el primer lenguaje de programacin denominado ensamblador (ASM). El proceso de programacin se hizo un poco ms complicado. Por otro lado, el proceso de escribir un programa dej de ser una pesadilla. Las instrucciones en ensamblador consisten en las abreviaturas con significado. Un programa denominado ensamblador instalado en la PC compila las instrucciones del lenguaje ensamblador a cdigo mquina (cdigo binario). Este programa compila instruccin a instruccin sin optimizacin. La ventaja principal del lenguaje ensamblador es su simplicidad y el hecho de que a cada instruccin cle orresponde una localidad de memoria. Como permite controlar todos los procesos puestos en marcha dentro del microcontrolador, este lenguaje de programacin todava sigue siendo popular. Por otro lado, los programas se ejecutan siempre a alta velocidad y en la mayora de casos no es necesario saber en detalle qu ocurre dentro del microcontrolador. A pesar de todos los lados buenos del lenguaje ensamblador, los programadores siempre han necesitado un lenguaje de programacin similar al lenguaje utilizado en el habla cotidiana. Por ltimo, los lenguajes de programacin de alto nivel (Basic entre otros) fueron creados. La ventaja principal de estos lenguajes es la simplicidad de escribir un programa. Varias instrucciones en ensamblador se sustituyen por una sentencia en Basic. El programador ya no tiene que conocer el conjunto de instrucciones 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.

El proceso de escribir un programa en Basic. Al seleccionar la opcin apropiada, el programa ser compilado en el ensamblador y luego en el cdigo hex que ser cargado en el microcontrolador. Similar al lenguaje ensamblador, un programa especializado e instalado en la PC se encarga de compilar un programa a cdigo mquina. A diferencia del ensamblador, los compiladores para los lenguajes de programacin de alto nivel crean un cdigo ejecutable que no es siempre tan corto como el cdigo escrito en ensamblador.

La figura anterior describe el proceso de la compilacin de programa escrito en Basic en cdigo hex. Ejemplo de un programa simple escrito en Basic:

VENTAJAS DE LOS LENGUAJES DE PROGRAMACIN DE ALTO NIVEL

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, este problema se puede resolver gracias a la aritmtica que permite realizar las operaciones complejas al descomponerlas en un gran nmero de 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 Basic, 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.

2.2 CARACTERSTICAS PRINCIPALES DEL LENGUAJE DE PROGRAMACIN BASICSimilar al uso de cualquier lengua que no est limitada a los libros y a las revistas, el lenguaje de programacin Basic no est estrechamente relacionado a un tipo particular de ordenador, procesador o sistema operativo. Esto puede ser un problema, ya que Basic vara ligeramente dependiendo de su aplicacin (como diferentes dialectos de una lengua). Por consiguiente, en este libro no vamos a darle una descripcin detallada de todas las caractersticas de Basic, sino presentar una aplicacin muy concreta de Basic, lenguaje de programacin utilizado en el compilador mikroBasic PRO for PIC. El Basic es un lenguaje de programacin simple y fcil de entender. Para utilizarlo correctamente, basta con conocer slo unos pocos elementos bsicos en los que consiste cada programa. Estos son:

y y y y y y

Identificadores Comentarios Operadores Expresiones Instrucciones Constantes

y y y y y y

Variables Smbolos Directivas Etiquetas Procedimientos y funciones Mdulos

Aqu est un ejemplo de cmo no se debe escribir un programa. Los comentarios no estn incluidos, nombres de etiquetas no tienen significado, secciones del cdigo no estn agrupadas...Este programa funciona correctamente, pero slo el programador que lo escribi conoce su propsito y modo de ejecucin (como mximo uno o dos das). En la siguiente figura se muestra la estructura de un programa simple escrito en Basic, destacando las partes en las que consiste. Esto es un ejemplo de cmo se debe escribir un programa. Las diferencias son ms que obvias...

ESTRUCTURA DE PROGRAMASimilar a los otros lenguajes de programacin, Basic dispone de un conjunto de reglas estrictamente definidas que se deben observar al escribir un programa. Para escribir un programa en Basic, es necesario instalar un software que proporciona el entorno de trabajo apropiado y entiende estas reglas en la PC... Al escribir una carta, se necesita un programa para procesar palabras. En este caso, se necesita el compilador mikroBasic PRO for PIC. A diferencia de la mayora de programas a los que est acostumbrado a manejar, el proceso de escribir programas en el compilador no empieza por seleccionar la opcin File>New, sino Project>New. Por qu? Bueno, usted escribe un programa en un documento con extensin .mbas (mikroBasic). Una vez que se ha escrito el programa, el mismo se debe compilar en cdigo HEX para crear un nuevo documento con extensin .hex. Al mismo tiempo el compilador generar automticamente varios

documentos aparte de se. Por ahora el propsito de estos documentos no importa. Por supuesto, hay algo para conectarlos todos. Usted ya lo adivina - se trata de un proyecto. El programa que escribe es slo una parte del proyecto.

Slo para estar seguro de que estamos hablando en los mismos trminos... A partir de ahora la palabra mdulo se refiere a un documento con extensin .mbas. El texto que contiene se refiere a un programa. Cada proyecto escrito en el compilador mikroBasic PRO for PIC es de extensin .mbppi (microBasic Project for PIC) y consiste en un mdulo como mnimo (mdulo principal - Main Module). Cada proyecto en el mikroBasic PRO for PIC requiere un solo mdulo principal. Lo identifica la palabra clave program y ordena al compilador por dnde empezar el proceso de la compilacin. Al crear con xito un proyecto vaco en Project Wizard, el mdulo principal (main module) ser visualizado automticamente en la ventana Code Editor: program MyProject main: ... ... ... '* '* Escribir el cdigo de programa aqu '* ' El mdulo principal es denominado MyProject

' Procedimiento principal

end. A la palabra clave program no le puede preceder nada, excepto comentarios. Como hemos mencionado anteriormente, el proyecto puede incluir a otros mdulos que, a diferencia del mdulo principal, empiezan por la palabra clave module.

module MyModule ' Mdulo auxiliar Auxiliary es denominado MyModule ... '* ... '* Implementos ... '* end.

Para que el compilador pueda reconocer todos los mdulos que pertenecen a un proyecto, es necesario especificarlos en el mdulo principal por medio de la palabra clave include seguida por un nombre del mdulo entre comillas. La extensin de estos ficheros no se debe incluir. Se permite slo un mdulo por clusula include. El nmero de las clusulas include no est limitado, pero todas ellas deben estar especificadas inmediatamente despus del nombre del programa (mdulo principal). Ejemplo:

program MyProgram include "utils" include "strings" include "MyUnit" ...

' ' ' ' '

Inicio de programa (mdulo principal denominado MyProgram) Otros mdulos incluidos son: Mdulo utils Mdulo strings Mdulo MyUnit

ORGANIZACIN DEL MDULO PRINCIPALEl mdulo principal se puede dividir en dos secciones: declaraciones y el cuerpo de programa. Qu es una declaracin en la programacin? Una declaracin es un proceso de definir las propiedades de los identificadores que se utilizarn en el programa. Como la mayora de los dems lenguajes de programacin, Basic tambin requiere que todos los identificadores estn declarados antes de ser utilizados en el programa. Si no es as, el compilador no puede interpretarlos correctamente. Ejemplo de la declaracin de una variable denominada distancia:

dim distance as float

' Declarar la variable distancia

Como se puede ver, es una variable de punto flotante, o sea un nmero con posicin decimal opcional. Las otras dos variables estn declaradas y nombradas velocidad y tiempo. Ahora, se pueden utilizar en el siguiente programa: Esto es un ejemplo de cmo escribir el mdulo principal correctamente:

ORGANIZACIN DE OTROS MDULOSLos otros mdulos empiezan por la palabra clave module. Cada mdulo consiste en tres secciones: include, interface e implementation. Solo la seccin implementation es obligatoria. Empieza por la palabra clave implements. Vea el siguiente ejemplo:

IDENTIFICADORESLos identificadores son los nombres arbitrarios asignados a los objetos bsicos del lenguaje teles como constantes, variables, funciones, procedimientos etc. A alguien se le ocurri utilizar la palabra identificador en vez de utilizar el nombre. As de simple. Aqu estn las reglas a observar al utilizar los identificadores.

y y y y y

Los identificadores pueden incluir cualquiera de los caracteres alfabticos A-Z (a-z), los dgitos 0-9 y el carcter subrayado '_'. El primer carcter de un identificador no puede ser un dgito. Ningn identificador puede contener caracteres especiales tales como ! [{ # $ % & etc. Basic no es sensible a la diferencia entre minsculas y maysculas, lo que significa que FIRST, first y First son identificadores idnticos. El smbolo ^ (signo de intercalacin) se utiliza para denotar un operador exponencial, el smbolo * (asterisco) se utiliza para denotar la multiplicacin, mientras que los dems smbolos tienen el significado comn.

y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y

Las palabras clave ya utilizadas por el compilador no deben ser utilizadas como identificadores. Lista alfabtica de las palabras clave en Basic: Abstract And Array As At Asm Assembler Automated Bdata Begin Bit Case Cdecl Class Code Compact Const Constructor Contains Data Default Deprecated Destructor Dispid Dispinterface Div Do Downto Dynamic Else End Except Export Exports External Far File Finalization Finally For Forward Function Goto Idata If Ilevel Implementation In Index Inherited Initialization Inline Interface Io Is

y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y y

Label Large Library Message Mod Name Near Nil Not Object Of On Or Org Out Overload Override Package Packed Pascal Pdata Platform Private Procedure Program Property Protected Public Published Raise Read Readonly Record Register Reintroduce Repeat Requires Resourcestring Rx Safecall Sbit Set Sfr Shl Shr Small Stdcall Stored String Stringresource Then Threadvar To Try Type Unit Until

y y y y y y y y y y

Uses Var Virtual Volatile While With Write Writeonly Xdata Xor

Una lista de identificadores que no deben ser utilizados en el programa

COMENTARIOSLos comentarios son las partes del programa utilizados para aclarar las instrucciones de programa o para proporcionar ms informacin al respecto. En Basic, cualquier texto que sigue a un apstrofo (') se considera un comentario, Los comentarios no se compilan al cdigo ejecutable. 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. 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.

ETIQUETAS

Las etiquetas proporcionan el modo ms fcil de controlar el flujo de programa. Se utilizan para denotar las lneas particulares en el programa donde se deben ejecutar la instruccin de salto y la subrutina apropiada. Todas las etiquetas deben terminar por : as que el compilador las puede reconocer con facilidad.

CONSTANTES

Las constantes son los nmeros o caracteres cuyo valor no puede ser cambiado durante la ejecucin de programa. A diferencia de las variables, las constantes se almacenan en la memoria ROM del microcontrolador para guardar el mayor espacio posible de la memoria RAM. El compilador reconoce las constantes por sus nombres y el prefijo const. Cada constante se declara baj o un nombre nico que debe ser un identificador vlido. Las constantes pueden ser en formatos decimal, hexadecimal o binario. El compilador los distingue por su prefijo. Si una constante no lleva prefijo, se considera decimal por defecto.FOR M AT O Decimal Hexadecimal Binario 0x o $ Punto flotante P R E F IJ O EJ EM P LO const MAX = 100 const MAX = 0xFF const MAX = %11011101

Las constantes se declaran en la parte de declaracin del programa o de la rutina. La sintaxis es la siguiente:

const nombre_de_constante [as type] = valor

Los nombres de las constantes se escriben normalmente con maysculas. El tipo de una constante se reconoce automticamente por su tamao. En el siguiente ejemplo, la constante MINIMUM se considera un entero con signo y ocupa dos bytes de la memoria Flash (de 16 bits):

const MINIMUM = -1000

' Declarar la constante MINIMUM

El tipo de constante se especifica opcionalmente. En la ausencia de tipo, el compilador lo considera el menor tipo conveniente al valor de constante.

const MAX as longint = 10000 const MIN = 1000 ' Compilador supone el tipo word const SWITCH = "n" ' Compilador supone el tipo char

En el siguiente ejemplo, una constante denominada T_MAX se declara de modo que tenga el valor fraccional 32.60. Ahora, el programa puede comparar la temperatura anteriormente medida con la constante con el nombre con significado en vez del nmero 32.60.

const T_MAX = 32.60 ' Declarar temperatura T_MAX const T_MAX = 3.260E1 ' Otra forma de declarar la constante T_MAX

Una constante de cadena consiste en una secuencia de caracteres. Debe estar encerrada entre comillas. Un espacio en blanco se puede incluir en la constante de cadena y representa un carcter. Las constantes de cadena se utilizan para representar cantidades no numricas tales como nombres, direcciones, mensajes etc.

const Message_1 = "Press the START button" ' Mensaje 1 para LCD const Message_2 = "Press the RIGHT button" ' Mensaje 2 para LCD const Message_3 = "Press the LEFT button" ' Mensaje 3 para LCD

En este ejemplo, al enviar la constante Message_1 al LCD, el mensaje press the START button aparecer en la pantalla.

VARIABLESUna variable es un objeto nombrado capaz de contener un dato que puede ser modificado durante la ejecucin de programa. Cada variable se declara bajo un nombre nicoque debe ser un identificador vlido. Por ejemplo, para sumar dos nmeros (nmero1 + nmero2) en el programa, es necesario tener una variable para representar qu es lo que llamamos suma en vida cotidiana. En este caso, nmero1, nmero2 y suma son variables. La sintaxis es la siguiente:

dim nombre_de_variable as type

Las variables en Basic son de un tipo, lo que significa que es necesario especificar el tipo de dato que se asignar a la variable. Las variables se almacenan en la memoria RAM y el espacio de memoria ocupado (en bytes) depende de su tipo. Aparte de las declaraciones de una sola variable, las variables del mismo tipo, se pueden declarar en forma de una lista. Aqu, lista de identificadores es una lista de identificadores vlidos delimitados por comas, mientras que tipo puede ser cualquier tipo de dato.

dim i, j, k as byte 'Definir variables i, j, k dim counter, temp as word 'Definir variables contador y temp

SMBOLOSLos smbolos en Basic permiten crear los macros simples sin parmetros. Cualquier lnea de cdigo se puede reemplazar por un solo identificador. Los smbolos pueden aumentar legibilidad y reutilizacin de cdigo cuando se utilizan correctamente.

Los smbolos deben ser declarados al principio del mdulo, bajo el nombre del mdulo y la directiva opcional include. El mbito de un smbolo es siempre limitado al mdulo en el que ha sido declarado.symbol nombre_de_smbolo = cdigo

Aqu, nombre_de_smbolo debe ser un identificador vlido que se utilizar por todo el cdigo. El especificador cdigo puede ser cualquier lnea de cdigo (literales, asignaciones, llamadas de funcin etc.)

symbol MAXALLOWED = 216 symbol OUT = PORTA symbol MYDELAY = Delay_ms(762) dim cnt as byte main: if cnt > MAXALLOWED then cnt = 0 OUT.1 = 0 MYDELAY end if ...

' ' ' '

Smbolo MAXALLOWED para el valor numrico Smbolo OUT para SFR Smbolo MYDELAY para llamada de procedimiento Variable cnt

' Programa comprueba si cnt > 216 ' Si lo es, ' los siguientes tres comandos ' se ejecutarn ' Si no lo es, el programa contina aqu

Los smbolos no se almacenan en la memoria RAM. El compilador reemplaza los smbolos por las lneas del cdigo apropiadas asignadas durante la declaracin.

TIPOS DE DATOS EN BASICHay varios tipos de datos que se pueden utilizar en el lenguaje de programacin Basic. La siguiente tabla muestra el rango de valores que estos datos pueden tener cuando se utilizan en su forma bsica.T IP O D E D AT O bit sbit byte, char short word integer longword longint float DES CR IP CIN Un bit Un bit Carcter Entero con signo corto Entero sin signo Entero con signo Palabra de 32 bits Palabra de 32 bits asignada Punto flotante 16 16 32 32 32 T AM A O ( N MER O D E B IT S ) 1 1 8 R AN G O D E VA LOR ES 0o1 0o1 0 ... 255 -127 ... 128 0 ... 65535 -32768 ... 32767 0 ... 4294967295 -2147483648 ... 2147483647 1.17549435082*10-38 ... 6.80564774407*1038

CONVERSIN DE TIPOS DE DATOS AUTOMTICAEl compilador automticamente realiza la conversin implcita en los siguientes casos:

y si una sentencia requiere una expresin del tipo particular, y se utiliza la expresin de tipo diferente; y si un operador requiere un operando de tipo particular, y se utiliza un operando de tipo diferente; y si una funcin requiere un parmetro formal de tipo particular, y se le asigna el objeto de tipo diferente; y y si el resultado de una funcin no corresponde al tipo del valor devuelto de la funcin declarada. PROMOCINCuando los operandos son de tipos diferentes, mediante la conversin implcita se realiza la promocin de tipo ms bajo a tipo ms alto, de la siguiente manera:

y bit byte y short, byte/char integer, word, longint, longword y integer, word longint, longword y short, byte/char, integer, word, longint, longword float RECORTE DE DATOSEn las sentencias de asignacin y en las sentencias que requieren una expresin de tipo particular, el valor correcto ser almacenado en el destino slo si el resultado de expresin no excede al rango del destino. Al contrario, si el resultado de la expresin resulta en un tipo ms complejo de lo esperado, los datos que exceden se recortarn, o sea los bytes ms altos se pierden.

dim i as byte 'Variable i ocupa un solo byte de la memoria RAM dim j as word ' Variable j ocupa dos bytes de la memoria RAM ... j = $FF0F i = j ' i se convierte en $0F, el byte ms alto $FF se pierde

CONVERSIN DE DATOS EXPLCITALa conversin explcita se puede ejecutar bajo cualquier expresin en cualquier punto al escribir la palabra clave de tipo deseado (byte, word, short, integer, longint, float...) delante de la expresin que ser convertida. La expresin debe estar encerrada entre parntesis. La conversin explcita no puede ser realizada bajo el operando de la izquierda del operador de asignacin.a = word(b) ' Conversin explcita de la expresin b word(b) = a ' Compilador informa de un error

Como no afecta a la representacin binaria de los datos, un caso especial es una conversin entre tipos de datos con signo y sin signo.

dim a as byte dim b as short '... b = -1 a = byte(b) ' a is 255, not -1 ' El dato no cambia su representacin binaria %11111111 ' pero el compilador la interpreta de la manera diferente

OPERADORESUn operador es un smbolo que denota una operacin aritmtica, lgica u otra operacin particular. Cada operacin se realiza sobre uno o ms operandos (variables o constantes) en una expresin. Adems, cada operador dispone de la ejecucin de prioridad y de la asociatividad. Si una expresin contiene ms de un operando, los operandos se ejecutarn en orden de su prioridad. Hay 4 categoras de prioridad en Basic. Los operadores que pertenecen a la misma categora tienen igual prioridad. Si dos o ms operandos tienen el mismo nivel de prioridad, las operaciones se realizan de izquierda a derecha. Los parntesis se utilizan para definir la prioridad de la operacin dentro de la expresin. A cada categora se le asigna una de dos reglas de asociatividad: de izquierda a derecha o de derecha a izquierda. Refirase a la siguiente tabla:P R I O R ID A D Alta O PER AD OR E S @ not + * / div mod and > + - or xor Baja = < > = A S O C IA T I V I D A D de derecha a izquierda de izquierda a derecha de izquierda a derecha de izquierda a derecha

OPERADORES ARITMTICOSLos operadores aritmticos se utilizan para realizar operaciones aritmticas. Estas operaciones se realizan sobre los operandos numricos y siempre devuelven los resultados numricos. Las operaciones binarias se realizan sobre dos operandos, mientras que las operaciones unitarias se realizan sobre un operando. Todos los operadores aritmticos se asocian de izquierda a derecha.O PER AD OR + O P E R A C I N Adicin Resta

* / div mod

Multiplicacin Divisin - punto flotante Divisin - redondear Remanente

DIVISIN POR CEROSi un cero (0) se utiliza explcitamente como el segundo operando en la operacin de divisin (x div 0), el compilador informa de un error y no generar un cdigo. En caso de una divisin implcita, o sea, en el caso de que el segundo operando sea un objeto cuyo valor es 0 (x div y, w y=0), el resultado ser indefinido.

OPERADORES RELACIONALESLos operadores relacionales se utilizan para comparar dos variables y determinar la validez de su relacin. En mikroBasic, todos los operadores relacionales devuelven 255 si la expresin es evaluada como verdadera (true). Si una expresin es evaluada como falsa (false), el operador devuelve 0. Lo mismo se aplica a las expresiones tales como si la expresin es evaluada como verdadera, entonces...O PER AD OR > >= < a a >= 5 a 3 C = A and B C = A or B A = not B C = A xor B RES U LTAD O B = 11110011 B = 11110011 A=11100011 B=11001100 A=11100011 B=11001100 B = 11001100 A = 11100011 B = 11001100 A = 11001100 A = 00011110 C = 11000000 C = 11101111 A = 00110011 C = 00101111Los operadores de manejo de bits y (and), o (or) y xor realizan las operaciones lgicas sobre los pares de bits de operandos apropiados. El operador not complementa cada bit de un solo operando.$1234 and $5678 ' resultado es $1230 porque: ' $1234 : 0001 0010 0011 0100 ' $5678 : 0101 0110 0111 1000 ' ---------------------------' y : 0001 0010 0011 0000 ... eso es, $1230 $1234 or $5678 'equivale a $567C $1234 xor $5678 ' equivale a $444C not $1234 ' equivale a $EDCBOPERADORES DE DESPLAZAMIENTOHay dos operadores de desplazamiento de bits en mikroBasic. Son el operador > que realiza un desplazamiento de bits a la derecha. Los operadores de desplazamiento de bits tienen dos operandos cada uno. El operando izquierdo es un objeto que se desplaza, mientras que el derecho indica el nmero de posiciones a mover el objeto. Los dos operandos deben ser de tipo entero. El operando derecho debe ser el valor positivo. Al desplazar a la izquierda los bits que salen por la izquierda se pierden, mientras que los nuevos bits a la derecha se rellenan con ceros. Por lo tanto, el desplazamiento del operando que carece de signo a la izquierda por n posiciones equivale a multiplicarlo por 2n si todos los bits descartados son ceros. Lo mismo se puede aplicar a los operandos con signo si todos los bits descartados son iguales que el signo de bit.dim num as word ' declarar la variable num como word num = 1 ' asignarle el valor decimal 1 (00000000 00000001 bin.) num 0) sub function power(dim x, n as byte) as longint ' x y n son bytes, resultado es longint dim i as byte ' i es un byte result = 1 ' resultado = 1 si n = 0 if n > 0 then for i = 1 to n result = result*x next i end if end subAhora, podemos llamar a la funcin power para hacer clculo de 312 por ejemplo:tmp = power(3, 12) ' Hacer clculo de 3*12LIBRERAS DE FUNCIONES Y PROCEDIMIENTOSLas declaraciones de todas las funciones y procedimientos utilizados en Basic se almacenan normalmente en los ficheros de mdulo especial y se les denominan libreras. Antes de utilizar una librera en el programa, es necesario especificar el mdulo apropiado por medio de la clusula include al principio de programa. Esto es una regla general. Si escribe un programa en el compilador mikroBasic PRO for PIC basta con marcar la librera deseada en la lista y el mdulo apropiado ser automticamente incluido en el proyecto. El compilador ya contiene un gran nmero de estas libreras. Si el compilador encuentra una funcin o procedimiento desconocidos durante la ejecucin de programa, primero va a buscar su declaracin en las libreras anteriormente marcadas.RUTINAS INTEGRADAS EN EL COMPILADOR MIKROBASIC PRO FOR PICAparte de las libreras de funciones y procedimientos, el compilador mikroBasic PRO for PIC proporciona un conjunto de las funciones integradas y tiles:y y y y y y y y y y y y y y y y y y y y y y y y yLo Hi Higher Highest Inc Dec Chr Ord SetBit ClearBit TestBit Delay_us Delay_ms Vdelay_Advanded_ms Vdelay_ms Delay_Cyc Clock_KHz Clock_MHz Reset ClrWdt DisableContextSaving SetFuncCall SetOrg GetDateTime GetVersionLas rutinas Delay_us y Delay_ms se generan en la parte del programa de la que se llaman. Vdelay_ms, Delay_Cyc y Get_Fosc_kHz son las rutinas actuales en Basic. Sus fuentes se pueden encontrar en el archivo Delays.mbas ubicado en el archivo uses del compilador.PREPROCESADORUn preprocesador es una parte integral de cada compilador. Su funcin es de reconocer y ejecutar las instrucciones del preprocesador. Qu son instrucciones del preprocesador? Son instrucciones especiales que no pertenecen al lenguaje Basic, sino que estn integrados en el compilador. Antes de compilar, el compilador inicia al preprocesador que pasa por el programa en bsqueda de estas instrucciones. Si encuentra una, el preprocesador las sustituir por otro texto que, dependiendo del tipo de comando, puede ser un archivo (comando include) o slo una corta sentencia de caracteres (comando define). Entonces, el proceso de compilar puede empezar. Las instrucciones pueden estar en cualquier parte del programa fuente y se refieren solamente a la parte del programa en la que aparecen hasta el final del programa.DIRECTIVA DEL PREPROCESADOR INCLUDEMuchos programas repiten con frecuencia el mismo conjunto de comandos un par de veces. Para escribir un programa ms rpidamente, estos comandos y declaraciones se agrupan normalmente en los mdulos particulares que se pueden incluir en el programa con facilidad por medio de la directiva include. Para decir con ms precisin, la directiva include importa el texto del otro documento en el programa, sea un conjunto de comandos o bien un conjunto de comentarios etc.COMPILACIN CONDICIONALLas directivas de la compilacin condicional se utilizan generalmente para facilitar la modificacin y compilacin de los programas fuente para los diferentes microcontroladores. El compilador mikroBasic PRO for PIC soporta a la compilacin condicional. Todas las dir