You are on page 1of 26

Microcontroladores Parte I. Ing.

Victor Manuel Mondragon Maca

MICRONTROLADORES El PIC16F84 es un microcontrolador con memoria de programa tipo FLASH, lo que representa gran facilidad en el desarrollo de prototipos y en su aprendizaje ya que no se requiere borrarlo con luz ultravioleta como las versiones EPROM sino, permite reprogramarlo nuevamente sin ser borrado con anterioridad. Por esta razn, la usaremos en la mayora de aplicaciones que se desarrollan a lo largo del curso.

Pines y funciones

Figura 1.1. Diagrama de pines del PIC16F84


El PIC16F84 es un microcontrolador de Microchip Technology fabricado en tecnologa CMOS, su consumo de potencia es muy bajo y adems es completamente esttico, esto quiere decir que el reloj puede detenerse y los datos de la memoria no se pierden. El encapsulado ms comn para el microcontrolador es el DIP (Dual In-line Pin) de 18 pines, propio para usarlo en experimentacin. La referencia completa es 16F84-04/P, para el dispositivo que utiliza reloj de 4 MHz. Sin embargo, hay otros tipos de encapsulado que se pueden utilizar segn el diseo y la aplicacin que se quiere realizar. Por ejemplo, el encapsulado tipo surface mount (montaje superficial) tiene un reducido tamao y bajo costo, que lo hace propio para producciones en serie o para utilizarlo en lugares de espacio muy reducido, la figura 1.2 muestra los tipos de empaque que puede tener el integrado

Figura 1.2. Tipos de encapsulado

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Puertos del microcontrolador Los puertos son el puente entre el microcontrolador y el mundo exterior. Son lneas digitales que trabajan entre cero y cinco voltios y se pueden configurar como entradas o como salidas El PIC16F84 tiene dos puertos: El puerto A con 5 lneas y el puerto B con 8 lneas, figura 1.3. Cada PIN se puede configurar como entrada o como salida independiente programando un par de registros diseados para tal fin. En ese registro un "0" configura el PIN del puerto correspondiente como salida y un "1" lo configura como entrada.

Puerto A

Puerto B

Figura 1.3. Puertos del PIC16F84 El puerto B tiene internamente unas resistencias de pull-up conectadas a sus pines (sirven para fijar el PIN a un nivel de cinco voltios), su uso puede ser habilitado o deshabilitado bajo control del programa. Todas las resistencias de pull-up se conectan o se desconectan a la vez, usando el bit llamado RBPU que se encuentra en el registro (posicin de memoria RAM) llamado OPTION. La resistencia de pull-up es desconectada automticamente en un PIN si este se programa como salida. El PIN RBO/INT se puede configurar por software para que funcione como interrupcin externa, para configurarlo se utilizan unos bits de los registros INT/CON y OPTION. El PIN RA4/TCOCKI del puerto A puede ser configurado como un PIN de entrada/salida o como entrada del temporizador/contador. Cuando este PIN se programa como entrada digital, funciona como un disparador de Schmitt (Schmitt trigger), puede reconocer seales un poco distorsionadas y llevarlas a niveles lgicos (cero y cinco voltios). Cuando se usa como salida digital se comporta como colector abierto, por lo tanto, se debe poner una resistencia de pull-up (resistencia externa conectada a un nivel de cinco voltios). Como salida, la lgica es inversa: un "0" escrito al PIN del puerto entrega en el PIN un "1" lgico. Adems, como salida no puede manejar cargas como fuente, slo en el modo sumidero.
Como este dispositivo es de tecnologa CMOS, todos los pines deben estar conectados a alguna fuente, se recomienda no dejarlos al aire por preservar la integridad del CHIP. Los pines que no se estn usando se deben conectar a la fuente de alimentacin de +5V (Como Entrada), como se muestra en la figura 1.4.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

+5 Voltios

U1
16 15 4 OSC1/CLKIN OSC2/CLKOUT MCLR RA0 RA1 RA2 RA3 RA4/T 0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 PIC16F84A 17 18 1 2 3 6 7 8 9 10 11 12 13

R1
9k1

R2
9k1

Figura 1.4. Los puertos no utilizados se deben conectar a la fuente


La mxima capacidad de corriente de cada uno de los pines de los puertos en modo sumidero (sink) es de 25 mA y en modo fuente (source) es de 20 mA, figura 1.5. La mxima capacidad de corriente total de los puertos es: PUERTO A PUERTO B Modo sumidero 50 mA 150 mA Modo fuente 50 mA 100 mA El consumo de corriente del microcontrolador para su funcionamiento depende del voltaje de operacin, la frecuencia y de las cargas que tengan sus pines. Para un reloj de 4 MHz el consumo es de aproximadamente 2 mA; aunque este se puede reducir a 40 microamperios cuando se est en el modo sleep (en este modo el micro se detiene y disminuye el consumo de potencia). Se sale de ese estado cuando se produce alguna condicin especial que veremos ms adelante.

Figura 1.5. Capacidad de corriente del PIC16F84

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

El oscilador externo Todo microcontrolador requiere un circuito externo que le indique la velocidad a la que debe trabajar. Este circuito, que se conoce como oscilador o reloj, es muy simple pero de vital importancia para el buen funcionamiento del sistema. El PIC16FS4 puede utilizar cuatro tipos de oscilador diferentes. Estos tipos son:

RC. Oscilador con resistencia y condensador. XT. Cristal. HS. Cristal de alta velocidad. LP. Cristal para baja frecuencia y bajo consumo de potencia.

En el momento de programar o "quemar" el microcontrolador se debe especificar que tipo de oscilador se usa. Esto se hace a travs de unos fusibles llamados "fusibles de configuracin".El tipo de oscilador que se sugiere para las prcticas es el cristal de 4 MHz, porque garantiza mayor precisin y un buen arranque del microcontrolador. Internamente esta frecuencia es dividida por cuatro, lo que hace que la frecuencia efectiva de trabajo sea de 1 MHz, por lo que cada instruccin se ejecuta en un microsegundo. El cristal debe ir acompaado de dos condensadores y se conecta como se muestra en la figura 1.6.

Figura 1.6. Conexin de un oscilador a cristal Dependiendo de la aplicacin, se pueden utilizar cristales de otras frecuencias; por ejemplo se usa el cristal de 3.579545 MHz porque es muy econmico, el de 32.768 KHz cuando se necesita crear bases de tiempo de un segundo muy precisas. El lmite de velocidad en estos microcontroladores es de 10 MHz. Si no se requiere mucha precisin en el oscilador y se quiere economizar dinero, se puede utilizar una resistencia y un condensador, como se muestra en la figura 1.7.
+5 Voltios
R U1
16 15 4 OSC1/CLKIN OSC2/CLKOUT MCLR RA0 RA1 RA2 RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 PIC16F84A 17 18 1 2 3 6 7 8 9 10 11 12 13

Figura 1.7. Conexin de un oscilador R C

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Reset En los microcontroladores se requiere un PIN de reset para reiniciar el funcionamiento del sistema cuando sea necesario, ya sea por una falla que se presente o porque as se halla diseado el sistema. El PIN de reset en los PIC es llamado MCLR (master clear). El PIC16F84 admite diferentes tipos de reset:

Al encendido (Power On Reset) Pulso en el PIN MCLR durante operacin normal Pulso en el pin MCLR durante el modo de bajo consumo (modo sleep) El rebase del conteo del circuito de vigilancia (watchdog) durante operacin normal El rebase del conteo del circuito de vigilancia (watchdog) durante el modo de bajo consumo (sleep)

El reset al encendido se consigue gracias a dos temporizadores. El primero de ellos es el OST (Oscillator Start-Up Timer: Temporizador de encendido del oscilador), orientado a mantener el microcontrolador en reset hasta que el oscilador del cristal es estable. El segundo es el PWRT (Power-Up Timer: Temporizador de encendido), que provee un retardo fijo de 72 ms (nominal) en el encendido nicamente, diseado para mantener el dispositivo en reset mientras la fuente se estabiliza. Para utilizar estos temporizadores, slo basta con conectar el pin MCLR a la fuente de alimentacin, evitndose utilizar las tradicionales redes RC externas en el pin de reset. El reset por MCLR se consigue llevando momentneamente este PIN a un estado lgico bajo, mientras que el watchdog WDT produce el reset cuando su temporizador rebasa la cuenta, o sea que pasa de 0FFh a 00h. Cuando se quiere tener control sobre el reset del sistema se puede conectar un botn como se muestra en la figura 1.8.

Figura 1.8. Conexin del botn de reset

Arquitectura
Este trmino se refiere a los bloques funcionales internos que conforman el microcontrolador y la forma en que estn conectados, por ejemplo la memoria FLASH (de programa), la memoria RAM (de datos), los puertos, la lgica de control que permite que todo el conjunto funcione, etc. La figura 1.9 muestra la arquitectura general-del PIC16F84, en ella se pueden apreciar los diferentes bloques que lo componen y la forma en que se conectan. Se muestra la conexin de los puertos, las memorias de datos y de programa, los bloques especiales como el watchdog, los temporizadores de arranque, el oscilador, etc.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Todos los elementos se conectan entre s por medio de buses. Un bus es un conjunto de lneas que transportan informacin entre dos o ms mdulos. Vale la pena destacar que el PIC 16F84 tiene un bloque especial de memoria de datos de 64 bytes del tipo EEPROM, adems de los dos bloques de memoria principales que son el de programa y el de datos o registros

Figura 1.9. Arquitectura interna del PIC16F84

El PIC 16F84 se basa en la arquitectura Harvard, en la cual el programa y los datos se pueden trabajar desde memorias separadas, lo que posibilita que las instrucciones y los datos posean longitudes diferentes. Esta misma estructura es la que permite la superposicin de los ciclos de bsqueda y ejecucin de las instrucciones, lo cual se ve reflejado en una mayor velocidad del microcontrolador.

Memoria de programa
Es una memoria de 1 Kbyte de longitud con palabras de 14 bits. Como es del tipo FLASH se puede programar y borrar elctricamente, lo que facilita el desarrollo de los programas y la experimentacin. En ella se graba, o almacena, el programa o cdigos que el microcontrolador debe ejecutar. Dado que el PIC16F84 tiene un contador de programa de 13 bits, tiene una capacidad de direccionamiento de 8K x 14, pero solamente tiene implementado el primer 1K x 14 (0000h hasta 03FFh). Si se direccional posiciones de memoria superiores a 3FFh se causar un solapamiento con el espacio del primer 1 K. En la figura 1.10 se muestra el mapa de la

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

memoria de programa. Vector de reset. Cuando ocurre un reset al microcontrolador, el contador de programa se pone en ceros (000H). Por esta razn, en la primera direccin del programa se debe escribir todo lo relacionado con la iniciacin del mismo.

Figura 1.10. Mapa de la memoria de programa


Vector de interrupcin. Cuando el microcontrolador recibe una seal de interrupcin, el contador de programa apunta a la direccin 04H de la memoria de programa, por eso, ll se debe escribir toda la programacin necesaria para atender dicha interrupcin:

Registros (Memoria RAM) El PIC16F84 puede direccionar 128 posiciones de memoria RAM, pero solo tiene implementados fsicamente los primeros 80 (0-4F en hexadecimal). De estos los primeros 12 son registros que cumplen un propsito especial en el control del microcontrolador y los 68 siguientes son registros de uso general que se pueden usar para guardar losdatos temporales de la tarea que se est ejecutando figura 1.11.
Los registros estn organizados como dos arreglos (pginas) de 128 posiciones de 8 bits cada una (128 x 8); todas las posiciones se pueden accesar directa o indirectamente (esta ltima a travs del registro selector FSR). Para seleccionar que pagina de registros se trabaja en un momento determinado se utiliza el bitRPO del registro STATUS. A continuacin haremos una descripcin de los registros; 00h o INDO: Registro para direccionamiento indirecto de datos. Este no es un registro disponible fsicamente; utiliza el contenido del FSR y el bit RPO del registro STATUS para seleccionar indirectamente la memoria de datos o RAM del usuario; la instruccin determinar que se debe realizar con el registro sealado.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

01h o TMRO. Temporizador/contador de 8 bits. Este se puede incrementar con una seal externa aplicada al pin RA4/TOCKI o de acuerdo a una seal interna proveniente del reloj de instrucciones del microcontrolador. La rata de incremento del registro se puede determinar por medio de un preescalador, localizado en el registro OPTION. Como una mejora con respecto a sus antecesores, se le ha agregado la generacin de interrupcin cuando se rebasa la cuenta (el paso de 0FFh a 00h).

Figura 1.12. Contador de programa (13 bits)


02h o PCL: Contador de programa. Se utiliza para direccionar las palabras de 14 bits del programa del usuario que se encuentra almacenado en la memoria ROM; este contador de programas es de 13 bits de ancho, figura 1.12. Sobre el byte bajo, se puede escribir o leer directamente, mientras que sobre el byte alto, no. El byte alto se maneja mediante el registro PCLATH (0Ah). A diferencia de los PIC de primera generacin, el 16F84 ante una condicin de reset inicia el contador de programa con todos sus bits en "cero". Durante la ejecucin normal del programa, y dado que todas las instrucciones ocupan slo una posicin de memoria, el contador se incrementa en uno con cada instruccin, a menos que se trate de alguna instruccin de salto.

Figura 1.12. Contador de programa (13 bits)

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

En una instruccin CALL o GOTO, los bits PC<10:0> se cargan desde el cdigo de operacin de la instruccin, mientras que los bits PC<11:12> lo hacen desde-el PCLATH<4:3>. Como solamente el primer lK de memoria est implementado, el cdigo de operacin de la instruccin puede contener la direccin destino, eso quiere decir que se pueden hacer saltos y llamados a subrutinas sin necesidad de tener en cuenta la paginacin de memoria de programa. En otras instrucciones donde PCL es el destino, PC<12:8> se carga directamente desde el PCLATH<4:0>, por ejemplo en el caso de la instruccin ADDWF. Esto se debe tener en cuenta cuando se desea hacer lectura de tablas usando el comando: ADDWF PC, l , en este caso se debe tener en cuenta que la tabla debe estar comprendida dentro de un solo bloque de 256 bytes (0-255, 256-511, etc.). 03h o STATUS: Registro de estados. Contiene el estado aritmtico de la ALU, la causa del reset y los bits de preseleccin de pgina para la memoria de datos. La figura 1.13 muestra los bits correspondientes a este registro. Los bits 5 Y 6 (RPO Y RP 1) son los bits de seleccin de pgina para el direccionamiento directo de la memoria de datos; solamente RP0 se usa en los PIC16F84. RPl se puede utilizar como un bit de propsito general de lectura/escritura. Los bits TO Y PD no se pueden modificar por un proceso de escritura; ellos muestran la condicin por la cual se ocasion el ltimo reset.

Figura 1.13 Registro de Estados.

04h O FSR: Registro selector de registros. En asocio con el registro INDO, se utiliza para seleccionar indirectamente los otros registros disponibles. Mientras que los antecesores del PIC16F84 slo posean 5 bits activos, en este microcontrolador se poseen los 8 bits. Si en el

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

programa no se utilizan llamadas indirectas, este registro se puede utilizar como un registro de propsito general. Para entender mejor el funcionamiento de este registro veamos un programa simple que borra el contenido de la memoria RAM, empleando direccionamiento indirecto. MOVLW 20 ;inicializa el puntero en la memoria RAM MOVWF FSR ;que se va a borrar NEXT CLRF INDO ;borra el registro indexado (es decir el que est ;siendo direccionado por el FSR) INCF FSR,R ;incrementa el puntero BTFSS FSR,5 ;pregunta si ya acab el banco de memoria GOTO NEXT ;sigue borrando los registros que faltan

..
05h o PORTA: Puerto de Entrada/Salida de 5 bits. Este puerto, al igual que todos sus similares en los PIC, puede leerse o escribirse como si se tratara de un registro cualquiera. El registro que controla el sentido (entrada o salida) de los pines de este puerto est localizado en la pgina 1, en la posicin 85h y se llama TRISA. 06h o PORTB: Puerto de entrada/salida de 8 bits. Al igual que en todos los PIC, este puede leerse o escribirse como si se tratara de un registro cualquiera; algunos de sus pines tienen funciones alternas en la generacin de interrupciones. El registro de control para la configuracin de la funcin de sus pines se localiza en la pgina 1, en la direccin 86h y se llama TRISB. 08h o EEDATA: Registro de datos de la EEPROM. Este registro contiene el dato que se va a escribir en la memoria EEPROM de datos o el que se ley de sta. 09h o EEADR: Registro de direccin de la EEPROM. Aqu se mantiene la direccin de la EEPROM de datos que se va a trabajar, bien sea para una operacin de lectura o para una de escritura. 0Ah o PCLATH: Registro para la parte alta de la direccin. Este contiene la parte alta del contador de programa y no se puede acceder directamente. 0Bh o INTCON: Registro para el control de interrupciones. Es el encargado del manejo de las interrupciones y contiene los bits que se muestran en la figura 1.14. 81h u OPTION: Registro de configuracin mltiple. Posee varios bits para configurar el preescalador, la interrupcin externa, el timer y las caractersticas del puerto B. Los bits que contiene y las funciones que realiza este registro se muestran en la figura 1.15. El preescalador es compartido entre el MTRO y el WDT; su asignacin es mutuamente excluyente ya que solamente puede uno de ellos ser preescalado a la vez. 85h o TRISA: Registro de configuracin del puerto A. Como ya se mencion, es el registro de control para el puerto A. Un "cero" en el bit correspondiente al PIN lo configura como salida, mientras que un "uno" lo hace como entrada. 86h o TRISB: Registro de configuracin del puerto B. Orientado hacia el control del puerto B. Son vlidas las mismas consideraciones del registro anterior.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Figura 1.14. Registro INTCON

88h o EECONl: Registro para el control de la memoria EEPROM de datos. Este es el registro de control de la memoria de datos y slo destina cinco bits para ello, los ms bajos; los tres bits superiores permanecen sin implementar. En la figura 1.16 se muestran las funciones de estos bits. 89h o EECON2: Registro auxiliar para control de la memoria EEPROM de datos. Registro que no est implementado fsicamente en el microcontrolador, pero que es necesario en las operaciones de escritura en la EEPROM de datos; ante cualquier intento de lectura se obtendrn "ceros". OCh a 4Fh: Registros de propsito general. Estas 68 posiciones estn implementadas en la memoria RAM esttica, la cual conforma el rea de trabajo del usuario; a ellas tambin se accede cuando en la pgina 1 se direccionan las posiciones 8Ch a CFh. Esto se ha diseado as para evitar un excesivo cambio de pginas en el manejo de la RAM del usuario,

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

agilizando los procesos que se estn llevando a cabo y de-compilando la labor del programador.

Figura 1.15. Registro OPTION Registro de trabajo W. Este es el registro de trabajo principal, se comporta de manera similar al acumulador en los microprocesadores. Este registro participa en la mayora de las instrucciones.

Pila (Stack) Estos registros no forman parte de ningn banco de memoria y no permiten el acceso por parte del usuario. Se usan para guardar el valor del contador de programa cuando se hace un llamado a una subrutina o cuando se atiende una interrupcin; luego, cuando el micro regresa a seguir ejecutando su tarea normal, el contador de programa recupera su valor leyndolo nuevamente desde la pila. El PIC 16F84 tiene una pila de 8 niveles, esto significa que se pueden anidar 8 llamados a subrutina sin tener problemas.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Figura 1.16. Registro EECON 1

Caractersticas especiales
Algunos elementos que forman parte de los PIC no se encuentran en microcontroladores de otros fabricantes, o simplemente representan alguna ventaja o facilidad a la hora de hacer un diseo. Veamos una breve descripcin de las ms significativas:
Circuito de vigilancia (Watchdog Timer)

Su funcin es restablecer el programa cuando ste se ha perdido por fallas en la programacin o por alguna razn externa. Es muy til cuando se trabaja en ambientes con mucha interferencia o ruido electromagntico. Est conformado por un oscilador RC que se encuentra dentro del microcontrolador. Este oscilador corre de manera independiente al oscilador principal. Cuando se habilita su

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

funcionamiento, dicho circuito hace que el microcontrolador sufra un reset cada determinado tiempo (que se puede programar entre 18 ms y 2 segundos). Este reset lo puede evitar el usuario mediante una instruccin especial del microcontrolador (CLRWDT: borrar el conteo del watchdog), la cual se debe ejecutar antes de que termine el perodo nominal de dicho temporizador. De esta manera, si el programa se ha salido de su flujo normal, por algn ruido o interferencia externa, el sistema se reiniciar (cuando se acabe el tiempo programado y no se haya borrado el contador) y el programa puede restablecerse para continuar con su funcionamiento normal. En las primeras prcticas no se utiliza el circuito de vigilancia para facilitar el trabajo; por eso, en el momento de programar el microcontrolador se debe seleccionar en los fusibles de configuracin "watchdog timer OFF'. Ms adelante veremos algunos ejemplos que ilustran su funcionamiento y la manera de utilizarlo. Temporizador de encendido (Power-up Timel1 Este proporciona un reset al microcontrolador en el momento de conectar la fuente de alimentacin, lo que garantiza un arranque correcto del sistema. En el momento de grabar el micro se debe habilitar el fusible de configuracin "Power-up Timer", para ello se debe seleccionar la opcin "ON". Su tiempo de retardo es de 72 milisegundos. Modo de bajo consumo (sleep) Esta caracterstica permite que el microcontrolador entre en un estado pasivo donde consume muy poca potencia. Cuando se entra en este modo el oscilador principal se detiene, pero el temporizador del circuito de vigilancia (watchdog) se reinicia y empieza su conteo nuevamente. Se entra en ese estado por la ejecucin de una instruccin especial (llamada SLEEP) y se sale de l por alguna de las siguientes causas: cuando el microcontrolador sufre un reset por un pulso en el pin MCLR, porque el watchdog hace que se reinicie el sistema o porque ocurre una interrupcin al sistema. Interrupciones Este microcontrolador incluye el manejo de interrupciones, lo cual representa grandes ventajas. El PIC16F84 posee cuatro fuentes de interrupcin a saber: Interrupcin externa en el pin RBOIINT Finalizacin del temporizador/contador TMRO Finalizacin de escritura en la EEPROM de datos Cambio de nivel en los pines RB4 a RB7 El registro OBh o INTCON contiene las banderas de las interrupciones INT, cambio en el puerto B y finalizacin del conteo del TMRO, al igual que el control para habilitar o deshabilitar cada una de las fuentes de interrupcin, incluida la de escritura en memoria EEPROM. Slo la bandera de finalizacin de la escritura reside en el registro 88h (EECONl<4>). Si el bit GIE (Global Interrupt Enable) se coloca en O, deshabilita todas las interrupciones. Cuando una interrupcin es atendida, el bit GIE se coloca en O automticamente para evitar interferencias con otras interrupciones que se pudieran presentar, la direccin de retomo se coloca en la pila y el PC se carga con la direccin 04h. Una vez en la rutina de servicio, la fuente de la interrupcin se puede determinar examinando las banderas de interrupcin. La bandera respectiva se debe colocar, por software, en cero antes de regresar de la interrupcin,

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

para evitar que se vuelva a detectar nuevamente la misma interrupcin. La instruccin RETFIE permite al usuario retornar de la interrupcin, a la vez que habilita de nuevo las interrupciones, al colocar el bit GIE en uno. Debe tenerse presente que solamente el contador de programa es puesto en la pila al atenderse la interrupcin; por lo tanto, es conveniente que el programador tenga cuidado con el registro de estados y el de trabajo, ya que se pueden producir resultados inesperados si dentro de ella se modifican. Interrupcin externa. Acta sobre el pin RBO/INT y se puede configurar para activarse con el flanco de subida o el de bajada, de acuerdo al bit INTEDG (OPTION<6>). Cuando se presenta un flanco vlido en el pin INT, la bandera INTF (INTCON<l se coloca en uno. La interrupcin se puede deshabilitar colocando el bit de control INTE (INTCON<4>) en cero. Cuando se atiende la interrupcin, a travs de la rutina de servicio, INTF se debe colocar en cero antes de regresar al programa principal. La interrupcin puede reactivar al microcontrolador despus de la instruccin SLEEP, si previamente el bit INTE fue habilitado. Interrupcin por finalizacin de la temporizacin. La superacin del conteo mximo (OFFh) en el TMRO colocar el bit TOIF en uno (INTCON<2>) El bit de control respectivo es TOlE (INTCON<5>) Interrupcin por cambio en el puerto RB. Un cambio en los pines del puerto B <7:4> colocar en uno el bit RBIF (INTCON<O>) El bit de control respectivo es RBIE (INTCON<3>) Interrupcin por finalizacin de la escritura. Cuando la escritura de un dato en la EEPROM finaliza, se coloca en 1 el bit EEIF (EECON1<4>) El bit de control respectivo es EEIE (INTCON<6>) Memoria de datos EEPROM El PIC16FS4 tiene una memoria EEPROM de datos de 64 posiciones (0h a 3Fh), de S bits cada una. Este bloque de memoria no se encuentra mapeado en ningn banco, el acceso a esas posiciones se consigue a travs de dos registros de la RAM: - el registro EEADR (posicin 09), que debe contener la direccin de la posicin de la EEPROM a ser accesada - el registro EEDATA (posicin OS), que contiene el dato de S bits que se va a escribir o el que se obtuvo de la ltima lectura. Adicionalmente, existen dos registros de control: el EECON1 (SSh), que posee cinco bits que manejan las operaciones de lectura/escritura y el EECON2 (S9h), que aunque no es un registro fsico, es necesario para realizar las operaciones de escritura. La lectura toma un ciclo del reloj de instrucciones, mientras que la escritura, por ser controlada por un temporizador incorporado, tiene un tiempo nominal de 10 milisegundos, este tiempo puede variar con la temperatura y el voltaje. Cuando se va a realizar una operacin de escritura, automticamente se hace primero la operacin de borrado. El nmero tpico de ciclos de borrado/escritura de la EEPROM de datos es de 1.000.000. Fusibles de configuracin El PIC16F84 posee cinco fusibles, cada uno de los cuales es un bit. Estos fusibles se pueden

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

programar para seleccionar varias configuraciones del dispositivo: tipo de oscilador, proteccin de cdigo, habilitacin del circuito de vigilancia y el temporizador al encendido. Los bits se localizan en la posicin de memoria 2007h, posicin a la cual el usuario slo tiene acceso durante la programacin del microcontrolador. Cuando se programa la proteccin de cdigo, el contenido de cada posicin de la memoria no se puede leer completamente, de tal manera que el cdigo del programa no se puede reconstruir. Adicionalmente, todas las posiciones de memoria del programa se protegen contra la reprogramacin. Una vez protegido el cdigo, el fusible de proteccin slo puede ser borrado (puesto al) si se borra toda la memoria del programa y la de datos.

Las pull-ups internas


Cada uno de los pines del puerto B tiene un dbil elemento pull-up interno (250 JlA tpico); este elemento es automticamente desconectado cuando el pin se configura como salida. Adicionalmente, el bit RBPU (OPTION<7 controla todos estos elementos, los cuales estn deshabilitados ante una condicin de reset. Estos elementos pull-up son especialmente tiles cuando el microcontrolador va a colocarse en el modo de bajo consumo, ya que ayudan a no tener las entradas flotantes, significando una reduccin en el consumo de corriente.

El conjunto de instrucciones
Estas se clasifican en orientadas a registros, orientadas al bit Y operaciones literales y de control. Cada instruccin es una palabra de 14 bits, dividida en un cdigo de operacin (el cual especifica la orden a ejecutar) y uno o ms operandos sobre los que se acta. En el apndice A se encuentra la lista completa de instrucciones, la cual incluye ejemplos y explicaciones. Como se puede observar all, en total son 35, las cuales tardan un ciclo de mquina, a excepcin de los saltos, que toman dos ciclos.

EL PIC16C84
El PIC 16C84 es un microcontrolador de la familia Microchip, totalmente compatible con el PIC 16F84. Su principal caracterstica es que posee memoria "EEPROM" en lugar de memoria Flash, pero su manejo es igual. Con respecto al PICI6F84, este microcontrolador presenta dos diferencias: La memoria de datos tiene menor tamao, aqu se tienen 32 registros de propsito general (el mapa de memoria de datos llega hasta 2FH). En el momento de programar el microcontrolador, el fusible de seleccin del temporizador de arranque (Power Up Timen trabaja de forma inversa, es decir, si en el PIC16F84 se selecciona la opcin "Low" para activarlo, en el PIC 16C84 se debe seleccionar "High". Este microcontrolador ha sido reemplazado de forma gradual por el PICI6F84, por lo tanto, los diseos que lo utilicen como elemento de control deben ser actualizados. Aunque, como se ve, es un proceso casi transparente.

Compatibilidad con otras familias


Quienes estn familiarizados con los PIC16C5X encontrarn bsicamente las siguientes modificaciones:

La longitud de las instrucciones se increment a 14 bits.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Se puede omitir la paginacin de la memoria de programa. La paginacin de la memoria de datos se ha redefinido ligeramente, de tal manera que se elimina la necesidad de los bits PA2, PA1 Y PAO en el registro de estados. Se cuenta con cuatro nuevas instrucciones: RETURN, RETFIE, ADDLW y SUBLW. La manera en que se configuraban los puertos (con la instruccin TRIS) y se asignaba el preescalador (con la instruccin OPTION) ha sido modificada, de tal forma que los registros OPTION y TRIS ahora son direccionables; an as, se conservan dichas instrucciones para mantener la compatibilidad con los PIC 16C5X. Se agregaron capacidades de interrupcin. El vector de interrupcin es 0004h. El tamao de la pila se increment a 8 niveles. El vector de reset se modific a 0000h. Reactivacin despus de la instruccin SLEEP a travs de interrupciones. El pin de entrada RTCC es ahora un pin del puerto A, llamado RA4/TOCK1 El ancho del registro FSR se aument a 8 bits. La posicin 07 no est implementada. Programacin serial del microcontrolador

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

PROYECTOS PRCTICAS
Ejercicio 1: Encender y apagar un LED
Este es el ejercicio bsico por excelencia y ayuda a todas las personas a perder el miedo al manejo del microcontrolador. Si se observa el diagrama del entrenador, los ocho pines del puerto B han sido dispuestos como salidas con el objeto de controlar LED's, necesitando slo una resistencia en serie con ste para limitar la corriente. El integrado ULN2803 se encarga de aislar el circuito y de entregar una buena cantidad de corriente, suficiente para proporcionar iluminacin adecuada al LED. Para encender el primer LED, tiene que colocarse un estado lgico alto en el PIN 6 del microcontrolador, mientras que un estado bajo har que ste se apague; esto se debe al transistor interno del ULN2803 que invierte la seal. La funcin del microcontrolador ser entonces sencilla: alternar estados lgicos altos y bajos en su pin R BO con un retardo tal, que nos permita visualizar el efecto. Para una mejor comprensin del proceso se muestra en la figura 1 el diagrama de flujo respectivo, el mismo que nos sirve para la realizacin del programa.

Figura 1. Diagrama de flujo del primer ejercicio

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Figura 2 - Cdigo Practica 1 ;============ =================================== ; Este programa enciende y apaga un LED repetidamente. list p=16F84A ;---------------------------------------------------------------------ptob equ 06 ;el puerto b esta en la direccin 06 de la memoria RAM reg1 equ 0b ;Se asignan nombres a algunos registros de propsito general reg2 equ 0c reg3 equ 0d valor1 equ 10 ;Se asignan nombres a algunas constantes valor2 equ 20 valor3 equ 30 ;----------------------------------------------------------------------reset org 0 ;el vector de reset es la direccin 00 goto inicio ;se salta al inicio del programa org 7 ;el programa empieza e la direccin de memoria 7 inicio movlw 00 ;se carga el registro W con 0 tris ptob ;se programan los pines del puerto b como salidas otra movlw 01 ;se carga el registro W con el valor 01 movwfptob ;se pasa el valor 01 al puerto b para encender el LED ;que esta conectado al pin RB0 call retardo ;se mantiene el LED encendido por un momento movlw 00 ;se carga el registro W con 00 movwfptob ;se carga el registro puerto b con 00 para apagar el LED call retardo ;se mantiene apagado por un momento goto otra ; se continua el programa nuevamente en otra, es decir que ;se vuelve a encender y apagar el LED repetidas veces retardo movlw decir tres dos uno valor1 ;se carga el registro W con el numero valor1, es

;con el numero 30 que se asigno al principio a valor1 movwfreg1 ;se traslada ese numero al registro reg1 movlw valor2 ;se carga W con el numero valor2 (40) movwfreg2 ;se traslada ese numero al registro reg2 movlw valor3 ;se carga W con valor3 movwfreg3 ;se carga reg3 con 50 decfszreg3 ;se decrementa el registro reg3 y si el valor es cero goto uno ;se salta a la siguiente instruccin, sino, se continua ;decrementandolo decfszreg2 ;igual que el anterior goto dos decfszreg1 ;igual al anterior goto tres retlw 00 ;termina la subrutina retardo y vuelve al programa principal

end

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

En este primer programa podemos observar una serie de lneas de cabecera (1), antes de la etiqueta de inicio. Ellas son herramientas del lenguaje ensamblador para proporcionar nombres lgicos, fcilmente memorizables, a algunas posiciones de memoria, bits, puertos y registros para utilizar stos en el cuerpo principal del programa; el ensamblador se encarga de remplazar estos nombres por los valores numricos correspondientes, formando as el programa en cdigo objeto.
Con lo anterior, la direccin 06 corresponde al puerto B, al cual hemos llamado ptob, de ms fcil recordacin que un nmero. De igual manera tres posiciones auxiliares de memoria: la 0B, 0C Y 0D, que contendrn valores a decrementar para establecer una rutina de retardo, las hemos llamado reg1, reg2 y reg3. Tambin se han utilizado tres cantidades a las cuales les hemos asignado nombres, con el objeto de facilitar el manejo ya que, al momento de ensamblar el programa, podemos remplazarlos rpidamente si ellos no eran los adecuados. Veamos ahora algunos bloques de instrucciones ms detalladamente: Inicio. La primera instruccin carga el registro W con 0 (cero logico) para configurar, con la segunda instruccin (tris), el puerto B como salidas. Se debe recordar que un cero, en el registro de trabajo W, configura el pin respectivo como salida, mientras que un uno (1) lo hace como entrada. Esta instruccin se da, por lo regular una sola vez por puerto.

Otra. Aqu se carga el registro de trabajo W con uno, con el objeto de sacar estados lgicos altos por el pin RBO del puerto B, siendo este estado el encargado de encender el LED. Despus de configurado el puerto, ste puede ser tratado como cualquier otro registro, admitiendo transferencia de datos hacia (escribir sobre el puerto) y desde (leer el puerto) el registro de trabajo W. Tambin se pueden realizar operaciones lgicas, de rotacin, etc. La tercera lnea hace un llamado a una rutina de retardo, la cual se explicar ms adelante, retornando al programa principal tan pronto sta es ejecutada.
La parte que sigue carga el registro de trabajo W con el literal cero, el cual se sacar por el puerto B, con el objeto de apagar el LED. De nuevo se hace un llamado a la rutina de retardo, para visualizar el efecto; despus de la ejecucin de la rutina, el control del programa salta a la direccin dada por la etiqueta otra para continuar realizando la primera parte del mismo.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Retardo tres dos uno

movlw movwf

valor1 reg1

movlw valor2 movwf reg2 movlw valor3 movwf reg3 decfsz reg3 goto uno decfsz goto dos decfsz goto tres reg2 reg1

B C

retlw 00

Figura 3. Rutina de retardo

Retardo. En la figura 3 se muestra la rutina de retardo mencionada anteriormente. Debido a la gran velocidad con la cual se ejecutan las instrucciones en el microcontrolador (un milln por segundo, con un reloj de 4 MHz), es necesario efectuar, con mucha frecuencia, retardos que nos permitan observar algunos fenmenos lentos, tales como el encendido de LEOs, lmparas, rels, etc. Tales retardos se logran cargando, con un determinado valor, posiciones auxiliares de memoria RAM o registros, decrementndolos posteriormente y consultando el momento en el cual llegan a cero; dependiendo del resultado de la consulta, el programa puede dirigirse a dos sitios diferentes, como puede observarse en el diagrama de flujo de la figura 4. En ella se han resaltado tres pequeos bloques, que corresponden a una sola instruccin en la familia del microcontrolador PIC: decfsz Esta instruccin decrementa un registro y con, sulta si el contenido de ste ha llegado a cero; si es as, omite la siguiente instruccin; si no lo es, la ejecuta. Esto permite implementar bifurcaciones de acuerdo al cumplimiento de una condicin.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Figura 4. Diagrama de flujo de la rutina de retardo

Para conocer el tiempo que se tarda toda la rutina, podemos hacer algunos clculos, siempre expresando las cantidades en trminos de los ciclos de instruccin y para ello debemos saber cuanto tarda cada una de ellas. Afortunadamente, todas las instrucciones de los microcontroladores PIC se ejecutan en un ciclo, excepto cuando se realiza un salto, en cuyo caso la instruccin utiliza dos ciclos. Con lo anterior, debemos empezar por la rutina ms interna, marcada con la letra A en la figura 3. Mientras que no se cumpla la condicin, la instruccin decfsz reg3 consume 1 ciclo y la instruccin gota se ejecuta en dos ciclos; esta rutina interna gasta entonces tres ciclos, ejecutndose un nmero de veces que est dado por el valor contenido en el registro valor3, en este caso el valor hexadecimal 50 (observe la definicin de ste en la cabecera y recuerde que por defecto se asumen cantidades hexadecimales). El nmero total de ciclos consumidos por esta rutina ser entonces el

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

producto: Nmero ciclos A = 3 x valor3 = 3 x 80 (el decimal de 50Hex) = 240 ciclos de instruccin Haciendo un anlisis similar, la subrutina B (que abarca la subrutina A) tendr 245 (l + 1 + 240 + 1 + 2) ciclos. Aqu el total de ciclos consumidos depende del registro valor2 y ella se tardar: Nmero ciclos B = 245 x valor2 = 245 x 64 (el decimal de 40Hex) = 15860 ciclos de instruccin De igual manera, podemos considerar que para la subrutina e (que abarca tanto la A como la B) se tienen un nmero de ciclos de 15865 (15860 + 5); considerando que el nmero total de ciclos depende del registro valor 1, se tiene: Nmero ciclos C = 15865 x valor! = 15865 x 48 (el decimal de 30Hex) = 761520 ciclos de instruccin Podemos emplear una expresin algebrica para lo anterior, resultando ms fcil realizar los clculos: Total Ciclos = valor3*3 + 5)*valor2 + 5)*valorl En este caso, la constante 5 corresponde al nmero de ciclos que estn utilizando las instrucciones adicionales en las rutinas B y e, mientras que valor 1, valor2 y valor3 corresponden a las constantes tomadas de la cabecera del programa. Si quiere conocer el tiempo empleado por esta rutina, debe saber que un ciclo de instruccin corresponde a cuatro ciclos del reloj oscilador; si la frecuencia del oscilador es de 4 MHz, la frecuencia del reloj de instrucciones ser entonces de 1 MHz, en cuyo caso el ciclo de instruccin es de 1 microsegundo. Para el ejemplo anterior, se tendra entonces que la rutina de retardo se tardara un poco ms de 765520 S, ms que suficientes para visualizar el encendido y apagado de un LED.
Cuando se requiere gran precisin en el cumplimiento de rutinas de tiempo, se acude a un oscilador a cristal para el oscilador del microcontrolador. Cuando la precisin no es una preocupacin, se puede acudir a una sencilla red RC, para proporcionar la frecuencia del oscilador. En este ltimo caso, la frecuencia de oscilacin depender de las tolerancias de la resistencia y del condensador, al igual que la temperatura y el nivel de voltaje de la alimentacin. En caso de implementar una red RC, el fabricante sugiere para la resistencia valores comprendidos entre 5 K Y 100 k, Y para el condensador un valor mnimo de 20 pF End. Aunque sta no es propiamente una instruccin, s es necesaria para el ensamblador; si ste no la encuentra, emite un mensaje de error.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

As, estara descrito todo el programa. Despus de escribirlo en el editor de textos deber ensamblarlo, con lo cual se genera el cdigo objeto propio del microcontrolador. Si no ha cometido errores de sintaxis, estar listo para fijar este cdigo en el microcontrolador por medio del sistema de desarrollo.

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

Ejercicio 2: Secuenciador de 4 Leds.

Se trata de encender 4 led de manera consecutiva, sin que permanezcan encendidos dos de ellos simultneamente, para ello se de desarrolla un proceso sin terminacin es decir un ciclo infinito, para lo cual cada vez que se termina una secuencia se vuelve a iniciar, a menos de que se aplique un Reset al dispositivo. En este nuevo programa se evocara las anotaciones relazadas en el ejercicio anterior, salvo el hecho de que se utiliza una posicin adicional de memoria RAM para almacenar un valor que corresponda al estado de la rotacin presente en el puerto; esta es la posicin de memoria 0A, a la cual hemos llamado rota. En este ejercicio se puede observar que se realiza una rotacin hacia la Izquierda del registro rota para ser desplegado por medio de leds en el puerto B; si despus de la rotacin el quinto BIT aun no es 1, quiere decir que la rotacin aun no ha llegado a su fin, puesto que solo se hace con 4 Leds. La instruccin que consulta la condicin es btfss rota,4 ; sin ella se cumple (el bit es UNO), el programa ejecuta la instruccin goto hol , procediendo a sacar el dato rotado por el puerto B, La rutina de retardo ha sido tomada igual que el ejercicio 1. Programa Secuenciador de 4 LEDS ; ==================================================== ;Este programa maneja una secuencia de 4 LED's. list p=16c84 ;---------------------------------------------------------------------ptob equ 06 ;el puerto b est en la direccin 06 de la memoria RAM rota equ 0a reg1 equ 0b ;se asignan nombres a algunos registros de propsito general reg2 equ 0c reg3 equ 0d valor1 equ 30 ;se asignan nombres a algunas constantes valor2 equ 40 valor3 equ 50 ;----------------------------------------------------------------------reset org goto org 0 ;el vector de reset es la direccion 00 inicio ;se salta al inicio del programa 7 ;el programa empieza e la direccion de memoria 7 ;se carga el registro W con 0 ;se programan los pines del puerto b como salidas ;se carga el registro W con el valor 01 ;se dispone el dato para la rotacion

inicio movlw 00 tris ptob otra movlw 01 movwf rota

Microcontroladores Parte I. Ing. Victor Manuel Mondragon Maca

hol

movf rota,0 ;mueve el contenido del registro rota a W movwf ptob ;enciende el LED correspondiente call rlf btfss goto retardo ;se mantiene el LED encendido por un momento rota ;desplaza el contenido del registro un bit a la izquierda rota,4 ;probar si el quinto bit se enciende hol ;si no ha llegado al quinto bit enciende el LED que sigue otra ;si ya encendio el ultimo LED se inicia nuevamente la

goto secuencia

retardo movlw

tres dos

valor1 ;se carga el registro W con el numero valor1, es decir ;con el numero 30 que se asigno al principio a valor1 movwf reg1 ;se traslada ese numero al registro reg1 movlw valor2 ;se carga W con el numero valor2 (40) movwf reg2 ;se traslada ese numero al registro reg2 movlw valor3 ;se carga W con valor3 movwf reg3 ;se carga reg3 con 50 decfsz reg3 goto uno decfsz goto decfsz goto retlw end reg2 dos reg1 tres 00 ;se decremento el registro reg3 y si el valor es cero ;se salta a la siguiente instruccion, sino, se continua ;decrementandolo ;igual que el anterior ;igual al anterior ;termina la subrutina retardo y vuelve al programa principal

uno

You might also like