Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ingeniería Eléctrica
Manual de Referencia del Microcontrolador PIC16F84A
Copyright ©2005 Sebastián Montabone, Sergio Navarro. ©2001 Microchip Technology Inc.
PIC16F84A
Tabla de Contenidos 1. CARACTERÍSTICAS GENERALES DEL PIC16F84A............................................................................... 3 2. ORGANIZACIÓN DE LA MEMORIA DEL PIC16F84A............................................................................ 4 3. REGISTROS ESPECIALES.......................................................................................................................... 5 3.1. REGISTRO STATUS ................................................................................................................................ 5 3.2. REGISTRO OPTION_REG....................................................................................................................... 6 3.3. REGISTRO INTCON ................................................................................................................................ 6 3.4. PUERTOS DE ENTRADA Y SALIDA ............................................................................................................ 7 3.4.1. Configuración de Puertos: Registros TRISA y TRISB ................................................................... 7 3.4.2. Registros PORTA y PORTB........................................................................................................... 7 4. INSTRUCCIONES MÁS USADAS.............................................................................................................. 8 4.1. BCF F,B .................................................................................................................................................. 8 4.2. BSF F,B................................................................................................................................................... 8 4.3. BTFSC F,B ............................................................................................................................................. 8 4.4. BTFSS F,B.............................................................................................................................................. 8 4.5. CALL K .................................................................................................................................................. 8 4.6. RETURN ................................................................................................................................................ 8 4.7. RETFIE................................................................................................................................................... 8 4.8. GOTO K.................................................................................................................................................. 8 4.9. MOVLW A ............................................................................................................................................. 8 4.10. MOVWF F ............................................................................................................................................ 8 4.11. ADDLW A............................................................................................................................................ 8 4.12. ADDWF F,D......................................................................................................................................... 9 4.13. SUBLW A............................................................................................................................................. 9 4.14. SUBWF F,D.......................................................................................................................................... 9 4.15. DECFSZ F ............................................................................................................................................ 9 4.16. ADDFSZ F............................................................................................................................................ 9
Copyright ©2005 Sebastián Montabone, Sergio Navarro. ©2001 Microchip Technology Inc.
Página 2
PIC16F84A
1. Características Generales del PIC16F84A El microcontrolador PIC16F84A posee 18 pines, de los cuales 13 son usados para Entrada/Salida. Además, cuenta con un Timer/Contador interno y 4 fuentes de interrupción a la CPU. En la Figura 1 se presenta un diagrama con su apariencia externa. Cada uno de los pines que lo componen se describen a continuación.
Figura 1: Diagrama de pines del PIC16F84A.
Pin RA0, RA1, RA2, RA3, RA4/T0CKI RB0/INT, RB1, RB2, RB3, RB4, RB5, RB6, RB7 VSS VDD _____ MCLR OSC1/CLKIN OSC2/CKOUT
Descripción Pines correspondientes al Puerto A (PORTA). Pueden ser escritos o leídos (toman valores 1 ó 0). Cada uno de estos pines debe ser configurado como entrada o salida mediante el registro TRISA. En particular, el pin RA4/T0CKI puede funcionar como Entrada/Salida al igual que los otros o como Entrada de un Clock Externo para el Timer/Contador Pines correspondientes al Puerto B (PORTB). Pueden ser escritos o leídos (toman valores 1 ó 0). Cada uno de estos pines debe ser configurado como entrada o salida mediante el registro TRISB. En particular, el pin RB0/INT puede funcionar como Entrada/Salida al igual que los otros o como Entrada de Interrupción Externa. Tierra del circuito (debe ser conectado a 0 Volts). Alimentación positiva del circuito (debe ser conectado a +5 Volts). Pin de RESET. En estado normal se debe poner en 1 (+5 Volts), y el RESET se activa conectándolo a 0 Volts. Entrada del oscilador externo. Salida del oscilador externo.
Copyright ©2005 Sebastián Montabone, Sergio Navarro. ©2001 Microchip Technology Inc.
Página 3
PIC16F84A
2. Organización de la Memoria del PIC16F84A La memoria del PIC16F84A se divide en dos áreas principales: La primera es la de Registros Especiales, que nos sirven para configurar el dispositivo (entradas y salidas, interrupciones, timer/contador, etc...) y obtener información sobre su estado actual (resultados de operaciones lógicas, Interrupciones, lectura de entradas y escritura de salidas, etc...). La segunda es la de Registros de Uso General, que consiste en 68 registros (de 8 bits cada uno), los cuales podemos utilizar para lo que estimemos necesario. En la Figura 2 podemos ver esta división junto con el nombre de los registros especiales y sus direcciones en hexadecimal.
Figura 2: Organización de la memoria del PIC16F84A.
Copyright ©2005 Sebastián Montabone, Sergio Navarro. ©2001 Microchip Technology Inc.
Página 4
PIC16F84A Además de la división previamente mencionada, se puede apreciar que los registros se encuentran separados en dos grupos, BANK0 y BANK1 (Bancos). Para acceder a los distintos registros se debe seleccionar previamente el Banco correspondiente. Para hacer esto, utilizaremos el registro STATUS que se detalla a continuación.
3. Registros Especiales Todos los registros que usaremos poseen 8 bits. En general, ocuparemos la siguiente convención al referirnos a los bits de los registros: Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
3.1. Registro STATUS
Este registro contiene los bits necesarios para el cambio de banco, y otros que nos entregan información sobre el estado del microcontrolador. Se puede acceder a este registro desde el Banco 1 y desde el Banco2 indistintamente. A continuación se muestra un cuadro resumen de estos bits. Bits 7 y 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
No se usan. Mantenerlos en 0. Bank Select. 1 : Selecciona BANK1. 0 : Selecciona BANK0. Time-out bit. No es de uso frecuente. Para obtener información sobre éste, consultar el Datasheet. Power-down bit. No es de uso frecuente. Para obtener información sobre éste, consultar el Datasheet. Zero-bit. 1 : La última operación dio como resultado un cero. 0 : La última operación no dio como resultado un cero. DC. Digit Carry Borrow. No es de uso frecuente. Para obtener información sobre éste, consultar el Datasheet. C. Carry Borrow Bit. 1 : Hubo un carry desde el bit más significativo. 0 : No hubo un carry desde el bit más significativo.
Copyright ©2005 Sebastián Montabone, Sergio Navarro. ©2001 Microchip Technology Inc.
Página 5
PIC16F84A 3.2. Registro OPTION_REG
A grandes rasgos, este registro contiene los bits necesarios para configurar el Timer/Contador (Timer0). Se accede a este registro desde el Banco 1. A continuación se muestra un cuadro resumen de estos bits. Bit 7 Bit 6 Bit 5 Bit 4 Bit 3
Bits 2, 1 y 0
PORTB Pull-up Enable. No es de uso frecuente. Para obtener información sobre éste, consultar el Datasheet. INTEDG. Interrupt Edge Select Bit. No es de uso frecuente. Para obtener información sobre éste, consultar el Datasheet. T0CS. Timer0 Source Clock Select. Mantener en 0 para uso normal. T0SE. Timer0 Source Edge Select. No es de uso frecuente. Para obtener información sobre éste, consultar el Datasheet. PSA. Prescaler Assignment 1 : El prescaler se asigna al WatchDog Timer. En este caso el Timer0 queda con escala 1:1 (incrementándose a 1 MHz). 0 : El prescaler se asigna al Timer0. PS2-PS1-PS0. Prescaler Rate Select Bits. Ver la tabla en la página 9 del Datasheet.
3.3. Registro INTCON
Este registro contiene los bits necesarios para configurar las interrupciones, y para obtener información acerca de éstas. Se puede acceder a este registro desde ambos bancos. A continuación se muestra un cuadro resumen de estos bits. Bit 7 Bit 6 Bit 5
GIE. Global Interrupt Enable. 1 : Habilita todas las interrupciones seleccionadas en los bits 6, 5, 4 y 3. 0 : Deshabilita todas las interrupciones. EEIE. EE Write Complete Interrupt. No es de uso frecuente. Para obtener información sobre éste, consultar el Datasheet. T0IE. Timer0 Overflow Interrupt. Ocurre cuando el Timer0 pasa de 255 a 0 1 : Habilita la interrupción de Timer0. 0 : Deshabilita la interrupción de Timer0.
Copyright ©2005 Sebastián Montabone, Sergio Navarro. ©2001 Microchip Technology Inc.
Página 6
PIC16F84A
Bit 4 Bit 3
Bit 2
Bit 1
Bit 0
INTE. RB0/INT External Interrupt. 1 : Habilita la interrupción de RB0/INT. 0 : Deshabilita la interrupción de RB0/INT. RBIE. RB Port Change Interrupt. 1 : Habilita la interrupción de cambio de valor de pines 4 al 7 de PORTB. 0 : Deshabilita la interrupción de cambio de valor de pines 4 al 7 de PORTB. T0IF. Timer0 Overflow Interrupt Flag. Indicador de ocurrencia de interrupción del Timer0. Se debe borrar por software. 1 : Ocurrió una interrupción de Timer0. 0 : No ha ocurrido una interrupción de Timer0. INTF. RB0/INT External Interrupt Flag. Indicador de ocurrencia de interrupción del pin RB0. Se debe borrar por software. 1 : Ocurrió una interrupción de RB0/INT. 0 : No ha ocurrido una interrupción de RB0/INT. RBIF. RB Port Change Interrupt Flag. Indicador de ocurrencia de interrupción de los pines de RB4 a RB7. Se produce por el cambio de estado de cualquiera de estos pines, sin importar si están en 1 o 0. Se debe borrar por software. 1 : Al menos un pin entre RB4, RB5, RB6 y RB7 cambió de valor. 0 : No ha ocurrido una interrupción de PORTB Change.
3.4. Puertos de Entrada y Salida 3.4.1. Configuración de Puertos: Registros TRISA y TRISB
Para poder utilizar los puertos PORTA y PORTB, se deben especificar los pines que se utilizarán como entradas y salidas. Para ello debemos acceder a los registros TRISA y TRISB, que se encuentran en el Banco 1. Se debe escribir un 0 para las salidas y un 1 para las entradas en las posiciones respectivas de cada uno. 3.4.2. Registros PORTA y PORTB
Los registros PORTA y PORTB se encuentran en el Banco 0. El Puerto A posee 5 pines (RA0 – RA4), los cuales pueden ser escritos o leídos según corresponda (si es entrada se lee, si es salida se escribe). El Puerto B posee 8 pines (RB0 – RB7), los cuales pueden ser leídos o escritos según corresponda.
Copyright ©2005 Sebastián Montabone, Sergio Navarro. ©2001 Microchip Technology Inc.
Página 7
PIC16F84A
4. Instrucciones más usadas A continuación se presentan las instrucciones más frecuentemente usadas en los programas. Se recomienda revisar el datasheet si se requieren más instrucciones o se desean ver más detalles. 4.1. BCF F,B
Escribe un 0 en el bit B del registro F. 4.2. BSF F,B
Escribe un 1 en el bit B del registro F. 4.3. BTFSC F,B
Lee el bit B del registro F. Si B está en 0, se salta la siguiente línea de código. Si B está en 1, no hace nada extra y continúa ejecutando la siguiente línea. 4.4. BTFSS F,B
Lee el bit B del registro F. Si B está en 1, se salta la siguiente línea de código. Si B está en 0, no hace nada extra y continúa ejecutando la siguiente línea. 4.5. CALL K
Llama a una subrutina(etiqueta) con el nombre K. (requiere un RETURN al final de la subrutina). 4.6. RETURN
Retorna desde una subrutina. 4.7. RETFIE
Retorna desde una interrupción. 4.8. GOTO K
El programa salta a la etiqueta con el nombre K. No se debe poner RETURN en este caso. 4.9. MOVLW A
Se carga el registro W(Working Register) con el contenido del literal A (un número escrito en cualquier formato, ya sea decimal, hexadecimal o binario) 4.10. MOVWF F
Copia el contenido del registro W al registro F 4.11. ADDLW A
Sumar W con un número A. El resultado queda en W.
Copyright ©2005 Sebastián Montabone, Sergio Navarro. ©2001 Microchip Technology Inc.
Página 8
PIC16F84A 4.12. ADDWF F,D
Sumar W con F. Esta instrucción suma el contenido de un registro específico F al contenido del registro W donde F puede ser un registro cualquiera con un determinado valor. Si D = 1, el resultado se graba en F, si es 0, se graba en W 4.13. SUBLW A
Resta W de A. Resta el contenido del registro W de un literal A, el resultado queda en W. 4.14. SUBWF F,D
Resta W de F. Resta el contenido del registro W del registro F. Si D = 1, el resultado se graba en F, si es 0, se graba en W 4.15. DECFSZ F
Decrementa el registro F en 1, salta la siguiente línea si el resultado de eso es cero. 4.16. INCFSZ F
Aumenta el registro F en 1, salta la siguiente línea si el resultado de eso es cero. (overflow).
Copyright ©2005 Sebastián Montabone, Sergio Navarro. ©2001 Microchip Technology Inc.
Página 9