Microcontrolador PIC16F84.docx

21
Microcontrolador PIC16F84 1. Oscilador Todo microprocesador o microcontrolador requiere de una señal de reloj que sincronice su funcionamiento. Esta señal se obtiene mediante un oscilador de frecuencia. Existen microcontroladores que tienen un oscilador interno y no requieren de componentes externos. El microcontrolador PIC16F84 requiere de un circuito externo de oscilación o generador de pulsos de reloj. La frecuencia de reloj máxima es de 4 MHz para el PIC16F84A- 04 y de 20 MHz para el PIC16F84A-20. Existen 4 modos de oscilador para el PIC16F84A. Tres (LP,XT y HS) utilizan cristal de cuarzo y la cuarta (RC) utiliza una resistencia y un condensador. 1.1 Modo oscilador XT, LP y HS XT (XTal): Oscilador estándar de cristal de cuarzo, desde una frecuencia de 100 kHz hasta un máximo de 4 MHz para el PIC16F84A-04. LP (Low Power): Con cristal de cuarzo desde 32 a 200 KHz. Este oscilador es igual que el anterior, con la diferencia de que el PIC trabaja de una manera distinta. Este modo está destinado para trabajar con un cristal de menor frecuencia, que, como consecuencia, hará que el PIC consuma menos corriente. Es el modo ideal para el PIC16LF84A-04. HS (High Speed): Alta velocidad, también con cristal de cuarzo de 4 a 20 MHz. Habremos de usar esta configuración cuando usemos cristales mayores de 4 MHz. Es el modo adecuado para un PIC16F84A-20.

Transcript of Microcontrolador PIC16F84.docx

Page 1: Microcontrolador PIC16F84.docx

Microcontrolador PIC16F84

1. Oscilador

Todo microprocesador o microcontrolador requiere de una señal de reloj que sincronice su funcionamiento. Esta señal se obtiene mediante un oscilador de frecuencia.Existen microcontroladores que tienen un oscilador interno y no requieren de componentes externos. El microcontrolador PIC16F84 requiere de un circuito externo de oscilación o generador de pulsos de reloj.La frecuencia de reloj máxima es de 4 MHz para el PIC16F84A-04 y de 20 MHz para el PIC16F84A-20.Existen 4 modos de oscilador para el PIC16F84A. Tres (LP,XT y HS) utilizan cristal de cuarzo y la cuarta (RC) utiliza una resistencia y un condensador.

1.1 Modo oscilador XT, LP y HS

XT (XTal): Oscilador estándar de cristal de cuarzo, desde una frecuencia de 100 kHz hasta un máximo de 4 MHz para el PIC16F84A-04.

LP (Low Power): Con cristal de cuarzo desde 32 a 200 KHz. Este oscilador es igual que el anterior, con la diferencia de que el PIC trabaja de una manera distinta. Este modo está destinado para trabajar con un cristal de menor frecuencia, que, como consecuencia, hará que el PIC consuma menos corriente. Es el modo ideal para el PIC16LF84A-04.

HS (High Speed): Alta velocidad, también con cristal de cuarzo de 4 a 20 MHz. Habremos de usar esta configuración cuando usemos cristales mayores de 4 MHz. Es el modo adecuado para un PIC16F84A-20.

La frecuencia máxima en el modo XT para el PIC16F84A-04 es de 4 MHz.

Page 2: Microcontrolador PIC16F84.docx

La condición más importante para que este oscilador funcione es que los condensadores C1 y C2 deberán ser iguales.

Para una VDD > 4,5 V, se recomienda que C1 = C2 = 33 pF.

1.2 Modo oscilador RC

    RC (Resistor/Capacitor): Oscilador Resistencia/Capacidad. Es el más económico por que tan solo se utiliza un condensador no polarizado y una resistencia. Es adecuado para las aplicaciones donde las temporizaciones no requieran precisión. La frecuencia depende de:

La tensión de alimentación El valor de la resistencia El valor del condensador La temperatura de funcionamiento

Además de esto, la frecuencia de oscilación puede variar de un microcontrolador a otro debido a variaciones en algunos parámetros en la fabricación de cada integrado. También han de tenerse en cuenta la variación debida a la tolerancia de la resistencia y condensador utilizados. Incluso las capacidades parasitas que puedan aparecer, como el trazado de las pistas o con los contactos del zócalo donde va insertado el microcontrolador pueden afectar a la frecuencia de la oscilación, sobre todo si se utilizan condensadores de pequeño valor. En general las variaciones de la frecuencia de oscilación son mayores cuanto mayor sea R y menor sea C.

    En la figura siguiente aparece como debe conectarse el circuito RC al PIC:

Page 3: Microcontrolador PIC16F84.docx

    La frecuencia máxima en el modo RC para el PIC16F84A-04 es de 4 MHz.Los valores de R deben estar comprendidos entre 5 y 100 K, mientras que los valores de C no deben ser inferiores a 20 pF.Es importante saber que para valores de resistencia menor a 5 K, el sistema se hace inestable o se podría detener la oscilación completamente. Para valores de resistencias mayores a 100 K (por ejemplo 1 MOhmio), el oscilador se hace muy susceptible al ruido, humedad y a la temperatura por lo tanto se recomienda que este tipo de oscilador se encuentre en el siguiente rango (5K < R < 100 K). Por otro lado se recomienda utilizar un condensador no polarizado mayor de 20 picoFaradios para disminuir el ruido y aumentar la estabilidad del sistema.

2. Conexión del microcontrolador

Page 4: Microcontrolador PIC16F84.docx

3. Registro de configuración

El PIC dispone de una palabra de configuración de 14 bits que se escribe durante el proceso de grabación del microcontrolador y que no se puede modificar durante la ejecución de un programa. Dichos bits ocupan la posición reservada de memoria de programa 2007h.

Page 5: Microcontrolador PIC16F84.docx

FOSC (1:0) selección del tipo de oscilador:

FOSC = 00. Oscilador de bajo consumo LP (32 Khz – 200Khz) FOSC = 01. Oscilador estándar XT (100Khz – 4Mhz). FOSC = 10. Oscilador de alta velocidad HS (4Mhz – 20Mhz) FOSC = 11. Oscilador de bajo costo RC.

WDTE. Bit de habilitación del Watchdog.

WDTE = 0. Watchdog deshabilitado WDTE = 1. Watchdog habilitado.

PWRTE. Activación del temporizador Power-Up.

PWRTE = 0. Temporizador Power-Up deshabilitado. PWRTE = 1. Temporizador Power-Up habilitado.

CP. Bit de protección de código.

CP = 0. Toda la memoria de programa esta protegida contra lecturas indeseables.

CP = 1. La memoria de programa se puede leer. No esta protegida.

Registro de estado o STATUS.

El registro de STATUS ocupa la posición 03h del banco 0 o la 83h del banco 1 y es uno de los registros más importantes y utilizados. Los bits de este registro indican el estado de la última operación aritmética o lógica realizada, la causa de reset y los bits de selección de banco para la memoria de datos. A los bits del registro de estado se les suele denominar flags o banderas.

A continuación se explican sus bits principales.

Page 6: Microcontrolador PIC16F84.docx

C. Flag de acarreo en el octavo bit. En instrucciones de suma aritméticas se activa cuando se presenta acarreo desde el bit mas significativo del resultado, lo que indica que el resultado has desbordado la capacidad del registro sobre el que trabaja.

o C= 0. En la suma significa que no ha habido acarreo y en la resta que el resultado ha sido negativo.

o C = 1. En la suma significa que ha habido acarreo y en la resta que el resultado ha sido positivo.

DC. Flag de acarreo en el 4 bit de menos peso. En operaciones aritméticas se activa cuando hay un acarreo entre el bit 3 y 4, es decir, cuando hay acarreo entre los nibbles de menor y de mayor peso. Tiene un comportamiento análogo al del bit C.

Z. flag de cero. Se activa a 1 cuando el resultado de una operación aritmética o lógica es cero.

o Z = 0. El resultado de la última operación ha sido distinto de cero.o Z = 1. El resultado de la última operación ha sido cero.

RPO. Selección del bando para el direccionamiento directo. Señala el banco de memoria de datos seleccionado.

o RPO = 0. Selecciona el banco 0.o RP0 = 1. Selecciona el banco 1.

4. Los registros

Un registro es un lugar dentro del PIC que puede ser escrito, leído o ambas cosas. Piensa en un registro como si fuese un trozo de papel donde tu puedes ver la información o escribirla. La figura de más abajo muestra el mapa de registros del interior del PIC16F84. No te preocupes si no has visto nada parecido antes, es solo para mostrar donde están los diferentes bits y piezas dentro del PIC, y nos ayudará a explicar unos cuantos comandos.

Page 7: Microcontrolador PIC16F84.docx
Page 8: Microcontrolador PIC16F84.docx

Registros de funciones especiales (SFR)

La primera cosa que notarás es que está dividido en dos - Banco 0 y Banco 1. El Banco 1 es utilizado para controlar las propias operaciones del PIC, por ejemplo para decirle al PIC cuales bits del Puerto A son entradas y cuales son salidas. El Banco 0 se utiliza para manipular los datos. Un ejemplo es el siguiente: Digamos que queremos poner un bit del puerto A a nivel alto. Lo primero que necesitamos hacer es ir al Banco 1 para poner ese bit o pin en particular en el puerto A como salida. Después volvemos al Banco 0 y enviamos un 1 lógico a ese pin. Los registros que vamos a usar más comunes en el Banco 1 son STATUS, TRISA y TRISB. El primero permite volver al Banco 0, TRISA nos permite establecer los

Page 9: Microcontrolador PIC16F84.docx

pines que serán entradas y los que serán salidas del Puerto A, TRISB nos permite establecer los pines que serán entradas y los que serán salidas del puerto B. Vamos a ver con más detenimiento estos tres registros.

STATUS Para cambiar del Banco 0 al Banco 1 utilizamos el registro STATUS. Hacemos esto poniendo el bit 5 del registro STATUS a 1. Para cambiar de nuevo al Banco 0, ponemos el bit 5 del registro STATUS a 0. El registro STATUS se localiza en la dirección 03h (la 'h' significa que el número es hexadecimal).

TRISA y TRISB

Están localizados en las direcciones 85h y 86h respectivamente. Para programar que un pin sea una salida o una entrada, simplemente enviamos un 0 o un 1 al bit en cuestión en el registro. Ahora, podemos hacer esto ya sea en binario o en hexadecimal. Personalmente uso ambos, ya que el binario ayuda mucho a visualizar el puerto. Si no estás familiarizado con el paso de binario a hexadecimal y viceversa, utiliza una calculadora científica. Entonces en el puerto A tenemos 5 pines, por tanto 5 bits. Si deseamos poner uno de los pines como entrada, enviamos un 1 al bit en cuestión. Si deseamos poner uno de los pines como salida, ponemos un 0 en ese bit. Los bits están definidos de manera correspondiente con los pines, en otras palabras el bit 0 es el RA0, el bit 1 es el RA1, el bit 2 es el RA2, y así sucesivamente. Vamos a tomar un ejemplo. Si queremos poner RA0, RA3 y RA4 como salidas, y RA1 y RA2 como entradas, enviamos esto: 00110 (06h). Date cuenta de que el bit cero está a la derecha, como se muestra aquí:

Pin del Puerto A RA4 RA3 RA2 RA1 RA0

Numero de bit 4 3 2 1 0

Valor Binario 0 0 1 1 0

Lo mismo se aplica para TRISB.

PORTA y PORTB

Para poner uno de nuestros pines de salida a nivel alto, simplemente ponemos un 1 el bit correspondiente en nuestro registro PORTA o PORTB. El formato es el mismo que para los registros TRISA y TRISB. Para leer si un pin está a nivel alto o nivel bajo en los pines de nuestro puerto, podemos ejecutar un chequeo para ver si el bit en particular correspondiente esta puesto a nivel alto (1) o está puesto a nivel bajo (0).

Antes de dar un ejemplo de código, tenemos que explicar dos registros mas - W y F.

W

Page 10: Microcontrolador PIC16F84.docx

El registro W es un registro de propósito general al cual le puedes asignar cualquier valor que desees. Una vez que has asignado un valor a ese registro, puedes sumarle cualquier otro valor, o moverlo. Si le asignas otro valor a W, su contenido es sobrescrito.

5. Instrucciones

El repertorio de instrucciones está compuesto por 35 instrucciones que pueden ser agrupadas para su estudio en los siguientes grupos.

Page 11: Microcontrolador PIC16F84.docx

5.1 Instrucciones de carga

Las instrucciones de transferencias de datos son típicas todos los procesadores y su misión es transferir el contenido un registro a registro destino (d) o bien cargar el destino con constante. En los microcontroladores PIC todos los datos residen en posiciones de la memoria de datos y en el registro de trabajo W.

En la explicación de estas instrucciones se emplea muchas veces una nomenclatura especial muy simple basada en paréntesis y flechas. Con los paréntesis se destaca que se trata del contenido de las posiciones de memoria y la flecha la dirección de la transferencia de los datos. Algunos ejemplos:

Hay cinco instrucciones de carga :

clrw : El contenido del registro W se borra y el flag Z se activa a 1.

clrf: El contendo del registro “f” se borra y el flag Z se activa a 1.

movlw K: El registro W se carga con el valor de los 8 bits de la constante k. Ningun flag del registro es afectado.

movf f,d: El contenido del registro “f” se carga en el registro destino dependiendo del valor de “d”. Si “d = 0” el destino es el registro W, si “d = 1” el destino es el propio registro “f”. El flag Z del registro STATUS queda afectado: Z se activa a “1” si el resultado de la operación es cero.

Page 12: Microcontrolador PIC16F84.docx

movwf : Carga el contenido de registro W al registro “f”. Ningun flag es afectado.

5.2 Instrucciones de bit

Estas instrucciones ponen a nivel lógico “0” o “1” un determinado bit de un registro de la memoria de datos.Bcf f,b: Pone a cero el bit “b” del registro “f”.Bsf f,b: pone a uno el bit “b” del registro “f”.

5.3 Instrucción “goto K”

En casi todos los programas se usa la instrucción de salto incondicional goto K que produce un salto a la dirección del programa indicada por “k”. La literal “k” es la dirección de destino del salto, es decir, la nueva dirección de memoria de programa a partir de la cual comenzara a leerse las instrucciones después de ejecutar la instrucción goto.

6. Directivas

Para poder ensamblar un programa automáticamente el ensamblador necesita información en forma de directivas, que son comandos insertados en el programa que controla el proceso de ensamblado.

end: Indica el fin del programa.

equ: Es una directiva de asignación.

org: Esta directiva indica al programa ensamblador la dirección en memoria de programa a partir de la cual deben ensamblarse las instrucciones del código fuente. Es decir, la dirección de la memoria de programa donde se va a almacenar esas instrucciones.

_ _config: Esta directiva indica la configuración elegida para el proceso de grabación del microcontrolador. En este caso:

_ _CONFIG _CP_OFF& _WDT_OFF&_PWRTE_ON&_OSC

No hay proteccion de codigo (_CP_OFF). No se habilita el Watchdog (_WDT_OFF). Se habilita el reset mediante Power-Up Timer (_PWRTE_ON). Se utiliza el oscilador por cristal de cuarzo (_XT_OSC).

LIST P=16F84A

Indica el tipo de procesador utilizado.

INCLUDE

Page 13: Microcontrolador PIC16F84.docx

Indica el fichero donde se localizan las etiquetas que nombran a los diferentes registros y el valor que le corresponde a cada uno, es decir, en el fichero P16F84A.INC se muestra como hay que nombrar a todos los registros propios del microcontrolador. Este fichero se localiza en el directorio principal del programa ensamblador y su contenido es el siguiente:

Operaciones aritméticas.

addlw k

Suma el contenido del registro W con el literal o constante k. Almacena el resultado en W. Si se produce acarreo el flag C se ponen a “1”.

addwf f,d

Suma el contenido del registro W al contenido del registro “f”. Almacena el resultado en W si “d = 0” y en el registro “f” si “d = 1”. Si se produce acarreo el falg C se pone a “1”.

Sublw k

Resta (en complemento a 2) el contenido de la constante “K” menos el contenido del registro W y almacena el resultado en W.

subwf f,d

Resta (en complemento a 2) el contenido del registro “f” menos el contenido del registro W. Almacena el resultado en W si “d” es cero y en “f” si “d” es uno.

7. Incrementar y decrementardecf f,d

Page 14: Microcontrolador PIC16F84.docx

El contenido del registro “f” se decrementa en una unidad. Almacena el resultado en W si “d = 0”(en cuyo caso “f” no varia) y en el registro “f” si “d - 1”.El flag Z se activa a “1” si el resultado de la operación es cero.

incf f,d

El contenido del registro “f” se incrementa en una unidad, almacena el resultado en W si “d = 0” (en cuyo caso “f” no varia) y en el registro “f” si “d = 1”. El flag Z se activa a “1” si el resultado de la operación es cero, es decir, si hay desbordamiento al pasar de b´11111111 a b´00000000.

8. Instrucciones lógicas

andlw k

Efectua la operación AND lógica entre el contenido del registro W y la constante “k”. Almacena el resultado en W. El flag Z se activa a “1” si el resultado de la operación es cero.

andwf f,d

Efectua la operación AND lógica entre el contenido del registro W y el contenido del registro “f”. almacena el resultado en W si “d = 0” y en el registro “f” su “d = 1. El flag Z se activa a “1” si el resultado de la operación es cero.

comf f,d

Realiza un complemento del contenido del registro “f” bit a bit, invirtiendo su valor, es decir, cambia los unos por ceros y viceversa. Almacena el resultado en W si “d = 0” (en cuyo caso “f” no varía) y en el registro “f” si “d = 1”.el flag Z se activa a “1” si el resultado de la operación es cero.

iorlw k

Efectúa la operación OR lógica entre el contenido del registro W y la constante “k”. Almacena el resultado en W. El flag Z se activa a “1” si el resultado de la operación es cero.

iorwf f,d

Efectúa la operación OR lógica entre el contenido del registro W y el contenido del registro “f”. Almacena el resultado en W si “d = 0” y en el registro “f” si “d = 1”. El flag Z se activa a “1” si el resultado de la operación es cero.

rlf f,d

Page 15: Microcontrolador PIC16F84.docx

Rotación de un bit a la izquierda del registro “f” pasando por el bit de acarreo C. El desplazamiento es cerrado, formando un anillo con el bit C del registro de estado o STATUS. Si “d = 1” el resultado se almacena en “f”, si “d = 0”el resultado se almacena en W. El contenido del Carry pasa a la posición del bit de menor peso y el bit de mayor peso para al carry.

rrf f,d

Rotacion de un bit a la derecha del registro pasando por el bit de acarreo C. Similar que el anterior pero el desplazamiento es a la derecha.

swapf f,d

Los cuatro bits de mas peso del registro “f” se intercambian con los 4 bits de menos peso del mismo registro “f”. Si “d = 0” el resultado se almacena en W, si “d = 1 el resultado se almacena en “f”.

xorlw k

Realiza la función OR exclusiva entre el contenido del registro W y la constante “k” de 8 bits. El resultado se almacena en W. El flag Z se activa a “1” si el resultado de la operación es cero.

xorwf f,d

Realiza la función OR exclusiva entre el contenido del registro W y el contenido del registro f. almacena el resultado en f si “d = 1” y en W si “d = 0”. El flag Z se activa a “1” si el resultado de la operación es cero.

La función SLEEP

Para ahorrar energía, los microcontroladores PIC disponen de la instrucción especial sleep que les pasa al estado de reposo o de bajo consumo, en el cual los requerimientos de potencia son mínimos.