Vous êtes sur la page 1sur 57

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 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.
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 componentes tales como memoria o componentes buses de transmisin de datos. 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.
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. 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 esperar 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.

DETALLES IMPORTANTES
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. 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 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 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.

El 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! En breve, 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 LGICOS

Algunas instrucciones de programa utilizadas por un microcontrolador funcionan de la misma manera que las compuertas lgicas, pero en forma de comandos. 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 es la tabla de verdad que muestra la relacin entre las entradas y salidas de la compuerta. 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. 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.

COMPUERTA XOR (O EXCLUSIVA) 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. 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 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, lo que 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 perifrico 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 las 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). 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 comparten la 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 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 pull-up 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 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.
UNIDAD DE MEMORIA

La 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 LECTURA

La 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) - MROM

La 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 vez

La 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 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 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 Flash

Este 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 microcontroladores 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 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 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 ELCTRICAMENTE

El 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.
INTERRUPCIN

La 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 microcontrolador 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.
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:

Decodificador de instrucciones es la parte que descodifica las instrucciones del programa y acciona otros circuitos basndose en esto. El conjunto de instrucciones que es diferente para cada familia de microcontrolador expresa las capacidades de este circuito; Unidad lgica aritmtica (Arithmetical Logical Unit - ALU) realiza todas las operaciones matemticas y lgicas sobre datos; y Acumulador o registro de trabajo. Es un registro SFR estrechamente relacionado con el funcionamiento de la ALU. 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, 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.

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 lneas de ancho. Se utiliza para conectar todos los circuitos dentro del microcontrolador.
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 las distancias cortas - hasta varios metros. No obstante, en otros casos 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:

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?

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 SERIAL

La velocidad de transmisin serial (baud 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-INTEGRADO

Circuito inter-integrado es un sistema para el intercambio de datos serial entre los microcontroladores y los circuitos integrados especializados de 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 serial es normalmente 100 Kb/seg (el modo estndar) o 10 Kb/seg (modo de velocidad de transmisin baja). Recientemente han aparecido los sistemas con la velocidad de transmisin 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 son necesarias tres) - 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 mxima es mayor que en el sistema de conexin I2C.

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

Este 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 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 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/CONTADORES

El 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 TEMPORIZADORES?

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. 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) al incorporar al cuarzo que oscila 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 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 preescalador 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 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 pre-escalador se utiliza cuando es necesario medir los perodos de tiempo ms largos. Si el temporizador y el temporizador perro guardin comparten un pre-escalador, ste no 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 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.
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 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 (ruidos elctricos frecuentes en la industria) 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!

CONVERTIDOR A/D Las seales del mundo real son muy diferentes de las que entiende el microcontrolador (ceros y unos), 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.

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

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 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.

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 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 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 informa cin 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 aceptan cualquiera de los dos enfoques descritos 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 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. Adems, el microcontrolador es muy rpido as que no es posible ver todas las acrobacias aritmticas que realiza. El usuario slo puede ver el resultado final de todas las operaciones. 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 un juego de instrucciones complejo

CISC 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 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 el equilibrio y montar en cualquier otra bicicleta. Por supuesto, nunca se olvida tanto de montar en bicicleta, como de la destreza de programacin!

MICROCONTROLADORES PIC (PIC16F887 como ejemplo)


Los microcontroladores PIC desarrollados por Microchip Technology son probablemente la mejor opcin si es principiante. Hay varias razones por lo que esto es verdadero... El nombre verdadero de este microcontrolador es PICmicro (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. Diez aos ms tarde, al aadir una memoria EEPROM, este circuito se convirti en un verdadero microcontrolador PIC. Hace unos pocos aos la compaa Microchip Technology fabric la 5 billonsima muestra. 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 despus de leerlo. 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 tabla anterior muestra las caractersticas principales de estas tres categoras.

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 hardwa re 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 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. Lo malo 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 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 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 1S. 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:

*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.

UNIDAD CENTRAL DE PROCESAMIENTO (CPU)

Con el propsito de explicar en forma clara y concisa, sin describir profundamente el funcionamiento de la CPU, vamos a hacer constar que la CPU est fabricada con la tecnologa RISC ya que esto es un factor importante al decidir qu microcontrolador utilizar. RISC es un acrnimo derivado del ingls Reduced Instruction Set Computer, lo que proporciona al PIC16F887 dos grandes ventajas:

La CPU cuenta con slo 35 instrucciones simples. Cabe decir que para poder programar otros microcontroladores en lenguaje ensamblador es necesario saber ms de 200 instrucciones El tiempo de ejecucin es igual para casi todas las instrucciones y tarda 4 ciclos de reloj. La frecuencia del oscilador se estabiliza por un cristal de cuarzo. Las instrucciones de salto y de ramificacin tardan ocho ciclos de reloj en ejecutarse. Esto significa que si la velocidad de operacin del microcontrolador es 20 MHz, el tiempo de ejecucin de cada instruccin ser 200nS, o sea, el programa ejecutar 5millones de instrucciones por segundo!

MEMORIA

El PIC16F887 tiene tres tipos de memoria: ROM, RAM y EEPROM. Como cada una tiene las funciones, caractersticas y organizacin especficas, vamos a presentarlas por separado.
MEMORIA ROM

La memoria ROM se utiliza para guardar permanente el programa que se est ejecutando. Es la razn por la que es frecuentemente llamada memoria de programa. El PIC16F887 tiene 8Kb de memoria ROM (en total 8192 localidades). Como la memoria ROM est fabricada con tecnologa FLASH, su contenido se puede cambiar al proporcionarle un voltaje de programacin especial (13V).

No obstante, no es necesario explicarlo en detalles puesto que se realiza automticamente por un programa especial en la PC y un simple dispositivo electrnico denominado programador.

MEMORIA EEPROM

Similar a la memoria de programa, el contenido de memoria EEPROM est permanentemente guardado al apagar la fuente de alimentacin. Sin embargo, a diferencia de la ROM, el contenido de la EEPROM se puede cambiar durante el funcionamiento del microcontrolador. Es la razn por la que esta memoria (256 localidades) es perfecta para guardar permanentemente algunos resultados creados y utilizados durante la ejecucin del programa.
MEMORIA RAM

Es la tercera y la ms compleja parte de la memoria del microcontrolador. En este caso consiste en dos partes: en registros de propsito general y en los registros de funciones especiales (SFR). Todos estos registros se dividen en cuatro bancos de memoria de los que vamos a hablar ms tarde en este captulo. Aunque los dos grupos de registros se ponen a cero al apagar la fuente de alimentacin, adems estn fabricados de la misma forma y se comportan de la manera similar, sus funciones no tienen muchas cosas en comn.

REGISTROS DE PROPSITO GENERAL

Los registros de propsito general se utilizan para almacenar los datos temporales y los resultados creados durante el funcionamiento. Por ejemplo, si el programa realiza el conteo (de los productos en una cadena de montaje), es necesario tener un registro que representa lo que en la vida cotidiana llamamos suma. Como el microcontrolador no es nada creativo, es necesario especificar la direccin de un registro de propsito general y asignarle esa funcin. Se debe crear un programa simple para incrementar el valor de este registro por 1, despus de que cada producto haya pasado por el sensor. Ahora el microcontrolador puede ejecutar el programa ya que sabe qu es y dnde est la suma que se va a incrementar. De manera similar, a cada variable de programa se le debe pre-asignar alguno de los registros de propsito general.
REGISTROS DE FUNCIONES ESPECIALES (SFR)

Los registros de funciones especiales son tambin parte de la memoria RAM. A diferencia de los registros de propsito general, su propsito es predeterminado durante el proceso de fabricacin y no se pueden cambiar. Como los bits estn conectados a los circuitos particulares en el chip (convertidor A/D, mdulo de comunicacin serial, etc), cualquier cambio de su contenido afecta directamente al funcionamiento del microcontrolador o de alguno de los circuitos. Por ejemplo, el registro ADCON0 controla el funcionamiento del convertidor A/D. Al cambiar los bits se determina qu pin del puerto se configurar como la entrada del convertidor, el momento del inicio de la conversin as como la velocidad de la conversin. Otra caracterstica de estas localidades de memoria es que tienen nombres (tanto los registros como sus bits), lo que simplifica considerablemente el proceso de escribir un programa. Como el lenguaje de programacin de alto nivel puede utilizar la lista de todos los registros con sus direcciones exactas, basta con especificar el nombre de registro para leer o cambiar su contenido.
BANCOS DE LA MEMORIA RAM

La memoria RAM est dividida en cuatro bancos. Antes de acceder a un registro al escribir un programa (para leer o cambiar su contenido), es necesario seleccionar el banco que contiene ese registro. Ms tarde vamos a tratar dos bits del registro STATUS utilizados para seleccin del banco. Para simplificar el funcionamiento, los SFR utilizados con ms frecuencia tienen la misma direccin en todos los bancos, lo que permite accederlos con facilidad.

PILA

Una parte de la RAM utilizada como pila consiste de ocho registros de 13 bits. Antes de que el microcontrolador se ponga a ejecutar una subrutina (instruccin CALL) o al ocurrir una interrupcin, la direccin de la primera siguiente instruccin en ser ejecutada se coloca en la pila (se apila), o sea, en uno de los

registros. Gracias a eso, despus de ejecutarse una subrutina o una interrupcin, el microcontrolador sabe dnde continuar con la ejecucin de programa. Esta direccin se borra (se desapila) despus de volver al programa, ya que no es necesario guardarla, disponiendo automticamente esas localidades de la pila para un uso futuro. Cabe tener en mente que el dato se apila circularmente. Esto significa que despus de que se apile ocho veces, la novena vez se sobrescribe el valor que se almacen al apilar el dato por primera vez. La dcima vez que se apile, se sobrescribe el valor que se almacen al apilar el dato por segunda vez etc. Datos sobrescritos de esta manera no se pueden recuperar. Adems, el programador no puede acceder a estos registros para hacer escritura/lectura. No hay ningn bit de estado para indicar el estado de desbordamiento o subdesbordamiento de pila. Por esta razn hay que tener un especial cuidado al escribir un programa.
SISTEMA DE INTERRUPCIONES

Al aparecer una peticin de interrupcin lo primero que hace el microcontrolador es ejecutar la instruccin actual despus de que se detiene el proceso de ejecucin de programa. Como resultado, la direccin de memoria de programa actual se apila automticamente y la direccin por defecto (predefinida por el fabricante) se escribe en el contador de programa. La localidad en la que el programa contina con la ejecucin se le denomina vector de interrupcin. En el caso del microcontrolador PIC16F887 esta direccin es 0x0004h. Como se muestra en la siguiente figura la localidad que contiene el vector de interrupcin se omite durante la ejecucin de programa regular. Una parte de programa que se ejecutar al hacer una peticin de interrupcin se le denomina rutina de interrupcin. Su primera instruccin se encuentra en el vector de interrupcin. Cunto tiempo tardar en ejecutar esta subrutina y cmo ser depende de la destreza del programador as como de la fuente de interrupcin. Algunos microcontroladores tienen ms de un vector de interrupcin (cada peticin de interrupcin tiene su vector), pero en este caso slo hay uno. En consecuencia, la primera parte da la rutina de interrupcin consiste en detectar la fuente de interrupcin. Por fin, al reconocer la fuente de interrupcin y al terminar de ejecutar la rutina de interrupcin el microcontrolador alcanza la instruccin RETFIE, toma la direccin de la pila y contina con la ejecucin de programa desde donde se interrumpi.

Cmo utilizar los registros SFR

Supongamos que usted ha comprado ya un microcontrolador y que tiene una buena idea de cmo utilizarlo... La lista de los registros SFR as como de sus bits es muy larga. Cada uno controla algn proceso. En general, parece como una gran tabla de control con un gran nmero de instrumentos e interruptores. Ahora est preocupado de cmo conseguir aprender acerca de todos ellos? Es poco probable, pero no se preocupe, Usted no tiene que hacerlo! Los microcontroladores son tan potentes que se parecen a los supermercados: ofrecen tantas cosas a bajos precios y a usted solo le toca elegir las que necesita. Por eso, seleccione el campo en que est interesado y examine slo lo que necesita. Cuando entienda completamente el funcionamiento de hardware, examine los registros SFR encargados de controlarlo (normalmente son unos pocos). Como todos los dispositivos tienen un tipo de sistema de control el microcontrolador tiene sus "palancas" con las que usted debe estar familiarizado para ser capaz de utilizarlos correctamente. Por supuesto, estamos hablando de los registros SFR desde los que el proceso de programacin se inicia y en los que el mismo termina.

PRINCIPALES REGISTROS SFR


El siguiente texto describe los principales registros SFR del microcontrolador PIC16F887. Los bits de cada registro controlan los circuitos diferentes dentro del chip, as que no es posible clasificarlos en grupos especiales. Por esta razn, se describen junto con los procesos que controlan.
Registro STATUS

El registro STATUS contiene: el estado aritmtico de datos en el registro W, el estado RESET, los bits para seleccionar el banco para los datos de la memoria.

IRP - Registro de seleccin de Banco (usado para direccionamiento indirecto) o 1 - Bancos 0 y 1 son activos (localidades de memoria 00h-FFh) o 0 - Bancos 2 y 3 son activos (localidades de memoria 100h-1FFh) RP1,RP0 - Registro de seleccin de banco (usado para direccionamiento directo).

TO - Time-out bit (bit de salida del temporizador perro guardin) o 1 - Despus de encender el microcontrolador, despus de ejecutarse la instruccin CLRWDT que reinicia al WDT (temporizador perro guardin) o despus de ejecutarse la instruccin SLEEP que pone al microcontrolador en el modo de bajo consumo. o 0 - Despus de acabarse el tiempo del WDT. PD - Power-down bit (bit de apagado) o 1 - Despus de encender el microcontrolador, despus de ejecutar la instruccin CLRWDT que reinicia al WDT. o 0 - Despus de ejecutarse la instruccin SLEEP que pone al microcontrolador en el modo de bajo consumo. Z - Zero bit (bit cero) o 1 - El resultado de una operacin lgica o aritmtica es 0. o 0 - El resultado de una operacin lgica o aritmtica es distinto de 0. DC - Digit carry/borrow bit (bit de acarreo/prstamo de dgito) cambia al sumar o al restar si ocurre un "desbordamiento" o un "prstamo" en el resultado. o 1 - Hubo acarreo del cuarto bit de orden bajo (nibble bajo) en el resultado. o 0 - No hubo acarreo del cuarto bit de orden bajo (nibble bajo) en el resultado. C - Carry/Borrow bit (bit de acarreo/prstamo) cambia al sumar o al restar si ocurre un "desbordamiento" o un "prstamo" en el resultado, o sea si el resultado es mayor de 255 o menor de 0. o 1 - Ocurri acarreo en el bit ms significativo (MSB) del resultado. o 0 - No ocurri acarreo en el bit ms significativo (MSB) del resultado.

Registro OPTION_REG

El registro OPTION_REG contiene varios bits de control para configurar el pre - escalador del Temporizador 0/WDT, el temporizador Timer0, la interrupcin externa y las resistencias pull-up en el puerto PORTB.

RBPU - Port B Pull up Enable bit (resistencia Pull Up Puerto B) o 1 - Desactivadas. o 0 - Activadas.

INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la interrupcin externa) o 1 - Interrupcin por flanco ascendente en el RB0/INT. o 0 - Interrupcin por flanco descendente en el RB0/INT.

T0CS - TMR0 Clock Source Select bit (bit selector de tipo de reloj para el Timer0) o 1 - Pulsos introducidos a travs del TOCKI (contador). o 0 - Pulsos de reloj internos Fosc/4 (temporizador).

T0SE - TMR0 Source Edge Select bit (bit selector de tipo de flanco en TOCKI) selecciona el flanco (ascendente o descendente) contado por el temporizador Timer0 por el pin RA4/T0CKI. o 1 - Incrementa en flanco descendente en el pin TOCKI. o 0 - Incrementa en flanco ascendente en el pinTOCKI.

PSA - Prescaler Assignment bit asigna el pre-escalador (hay slo uno) al temporizador o al WDT. o 1 - Pre - escalador se le asigna al WDT. o 0 - Pre - escalador se le asigna al temporizador Timer0.

PS2, PS1, PS0 Prescaler Rate Select bits (bit selector del valor del divisor de frecuencia)

El valor del divisor de frecuencia se selecciona al combinar estos tres bits. Como se muestra en la siguiente tabla, el valor del divisor de frecuencia se le asigna al temporizador (Timer0) o al temporizador perro guardin (WDT).

Para conseguir el valor del divisor de frecuencia 1:1 cuando el temporizador Timer0 cuenta pulsos, el preescalador debe ser asignado al WDT. En consecuencia, el temporizador Timer0 no utiliza el pre-escalador, sino que cuenta directamente los pulsos generados por el oscilador, lo que era el objetivo. REGISTROS DEL SISTEMA DE INTERRUPCIN

Al llegar la peticin de interrupcin, no significa que una interrupcin ocurrir automticamente, puesto que debe ser habilitada por el usuario (por el programa) tambin. Por esta razn, hay bits especiales utilizados para habilitar o deshabilitar interrupciones. Es fcil de reconocerlos por las letras IE contenidas en sus nombres (Interrupt Enable - Interrupcin habilitada). Adems, cada interrupcin se asocia con otro bit denominado bandera que indica que una peticin de interrupcin ha llegado sin verificar si est habilitada. Asimismo, se reconocen con facilidad por las dos ltimas letras contenidas en sus nombres - IF (Interrupt Flag - Bandera de interrupcin).

Como hemos visto, toda la idea es muy simple y eficiente. Al llegar la peticin de interrupcin, primero el bit de bandera se pone a uno. Si el bit IE apropiado est a cero (0), esta condicin ser ignorada completamente. De lo contrario, ocurre una interrupcin. Si varias fuentes de interrupcin estn habilitadas, es necesario detectar la activa antes de que la rutina de interrupcin se ponga a ejecutar. La deteccin de la fuente se realiza al comprobar los bits de las banderas. Cabe destacar que los bits de cada bandera no se ponen a cero automticamente, sino por el software, mientras que la ejecucin de la rutina de interrupcin contina ejecutndose. Si no hacemos caso a este detalle, ocurrir otra interrupcin inmediatamente despus de volver al programa principal, aunque no hay ms peticiones de ejecucin. Simplemente, la bandera, as como el bit IE, se quedan en uno.

Todas las fuentes de interrupcin tpicas para el microcontrolador PIC16F887 se muestran en la siguiente pgina. Fjese en lo siguiente: El bit GIE habilita/deshabilita simultneamente las interrupciones no enmascaradas. El PEIE bit habilita/deshabilita las interrupciones no enmascaradas de perifricos. Esto no se refiere al temporizador Timer0 y a las fuentes de interrupcin del puerto PORTB. Para habilitar una interrupcin causada por el cambio del estado lgico en el puerto PORTB, es necesario habilitarla para cada bit por separado. En este caso, los bits del registro IOCB se comportan como los bits IE de control.

Registro INTCON

El registro INTCON contiene varios bits de habilitacin y de bandera para el desbordamiento en el registro TMR0, e interrupciones por el cambio del estado en el puerto PORTB y las interrupciones externas en el pin INT.

GIE - Global Interrupt Enable bit - (bit de habilitacin de interrupciones globales) controla simultneamente todas las fuentes de interrupciones posibles. o 1 - Habilita las interrupciones no enmascaradas. o 0 - Deshabilita las interrupciones no enmascaradas. PEIE - Peripheral Interrupt Enable bit (bit de habilitacin de interrupciones perifricas) es similar al bit GIE, sin embargo controla interrupciones habilitadas por los perifricos. Eso significa que no influye en interrupciones causadas por el temporizador Timer0 o por el cambio del estado en el puerto PORTB o por el cambio en el pin RB0/INT. o 1 - Habilita las interrupciones perifricas no enmascaradas. o 0 - Deshabilita las interrupciones perifricas no enmascaradas. T0IE - TMR0 Overflow Interrupt Enable bit (bit de habilitacin de interrupciones por el desbordamiento del temporizador Timer0) controla interrupciones causadas por el desbordamiento del Timer0. o 1 - Habilita interrupciones por Timer0. o 0 - Deshabilita interrupciones por Timer0. INTE - RB0/INT External Interrupt Enable bit (bit de habilitacin de la interrupcin externa en RB0) controla interrupciones causadas por el cambio del estado lgico en el pin de entrada RB0/INT (interrupcin externa). o 1 - Habilita interrupciones externas INT. o 0 - Deshabilita interrupciones externas INT. RBIE - RB Port Change Interrupt Enable bit (bit de habilitacin de interrupciones por cambios en el puerto PORTB). Cuando se configuran como entradas, los pines en el puerto PORTB pueden causar una interrupcin al cambiar el estado lgico (no importa si se produce bajada o subida de tensin, lo que importa es que se produce un cambio). Este bit determina si una interrupcin va a ocurrir. o 1 - Habilita interrupciones por cambio en el puerto PORTB. o 0 - Deshabilita interrupciones por cambio en el puerto PORTB. T0IF - TMR0 Overflow Interrupt Flag bit (bit de bandera de interrupcin por el desbor damiento del Timer0) detecta el desbordamiento en el registro del temporizador Timer0, o sea el contador se pone a cero. o 1 - En el registro del Timer0 ha ocurrido desbordamiento (esta bandera debe volverse a 0 por software). o 0 - En el registro del Timer0 no ha ocurrido desbordamiento. INTF - RB0/INT External Interrupt Flag bit (bit de bandera de interrupcin externa en INT) detecta el cambio en el estado lgico en el pin INT. o 1 - Ha ocurrido una interrupcin externa por INT (esta bandera debe volverse a 0 por software)

0 - No ha ocurrido una interrupcin externa por INT.

RBIF - RB Port Change Interrupt Flag bit (bit de bandera de interrupcin por cambio en el puerto RB) detecta cualquier cambio del estado lgico de alguno de los pines de entrada en el puerto PORTB. o 1 - Al menos uno de los pines de E/S de propsito general en el puerto PORTB ha cambido de valor. Despus de leer el puerto PORTB, el bit RBIF debe volverse a 0 por software). o 0 - Ninguno de los pines de E/S de propsito general en el puerto PORTB ha cambiado de valor.

Registro PIE1

El registro PIE1 contiene los bits de habilitacin de interrupciones perifricas.

ADIE - A/D Converter Interrupt Enable bit (bit de habilitacin de interrupciones del convertidor A/D). o 1 - Habilita la interrupcin ADC. o 0 - Deshabilita la interrupcin ADC. RCIE - EUSART Receive Interrupt Enable bit (bit de habilitacin de interrupciones de recepcin del EUSART). o 1 - Habilita la interrupcin de recepcin del EUSART. o 0 - Deshabilita la interrupcin de recepcin del EUSART. TXIE - EUSART Transmit Interrupt Enable bit (bit de habilitacin de interrupciones de transmisin del EUSART). o 1 - Habilita la interrupcin de transmisin del EUSART. o 0 - Deshabilita la interrupcin de transmisin del EUSART. SSPIE - Master Synchronous Serial Port (MSSP) Interrupt Enable bit - (bit de habilitacin de la interrupcin del puerto serie sncrono maestro (MSSP) habilita generar una peticin de interrupcin despus de cada transmisin de datos por el mdulo de comunicacin serie sncrona (modo SPI o I2C). o 1 - Habilita la interrupcin del MSSP. o 0 - Deshabilita la interrupcin del MSSP. CCP1IE - CCP1 Interrupt Enable bit (bit de habilitacin de la interrupcin del mdulo 1 de Comparacin/Captura/PWM - CCP1) permite generar una peticin de interrupcin en el mdulo CCP1 utilizado para procesamiento de la seal PWM. o 1 - Habilita la interrupcin CCP1. o 0 - Deshabilita la interrupcin CCP1.

TMR2IE - TMR2 to PR2 Match Interrupt Enable bit (bit de habilitacin de la interrupcin de igualdad entre TMR2 y PR2) o 1 - Habilita la interrupcin de igualdad entre TMR2 y PR2. o 0 - Deshabilita la interrupcin de igualdad entre TMR2 y PR2. TMR1IE - TMR1 Overflow Interrupt Enable bit (bit de habilitacin de la interrupcin de desbordamiento del temporizador Timer1) habilita generar una peticin de interrupcin despus de cada desbordamiento en el registro del temporizador Timer1, o sea el contador se pone a cero. o 1 - Habilita la interrupcin de desbordamiento del temporizador Timer1. o 0 - Deshabilita la interrupcin de desbordamiento del temporizador Timer1.

Registro PIE2

El registro PIE2 tambin contiene varios bits de habilitacin de interrupciones.

OSFIE - Oscillator Fail Interrupt Enable bit (bit de habilitacin de la interrupcin de fallo en el oscilador) o 1 - Habilita la interrupcin de fallo en el oscilador. o 0 - Deshabilita la interrupcin de fallo en el oscilador. C2IE - Comparator C2 Interrupt Enable bit (bit de habilitacin de la interrupcin del comparador C2) o 1 - Habilita la interrupcin del comparador C2. o 0 - Deshabilita la interrupcin del comparador C2. C1IE - Comparator C1 Interrupt Enable bit (bit de habilitacin de la interupcin del comparador C1) o 1 - Habilita la interrupcin del comparador C1 o 0 - Deshabilita la interrupcin del comparador C1. EEIE - EEPROM Write Operation Interrupt Enable bit (bit de habilitacin de la interrupcin de escritura en la memoria EEPROM) o 1 - Habilita la interrupcin de escritura en la memoria EEPROM. o 0 - Deshabilita la interrupcin de escritura en la memoria EEPROM. BCLIE - Bus Collision Interrupt Enable bit (bit de habilitacin de la interrupcin de colisin de bus) o 1 - Habilita la interrupcin de colisin de bus. o 0 - Deshabilita la interrupcin de colisin de bus.

ULPWUIE - Ultra Low-Power Wake-up Interrupt Enable bit (bit de habilitacin de la interrupcin para salir del modo de ultra bajo consumo - la reactivacin) o 1 - Habilita la interrupcin para salir del modo de ultra bajo consumo. o 0 - Deshabilita la interrupcin para salir del modo de ultra bajo consumo. CCP2IE - CCP2 Interrupt Enable bit (bit de habilitacin de la interrupcin del mdulo 2 de Comparacin/Captura/PWM (CCP2) o 1 - Habilita la interrupcin del CCP2. o 0 - Deshabilita la interrupcin del CCP2.

Registro PIR1

El registro PIR1 contiene los bits de banderas de interrupcin.

ADIF - A/D Converter Interrupt Flag bit (bit de bandera de la interrupcin del convertidor A/D) o 1 - Se ha completado una conversin A/D (el bit debe volverse a 0 por software) o 0 - No se ha completado una conversin A/D o no ha empezado RCIF - EUSART Receive Interrupt Flag bit (bit de bandera de la interrupcin de recepcin del EUSART) o 1 - El bfer de recepcin del EUSART est lleno. El bit se pone a cero al leer el registro RCREG. o 0 - El bfer de recepcin del EUSART no est lleno. TXIF - EUSART Transmit Interrupt Flag bit (bit de la interrupcin de transmisin del EUSART) o 1 - El bfer de transmisin del EUSART est vaco. El bit se pone a cero al esribir un dato en el registro TXREG. o 0 - El bfer de transmisin del EUSART est lleno. SSPIF - Master Synchronous Serial Port (MSSP) Interrupt Flag bit (bit de bandera de la interrupcin de puerto serie sncrono maestro) o 1 - Se ha cumplido la condicin de ocurrir una interrupcin del MSSP al transmitir/ recibir los datos. Difieren dependiendo del modo de operacin del MSSP (SPI o I2C). El bit debe ponerse a cero por software antes de volver de la rutina de servicio de interrupciones) o 0 - No se ha cumplido ninguna condicin de ocurrir una interrupcin del MSSP. CCP1IF - CCP1 Interrupt Flag bit (bit de bandera de la interrupcin del mdulo 1 de Comparacin/Captura/PWM (CCP1). o 1 - Se ha cumplido la condicin de la interrupcin del CCP1 (CCP1 es una unidad para captar, comparar y generar una seal PWM). Dependiendo del modo de operacin (modo captura o

modo comparacin), se produce una captura o la igualdad en la comparacin. En ambos casos, el bit debe volverse a cero por software. El bit no se utiliza en el modo PWM. 0 - No se ha cumplido la condicin de la interrupcin del CCP1.

TMR2IF - Timer2 to PR2 Interrupt Flag bit (bit de bandera de la interrupcin de igual dad entre el temporizador Timer2 y el registro PR2) o 1 - Se ha producido igualdad con el valor del TMR2 (registro de 8 bits del temporizador) y el valor del PR2. El bit debe ponerse a cero por software antes de volver de la rutina de servicio de interrupciones). o 0 - No se ha producido igualdad con el valor del TMR2 y el valor del PR2. TMR1IF - Timer1 Overflow Interrupt Flag bit (bit de bandera de la interrupcin de desbordamiento del temporizador Timer1) o 1 - Se ha producido desbordamiento del Timer1. El bit debe ponerse a cero por software. o 0 - No se ha producido desbordamiento del Timer1.

Registro PIR2

El registro PIR2 contiene los bits de banderas da la interrupcin.

OSFIF - Oscillator Fail Interrupt Flag bit (bit de bandera de la interrupcin de fallo en el oscilador) o 1 - Se ha producido un fallo en el oscilador del sistema. La entrada de reloj ha sido conmutada al oscilador interno INTOSC. El bit debe ponerse a cero por software. o 0 - El oscilador del sistema funciona correctamente. C2IF - Comparator C2 Interrupt Flag bit (bit de bandera de la interrupcin del comparador C2) o 1 - La salida del comparador analgico C2 ha sido cambiada (el bit C2OUT). El bit debe ponerse a cero por software. o 0 - La salida del comparador analgico C2 no ha sido cambiada. C1IF - Comparator C1 Interrupt Flag bit (bit de bandera de la interrupcin del comparador C1) o 1 - La salida del comparador analgico C1 ha sido cambiada (el bit C1OUT). El bit debe ponerse a cero por software. o 0 - La salida del comparador analgico C1 no ha sido cambiada. EEIF - EE Write Operation Interrupt Flag bit (bit de bandera de la interrupcin de la operacin de escritura en la memoria EEPROM) o 1 - La operacin de escritura en la memoria EEPROM se ha completado. El bit debe ponerse a cero por software.

0 - La operacin de escritura en la memoria EEPROM no se ha completado o todava no se ha iniciado.

BCLIF - Bus Collision Interrupt Flag bit (bit de bandera de la interrupcin de colisin de bus en el MSSP) o 1 - Se ha producido una colisin de bus en el MSSP al ser configurado para el modo maestro I2C. El bit debe ponerse a cero por software. o 0 - No se ha producido colisin de bus en el MSSP. ULPWUIF - Ultra Low-power Wake-up Interrupt Flag bit (bit de bandera de la interrupcin para salir del modo de ultra bajo consumo - la reactivacin) o 1 - Se ha cumplido la condicin de salir del modo de ultra bajo consumo. El bit debe ponerse a cero por software. o 0 - No se ha cumplido la condicin de salir del modo de ultra bajo consumo. CCP2IF - CCP2 Interrupt Flag bit (bit de la interrupcin del mdulo 2 de Comparacin/Captura/PWM - CCP2) o 1 - Se ha cumplido la condicin de la interrupcin del CCP2 (CCP2 es una unidad para captar, comparar y generar una seal PWM). Dependiendo del modo de operacin (modo captura o modo comparacin), se produce una captura o la igualdad en la comparacin. En ambos casos, el bit debe volverse a cero por software. El bit no se utiliza en el modo PWM. o 0 - No se ha cumplido la condicin de la interrupcin del CCP2.

Registro PCON

El registro PCON contiene solamente dos bits de banderas utilizados para diferenciar entre un Power-on reset (POR), un Brown-out reset (BOR), un reinicio por el temporizador perro guardin (WDT) y un reinicio externo por el pin MCLR.

ULPWUE - Ultra Low-Power Wake-up Enable bit (bit de habilitacin para salir del modo de ultra bajo consumo - la reactivacin) o 1 - Se habilita salir del modo de ultra bajo consumo. o 0 - No se habilita salir del modo de ultra bajo consumo. SBOREN - Software BOR Enable bit (bit de habilitacin del BOR por software) o 1 - Se habilita Brown-out reset. o 0 - Se deshabilita Brown-out reset. POR - Power-on Reset Status bit (bit de estado Power - on reset)

o o

1 - No se ha producido Power - on reset. 0 - Se ha producido Power - on reset. El bit debe ponerse a uno por software despus de que se haya producido un Power - on reset.

BOR - Brown-out Reset Status bit (bit de estado Brown - out reset) o 1 - No se ha producido Brown - out reset. o 0 - Se ha producido Brown - out reset. El bit debe ponerse a uno por software despus de que se haya producido Brown - out reset.

REGISTROS PCL Y PCLATH

La memoria de programa del PIC16F887 es de 8K y tiene 8192 localidades para el almacenamiento de programa. Por esta razn, el contador de programa debe de ser de 13 bits de anchura (213 = 8192). Para habilitar el acceso a una localidad de memoria de programa durante el funcionamiento del microcontrolador , es necesario acceder a su direccin por medio de los registros SFR. Como todos los registros SFR son de 8 bits de anchura, este registro de direccionamiento es creado artificialmente al dividir los 13 bits en dos registros independientes, PCLATH y PCL. Si la ejecucin de programa no afecta al contador de programa, el valor de este registro va incrementndose automtica y constantemente: +1, +1, +1, +1... De esta manera, el programa se ejecuta como est escrito - instruccin a instruccin, seguido por un incremento de direccin constante.

Si el contador de programa ha sido cambiado por software, debe tomar en cuenta lo siguiente para evitar problemas:

Los ocho bits inferiores (el byte inferior) del registro PCL son de lectura/escritura, mientras que los cinco bits superiores del registro PCLATH son de slo escritura. El registro PCLATH se borra con cada reinicio. En el lenguaje ensamblador, el valor del contador de programa est marcado con PCL y se refiere slo a los ocho bits. Usted debe tener cuidado al utilizar la instruccin "ADDWF PCL". Esto es una instruccin de salto que especifica la localidad destino al aadir un nmero a la direccin actual. Se utiliza con frecuencia para saltar a la tabla de bsqueda o a la tabla de ramificacin de programa y leerlas. Un problema surge si la direccin actual es de tal tamao que al sumar se produce un cambio en un bit que pertenece al byte superior del registro PCLATH. La ejecucin de una instruccin sobre el registro PCL causa simultneamente la sustitucin de los bits del contador de programa por los contenidos en el registro PCLATH. De todos modos, el registro PCL puede acceder slo a 8 bits inferiores del resultado de la instruccin, pues el siguiente salto ser completamente incorrecto. La solucin a este problema es poner estas instrucciones en las direcciones que terminan en xx00h. De esta manera se habilitan los saltos de programa hasta 255 localidades. Si se ejecutan los saltos ms largos por medio de esta instruccin, el registro PCLATH debe ser incrementado por 1 cada vez que se produce desbordamiento en el registro PCL. Al llamar una subrutina o al ejecutarse un salto (instrucciones CALL y GOTO), el microcontrolador es capaz de proporcionar solamente direccionamiento de 11 bits. Similar a la RAM que est dividida en bancos, la ROM est dividida en las cuatro pginas de 2K cada una. Las instrucciones dentro de estas pginas se ejecutan regularmente. Dicho de manera sencilla, como el procesador est proporcionado con una direccin de 11 bits del programa, es capaz de direccionar cualquier localidad dentro de 2KB. La siguiente figura muestra el salto a la direccin del subprograma PP1.

Sin embargo, si una subrutina o una direccin de salto no est en la misma pgina que la localidad de salto, se deben proporcionar dos bits superiores que faltan al escribir en el registro PCLATH. La siguiente figura muestra el salto a la direccin de la subrutina PP2. En ambos casos, cuando la subrutina llega a las instrucciones RETURN, RETLW o RETFIE (vuelta al programa principal), el microcontrolador continuar con la ejecucin de programa desde donde se interrumpi, ya que la direccin de retorno se empuja y se guarda en la pila que consiste en registros de 13 bits, como hemos mencionado.
REGISTROS DE DIRECCIONAMIENTO INDIRECTO

Adems del direccionamiento directo, que es lgico y claro (basta con especificar la direccin de un registro para leer su contenido), este microcontrolador es capaz de realizar el direccionamiento indirecto por los registros INDF y FSR. A veces esto facilita el proceso de escribir un programa. El procedimiento entero est habilitado ya que el registro INDF no es real (no existe fsicamente), sino que solamente especifica el registro cuya direccin est situada en el registro FSR. Por esta razn, escribir o leer los datos del registro INDF realmente significa escribir o leer del registro cuya direccin est situada en el registro FSR. En otras palabras, direcciones de registros se especifican en el registro FSR, y su contenido se almacena en el registro INDF. La diferencia entre el direccionamiento directo e indirecto se muestra en la siguiente figura: Como hemos visto, el problema con "los bits de direccionamiento que faltan" se soluciona con un "prstamo" del otro registro. Esta vez, es el sptimo bit, denominado bit IRP del registro STATUS.

Una de las caractersticas ms importantes del microcontrolador es el nmero de los pines de entrada/ salida, que permite conectarlo con los perifricos. El PIC16F887 tiene en total 35 pines de E/S de propsito general, lo que es suficiente para la mayora de las aplicaciones.

PUERTOS DE ENTRADA/SALIDA
Con el propsito de sincronizar el funcionamiento de los puertos de E/S con la organizacin interna del microcontrolador de 8 bits, ellos se agrupan, de manera similar a los registros, en cinco puertos denotados con A, B, C, D y E. Todos ellos tienen las siguientes caractersticas en comn:

Por las razones prcticas, muchos pines de E/S son multifuncionales. Si un pin re aliza una de estas funciones, puede ser utilizado como pin de E/S de propsito general. Cada puerto tiene su propio registro de control de flujo, o sea el registro TRIS correspondiente: TRISA, TRISB, TRISC etc. lo que determina el comportamiento de bits del puerto, pero no determina su contenido.

Al poner a cero un bit del registro TRIS (pin=0), el pin correspondiente del puerto se configurar como una salida. De manera similar, al poner a uno un bit del registro TRIS (bit=1), el pin correspondiente del puerto se configurar como una entrada. Esta regla es fcil de recordar: 0 = Entrada 1 = Salida.

Puerto PORTA y registro TRISA

El puerto PORTA es un puerto bidireccional, de 8 bits de anchura. Los bits de los registros TRISA y ANSEL controlan los pines del PORTA. Todos los pines del PORTA se comportan como entradas/salidas digitales. Cinco de ellos pueden ser entradas analgicas (denotadas por AN):

RA0 = AN0 (determinado por el bit ANS0 del registro ANSEL) RA1 = AN1 (determinado por el bit ANS1 del registro ANSEL) RA2 = AN2 (determinado por el bit ANS2 del registro ANSEL) RA3 = AN3 (determinado por el bit ANS3 del registro ANSEL) RA5 = AN4 (determinado por el bit ANS4 del registro ANSEL)

Similar a que los bits del registro TRISA determinan cules pines sern configurados como entradas y cules sern configurados como salidas, los bits apropiados del registro ANSEL determinan si los pines sern configurados como entradas analgicas o entradas/salidas digitales. Cada bit de este puerto tiene una funcin adicional relacionada a algunas unidades perifricas integradas, que vamos a describir en los siguientes captulos. Este captulo cubre slo la funcin adicional del pin RA0, puesto que est relacionado al puerto PORTA y a la unidad ULPWU.
UNIDAD ULPWU

El microcontrolador se utiliza generalmente en los dispositivos que funcionan peridicamente y completamente independiente utilizando una fuente de alimentacin de batera. En tal caso, el consumo de corriente mnimo es una de las prioridades. Los ejemplos tpicos de tales aplicaciones son: termmetros, sensores de deteccin del fuego y similar. Es conocido que al reducir frecuencia de reloj se reduce el consumo de corriente, pues una de las soluciones ms convenientes a este problema es bajar la frecuencia de reloj, o sea utilizar el cristal de cuarzo de 32KHz en vez de el de 20MHz.

Al poner el microcontrolador en el modo de reposo es otro paso en la misma direccin. An ha quedado el problema de salir de este modo y poner el microcontrolador en modo normal de funcionamiento. Es obviamente necesario tener una seal externa en alguno de los pines. Esta seal debe ser generada por componentes electrnicos adicionales, lo que resulta en un consumo de energa ms alto del dispositivo completo... La solucin perfecta sera que el microcontrolador saliera del modo de reposo peridicamente por si mismo, lo que no es imposible. El circuito que lo habilita se muestra en la figura a la izquierda. El principio de funcionamiento es simple: Un pin se configura como salida y se le lleva un uno lgico (1). Esto causa una carga del capacitor. Inmediatamente despus, el mismo pin se configura como entrada. El cambio de estado lgico habilita una interrupcin y el microcontrolador entra en modo de reposo. Slo ha quedado esperar que se descargue el capacitor por la corriente de fuga fluyendo por el pin de entrada. Despus de la descarga, se produce una interrupcin y el microcontrolador contina con la ejecucin de programa en modo normal. Todo el procedimiento se repite.

En teora, esto es una solucin perfecta. El problema es que todos los pines capaces de causar una interrupcin son digitales y tienen una corriente de fuga relativamente alta cuando el voltaje sobre ellos no est cerca de los valores lmites de Vdd (1) o VSS (0). En este caso, el condensador se descarga en poco tiempo ya que la corriente es de varias centenas de microamperios. Por esta razn se dise el circuito ULPWU, capaz de indicar una lenta cada de voltaje con un consumo de corriente mnimo. La salida genera una interrupcin, mientras que la entrada est conectada a uno de los pines del microcontrolador. Es el pin RA0. Refirindose a la Figura (R=200 ohms, C=1nF), el tiempo de descarga es aproximadamente 30mS, mientras que un consumo total de corriente del microcontrolador es 1000 veces ms bajo (de varias centenas de nanoamperios).
Puerto PORTB y registro TRISB

El puerto PORTB es un puerto bidireccional, de 8 bits de anchura. Los bits del registro TRISB determinan la funcin de sus pines.

Similar al puerto PORTA, un uno lgico (1) en el registro TRISB configura el pin apropiado en el puerto PORTB y al revs. Los seis pines de este puerto se pueden comportar como las entradas analgicas (AN). Los bits del registro ANSELH determinan si estos pines sern configurados como entradas analgicas o entradas/salidas digitales: RB0 = AN12 (determinado por el bit ANS12 del registro ANSELH) RB1 = AN10 (determinado por el bit ANS10 del registro ANSELH) RB2 = AN8 (determinado por el bit ANS8 del registro ANSELH) RB3 = AN9 (determinado por el bit ANS9 del registro ANSELH) RB4 = AN11 (determinado por el bit ANS11del registro ANSELH) RB4 = AN11 (determinado por el bit ANS11del registro ANSELH) Cada bit de este puerto tiene una funcin adicional relacionada a algunas unidades perifricas integradas, que vamos a describir en los siguientes captulos.

Este puerto dispone de varias caractersticas por las que se distingue de otros puertos y por las que sus pines se utilizan con frecuencia:

Todos los pines del puerto PORTB tienen las resistencias pull-up integradas, que los hacen perfectos para que se conecten con los botones de presin (con el teclado), interruptores y optoacopladores. Con el propsito de conectar las resisitencias a los puertos del microcontrolador, el bit apropiado del registro WPUB debe estar a uno.*

Al tener un alto nivel de resistencia (varias decenas de kiloohmios), estas resistencias "virtuales" no afectan a los pines configurados como salidas, sino que sirven de un complemento til a las entradas. Estas resistencias estn conectados a las entradas de los circuitos lgicos CMOS. De lo contrario, se comportaran como si fueran flotantes gracias a su alta resistencia de entrada.

Adems de los bits del registro WPUB, hay otro bit que afecta a la instalacin de las resistencias pull-up. Es el bit RBPU del registro OPTION_REG.

Al estar habilitado, cada bit del puerto PORTB configurado como una entrada puede causar una interrupcin al cambiar su estado lgico. Con el propsito de habilitar que los termi nales causen una interrupcin, el bit apropiado del registro IOCB debe estar a uno.

Gracias a estas caractersticas, los pines del puerto PORTB se utilizan con frecuencia para comprobar los botones de presin en el teclado ya que detectan cada apretn de botn infaliblemente. Por eso, no es necesario examinar todas las entradas una y otra vez.

Cuando los pines X,Y y Z se configuran como entradas de puesta a uno (1), slo se necesita esperar una peticin de interrupcin que aparece al apretar un botn. Ms tarde, se comprueba cul botn fue activado al combinar ceros y unos en las entradas. PIN RB0/INT

El pin RB0/INT es la nica fuente verdadera de la interrupcin externa. Se puede configurar de manera que reaccione al borde ascendente de seal (transicin de cero a uno) o al borde descendente de seal (transicin de uno a cero). El bit INTEDG del registro OPTION_REG selecciona la seal apropiada.
PINES RB6 Y RB7

El PIC16F887 no dispone de ningn pin especial para la programacin (el proceso de escribir un programa en la ROM). Los pines que generalmente estn disponibles como los pines de E/S de propsito general, se utilizan para este propsito. Para decir con ms precisin, son los pines del puerto PORTB utilizados para la transmisin

de seal de reloj (RB6) y de datos (RB7) al cargar el programa. Adems, es necesario suministrar el voltaje de alimentacin Vdd (5V) as como el voltaje apropiado Vpp (12-14V) para la programacin de memoria FLASH. Durante la programacin, el voltaje Vpp se aplica al pin MCLR. No se preocupe de los detalles relacionados a este proceso, tampoco se preocupe de cul voltaje se aplica primero puesto que los componentes del programador se encargan de eso. Lo que es muy importante es que el programa se puede cargar al microcontrolador an despus de haber sido soldado en el dispositivo destino. Por supuesto, el programa cargado se puede cambiar de la misma manera. Esta funcin se le denomina ICSP (In-Circuit Serial Programming - Programacin serial en circuito) Para utilizarlo correctamente es necesario planificar con antelacin. Es pan comido! Slo es necesario instalar un conector miniatura de 5 pines en el dispositivo destino para suministrar al microcontrolador un voltaje de programacin necesario. Para evitar la interferencia entre los voltajes y los componentes del dispositivo conectados a los pines del microcontrolador, todos los perifricos adicionales deben estar desconectados durante la programacin (utilizando las resistencias o los puentes).

Como hemos visto, los voltajes aplicados a los pines del zcalo del programador son los mismos que los utilizados durante la programacin ICSP.
Puerto PORTC y registro TRISC

El puerto PORTC es un puerto bidireccional, de 8 bits de anchura. Los bits del registro TRISC determinan la funcin de sus pines. Similar a otros puertos, un uno lgico (1) en el registro TRISC configura el pin apropiado del puerto PORTC como entrada.

Puerto PORTD y registro TRISD

El puerto PORTD es un puerto bidireccional de 8 bits de anchura. Los bits del registro TRISD determinan la funcin de sus pines. Similar a otros puertos, un uno lgico (1) en el registro TRISD configura el pin apropiado del puerto PORTD como entrada.

Puerto PORTE y registro TRISE

El puerto PORTE es un puerto bidireccional, de 4 bits de anchura. Los bits del registro TRISE determinan la funcin de sus pines. Similar a otros puertos, un uno lgico (1) en el registro TRISE configura el pin apropiado del puerto PORTE como entrada.

La excepcin es el pin RE3, que siempre est configurado como entrada. Similar a los puertos PORTA y PORTB, en este caso los tres pines se pueden configurar como entradas analgicas. Los bits del registro ANSEL determinan si estos pines sern configurados como entradas analgicas (AN) o entradas/salidas digitales:

RE0 = AN5 (determinado por el bit ANS5 del registro ANSEL); RE1 = AN6 (determinado por el bit ANS6 del registro ANSEL); y RE2 = AN7 (determinado por el bit ANS7 del registro ANSEL).
Registros ANSEL y ANSELH

Los registros ANSEL y ANSELH se utilizan para configurar el modo de entrada de un pin de E/S como analgico o como digital.

La regla es la siguiente: Para configurar un pin como una entrada analgica, el bit apropiado de los registros ANSEL o ANSELH se debe poner a uno (1). Para configurar un pin como una entrada/salida digital, el bit apropiado se debe poner a cero (0). El estado lgico de los bits del registro ANSEL no tiene influencia en las funciones de salidas digitales. Al intentar a leer un pin de puerto configurado como una entrada analgica, el resultado es siempre 0.

Es probable que usted nunca vaya a escribir un programa que no utilice puertos, as que el esfuerzo para aprender todo sobre ellos en definitiva vale la pena. De todos modos, los puertos son probablemente los mdulos ms simples dentro del microcontrolador. Se utilizan de la siguiente manera:

Al disear un dispositivo, seleccione un puerto por el que el microcontrolador comunicar al entorno perifrico. Si usted utiliza slo entradas/salidas digitales, seleccione cualquier puerto. Si utiliza alguna de las entradas analgicas, seleccione los puertos apropiados que soportan tal configuracin de los pines (AN0-AN13). Cada pin del puerto se puede configurar como salida o como entrada. Los bits de los registros TRISA,TRISB, TRISC, TRISD y TRISE determinan cmo se com portarn los pines apropiados de los puertos PORTA, PORTB, PORTC, PORTD y PORTE. Simplemente... Si utiliza alguna de las entradas analgicas, primero es necesario poner a uno los bits apropiados de los registros ANSEL y ANSELH en el principio de programa. Si utiliza resistencias o botones de presin como una fuente de seal de en trada, conctelos a los pines del puerto PORTB, ya que tienen las resistencias pull-up. El uso de estos registros est habilitado por el bit RBPU del registro OPTION_REG, mientras que la instalacin de las resistencias individuales est habilitada por los bits del registro WPUB. Con frecuencia se necesita responder tan pronto como los pines de entrada cambien su estado lgico. Sin embargo, no es necesario escribir un programa para comprobar el estado lgico de los pines. Es mucho ms simple conectar estas entradas a los pines del puerto PORTB y habilitar que ocurra una interrupcin con cada cambio de voltaje. Los bits de los registros IOCB e INTCON se encargan de eso.

El microcontrolador PIC16F887 dispone de tres temporizadores/contadores independientes, denominados Timer0, Timer1 y Timer2. En este captulo se presenta una descripcin detallada de los mismos.

TEMPORIZADOR TIMER0
El temporizador Timer0 tiene una amplia gama de aplicaciones en la prctica. Slo unos pocos programas no lo utilizan de alguna forma. Es muy conveniente y fcil de utilizar en programas o subrutinas para generar pulsos de duracin arbitraria, en medir tiempo o en contar los pulsos externos (eventos) casi sin limitaciones. El mdulo del temporizador Timer0 es un temporizador/contador de 8 bits con las siguientes caractersticas:

Temporizador/contador de 8 bits; Pre-escalador de 8 bits (lo comparte con el temporizador perro guardin); Fuente de reloj interna o externa programable; Generacin de interrupcin por desbordamiento; y Seleccin del flanco de reloj externo programable.

La siguiente figura muestra el esquema del temporizador Timer0 con todos los bits que determinan su funcionamiento. Estos bits se almacenan en el registro OPTION_REG.

Registro OPTION_REG

RBPU - PORTB Pull-up enable bit (resistencia Pull Up del puerto PORTB) o 0 - Resistencias pull-up del puerto PORTB estn deshabilitadas. o 1 - Pines del puerto PORTB pueden estar conectados a las resistencias pull-up. INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la interrupcin externa) o 0 - Interrupcin por flanco ascendente en el pin INT (0-1). o 1 - Interrupcin por flanco descendente en el pin INT (1-0). T0CS - TMR0 Clock Select bit (bit selector de tipo de reloj para el Timer0) o 0 - Los pulsos se llevan a la entrada del temporizador/contador Timer0 por el pin RA4. o 1 - El temporizador utiliza los pulsos de reloj internos (Fosc/4). T0SE - TMR0 Source Edge Select bit (bit selector de tipo de flanco) o 0 - Incrementa en flanco descendente en el pin TMR0. o 1 - Incrementa en flanco ascendente en el pin TMR0. PSA - Prescaler Assignment bit (bit de asignacin del pre-escalador) o 0 - Pre-escalador se le asigna al WDT. o 1 - Pre-escalador se le asigna al temporizador/contador Timer0.

PS2, PS1, PS0 - Prescaler Rate Select bit (bit selector del valor del divisor de frecuencias) o El valor del divisor de frecuencias se ajusta al combinar estos bits. Como se muestra en la tabla a la derecha, la misma combinacin de bits proporciona los diferentes valores del divisor de frecuencias para el temporizador/contador y el temporizador perro guardin, respectivamente.

Cuando el bit PSA est a 0, el pre-escalador se le asigna al temporizador/contador Timer0, como se muestra en la siguiente figura.

Cuando el bit PSA est a 1, el pre-escalador se le asigna al temporizador perro guardin como se muestra en la siguiente figura.

Aparte de lo dicho anteriormente, cabe destacar lo siguiente:


Al asignarle el pre-escalador al temporizador/contador, el pre-escalador se pondr a 0 con cualquier escritura en el registro TMR0. Al asignar el pre-escalador al temporizador perro guardin, tanto el WDT como el preescalador se pondrn a 0 con la instruccin CLRWDT. Al escribir en el registro TMR0, utilizado como un temporizador, no se inicia el conteo de los pulsos inmediatamente, sino con retraso de dos ciclos de instrucciones. Por consiguiente, es necesario ajustar el valor escrito en el registro TMR0. Al poner el microcontrolador en el modo de reposo se apaga el oscilador de reloj. No puede ocurrir el desbordamiento ya que no hay pulsos a contar. Es la razn por la que la interrupcin por el desbordamiento del TMR0 no puededespertar al procesador del modo de reposo. Si se utiliza como un contador de reloj externo sin pre-escalador, la longitud de pulso mnima o tiempo muerto entre dos pulsos deber ser 2 Tosc + 20 nS (Tosc es el perodo de seal de reloj del oscilador). Si se utiliza como un contador de reloj externo con pre-escalador, la longitud de pulso mnima o tiempo muerto entre dos pulsos es slo 10nS. El registro del pre-escalador de 8 bits no est disponible al usuario, lo que significa que no es posible leerlo o escribir en l directamente.

Para utilizar el Timer0 apropiadamente, es necesario: Paso 1: Seleccionar el modo:


El modo de temporizador se selecciona por el bit TOSC del registro OPTION_REG (TOSC: 0=temporizador, 1=contador). Cuando se asigna el pre-escalador al temporizador/contador se debe poner a cero el bit PSA del registro OPTION_REG. El valor del divisor de frecuencias se configura al utilizar los bits PS2-PS0 del mismo registro. Al utilizar una interrupcin, los bits GIE y TMR0IE del registro INTCON deben estar a uno.

Paso 2: Medir y contar Para medir tiempo:

Reiniciar el registro TMR0 o escribir un valor conocido en l. El tiempo transcurrido(en microsegundos al utilizar el oscilador de 4MHz) se mide al leer el registro TMR0. El bit de bandera TMR0IF del registro INTCON se pone a uno automticamente siempre que ocurra el desbordamiento del registro TMR0. Si est habilitada, ocurre una interrupcin.

Para contar pulsos:


La polaridad de pulsos a contar en el pin RA4 se selecciona por el bit TOSE del registro OPTION_REG (T0SE: 0=pulsos positivos, 1=pulsos negativos). Varios pulsos se pueden leer del registro TMR0. El pre-escalador y la interrupcin se utilizan de la misma forma que en el modo de temporizador.