Está en la página 1de 12

APÉNDICE

Guía rápida
del PIC16F84A
B

INTRODUCCIÓN
Gran parte de los programas, ejercicios y proyectos de este libro pueden ser implemen-
tados con un PIC16F84A. La razón de esta elección es que sobre su memoria de instruc-
ciones se pueden grabar y borrar los programas.
Presentamos las características más usadas en la programación y manejo de este
modelo en las aplicaciones para que al trabajar con ellos se localicen rápidamente los
datos precisos. Sabiendo manejar el PIC16F84A es muy fácil pasar a usar los potentes
PIC16F87X.

CARACTERÍSTICAS GENERALES

• Memoria de programa de 1 K × 14, de tipo Flash.


• Memoria de datos EEPROM de 64 bytes.
• Memoria RAM de propósito general de 68 bytes en el PIC16F84A.
• Trece líneas de E/S con control individual de dirección.
• Frecuencia máxima de funcionamiento de 10 MHz.
• Cuatro fuentes de interrupción:
a) Activación de la patita RB0/INT.
b) Desbordamiento del TMR0.
c) Cambio de estado en alguna patita RB7-RB4.
d) Fin de la escritura de la EEPROM de datos.
• Temporizador/contador TMR0 programable de 8 bits.
• Perro Guardián.
• Encapsulado de 18 patitas.

DIAGRAMA DE CONEXIONES
La distribución y denominación de las patitas del PIC16F84A se presenta en la Fi-
gura B.1

11
12 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

Figura B.1. Distribución y denominación de las patitas del PIC16X84.

Función de las patitas


— OSC1/CLKIN: Entrada externa de los impulsos de reloj o conexión con el
cristal de cuarzo.
— OSC2/CLKOUT: Salida de Fosc/4 en modo oscilador R-C o conexión con el
cristal de cuarzo.
— VPP/MCLR#: En modo grabación, por esta patita se introduce la tensión VPP
(12-14 V DC). En funcionamiento normal, esta patita soporta la petición de
reset.
— RA0-RA3: Líneas de E/S de la puerta A.
— RA4/T0CKI: Línea de E/S de la puerta A o entrada de impulsos de reloj para
TMR0.
— RB0/INT: Línea de E/S de la puerta B o petición de interrupción.
— RB1-RB7: Línea de E/S de la puerta B.

MEMORIA DE PROGRAMA

Tiene implementadas 1 K palabras de 14 bits cada una, ocupando las direcciones com-
prendidas entre la 0x0000 y la 0x03FF. Los modelos de la gama media alcanzan 8 K de
capacidad máxima (véase Figura B.2).
Las posiciones ID de identificación sirven para que el usuario grabe en sus cuatro
bits de menos peso los códigos que desee.
La Palabra de Configuración sólo tiene 5 bits válidos y sus símbolos y misiones se
muestran en la Figura B.3.

MEMORIA DE DATOS RAM


Consta de dos bancos de 128 bytes cada uno, pero el PIC16F84A sólo tiene implementa-
dos los ochenta primeros bytes de cada banco. En los doce primeros se ubican los registros
de propósito específico (SFR) y en las sesenta y ocho siguientes los registros de propósito
general (GPR). Sin embargo, los sesenta y ocho registros de propósito general del banco
1 se mapean sobre el banco 0, dejando reducidos a sesenta y ocho los registros operativos
de este tipo (véase Fig. B.4).
GUÍA RÁPIDA DEL PIC16F84A 13

Figura B.2. Organización de la memoria de instrucciones de los PIC16F84A.

13 4 3 2 1 0
NO DEFINIDOS CP PWRTE WDTE FOSC1

CP: Protección de código (CP = 0 activado)


PWRTE: Control de temporizador power-up (en el PIC16C84, PWRTE = 1 activado; en el
PIC16F84, al revés)
WDTE: Control del Perro Guardián (WDTE = 1, activado)
FOSC1:FOSC0: Selección oscilador: 00:LP, 01:XT, 10:HS, 11:R-C

Figura B.3. Palabra de Configuración.


14 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

MEMORIA DE DATOS EEPROM


Los datos guardados en esta memoria no se pierden al quitar la alimentación. Consta de
64 bytes que ocupan direcciones comprendidas entre la 0x00 y la 0x3F.
Para acceder a esta memoria en lectura o escritura hay que utilizar los registros de
control: EEDATA, EEADR, EECON1 y EECON2.
El proceso de escritura de una posición de esta memoria es lento y dura unos 10 ms.
Cuando finaliza, se activa un señalizador y se puede provocar una interrupción.

PUERTAS DE E/S
Hay dos puertas de E/S: Puerta A y Puerta B.

Puerta A
• Consta de cinco líneas, denominadas RA4:RA0.
• RA3:RA0 actúan como líneas de E/S digitales configurables de forma indepen-
diente.
• RA4/T0CKI, además de línea de E/S, puede funcionar como entrada de los impul-
sos de reloj para el TMR0.
• Si a un bit de TRISA se pone 1, la línea de E/S correspondiente de la Puerta A actúa
como entrada, y si se le pone a 0, funciona como salida.
• Al leer una entrada, se lee el estado actual de la patita.
• Las líneas de salida están «latcheadas» y en ellas se mantiene el último valor que
han sacado.
• Tras un reset, todos los bits de TRISA se ponen a 1 y las líneas de la Puerta A
quedan configuradas como entradas.
• Cada línea de la Puerta A suministra una corriente máxima de 25 mA y puede
absorber hasta 25 mA. La corriente máxima total que puede absorber la Puerta A
es de 80 mA, y la que puede suministrar, de 50 mA.

Puerta B
• Cuando las líneas de la Puerta B se configuran como entradas es posible acoplar-
las una resistencia pull-up al positivo, poniendo a 0 el bit séptimo (RBPU) del
registro OPTION.
• La Puerta B puede absorber una corriente máxima de 150 mA y suministrar un
total de 100 mA.
• RB0/INT también puede actuar como línea de petición de interrupción.
• RB7:RB4 pueden programarse para soportar una misión especial cuando están
configuradas como entradas. Si cambia el estado lógico de una de ellas, se provoca
una interrupción.
• Para la grabación en serie del PIC se usa la patita RB6 para los impulsos de reloj
y la RB7 para la entrada de datos.
GUÍA RÁPIDA DEL PIC16F84A 15

Figura B.4. Organización de la memoria de datos RAM.

REGISTROS DE CONTROL
En las Figuras B.5 a la B.9 se expone gráficamente la distribución y la misión de los bits
de los registros de control (SFR) más importantes, que son:
16 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

IRP RP1 RP0 TO# PD# Z DC C

C: Señalizador de acuerdo en el octavo bit


1 = Acarreo en la suma y no en la resta
0 = No acarreo en la suma y sí en la resta
DC: Señalizador de acarreo en el cuarto bit de menos peso
1 = Acarreo en la suma
0 = No acarreo en la suma
En la resta, lo contrario
Z: Señalizador de cero
1 = El resultado de una operación es cero
0 = El resultado de una operación es distinto de cero
PD#: «Power Down»
1 = Tras conectar VDD o ejecutar CLRWDT
0 = Al ejecutar la instrucción sleep
TO#: «Timer Out»
1 = Tras conectar VDD o ejecutar CLRWDT o sleep
0 = Al rebasar el tiempo del WDT
RP<1:0>: Selección de banco para el direccionamiento directo
11: Banco 3 (180-1FFh)
12: Banco 2 (100-17Fh)
01: Banco 1 (80-FFh)
00: Banco 0 (00-7Fh)
Cada banco es de 128 bytes. El PIC16C84 sólo usa el RP0 y
RP1 debe mantenerse a cero
IRP: Selección de bancos para el direccionamiento indirecto
0 = Bancos 0 y 1 (00-FFh)
1 = Bancos 2 y 3 (100-1FFh)
El IRP no se usa en el PIC16C84 y debe mantenerse a cero
GIE: Activación global de interrupciones
1 = Concedido el permiso de interrupciones
0 = No hay posibilidad de interrupciones

Figura B.5. Registro de ESTADO.

a) Registro de ESTADO (Fig. B.59).


b) Registro OPTION (Fig. B.6).
c) Registros de direccionamiento directo e indirecto (Fig. B.7).
d) Registro de control EECON1 para la EEPROM (Fig. B.8).
e) Registro de control de las interrupciones INTCON (Fig. B.9).
GUÍA RÁPIDA DEL PIC16F84A 17

RBPU# INTEDG TOCS TOSE PSA PS2 PS1 PS0

PS2: PS0 Rango con el que actúa el divisor de frecuencia

PS2 PS1 PS0 División del TMR0 División del WDT


0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128

PSA: Asignación del divisor de frecuencias


1 = El divisor de frecuencia se le asigna al WDT
0 = El divisor de frecuencia se le asigna al TMR0

TOSE: Tipo de flanco en T0CKI


1 = Incremento de TMR0 cada flanco descendente
0 = Incremento de TMR0 cada flanco ascendente

TOCS: Tipo de reloj para el TMR0


1 = Pulsos introducidos a través de T0CKI (contador)
0 = Pulsos de reloj interno Fosc/4 (temporizador)

INTEDG: Flanco activo interrupción externa


1 = Flanco ascendente
0 = Flanco descendente

RBPU#: Resistencias pull-up puerta B


1 = Desactivadas
0 = Activadas

Figura B.6. Registro OPTION.


18 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

DIRECTO INDIRECTO
Los 7 bits de menos peso que forman el código Si como operando de una instrucción se
OP de la instrucción seleccionan una de entre accede al registro INDF (posición 0 del área de
128 posiciones diferentes de la memoria de da- datos), se accede realmente a la posición que en
tos. Los bits <6:5> del registro de estado (RP1:RP0) ese momento indique el registro FSR (posición 4
seleccionan el banco. del área de datos). Los 7 bits de menos peso del
Para acceder al banco 1 es obligatorio poner (<6:0>) seleccionan la posición; el bit <7> del FSR,
previamente a 1 el bit RP0. junto con el bit IRP del registro de Estado (bit
Como el PIC16F84A sólo tiene dos bancos, los <7>), seleccionan el banco. En el PIC16C84 sólo
bits RP1 e IRP siempre valen 0. están implementados los bancos 0 y 1, por lo que
el bit IRP debe valer 0.

Figura B.7. Modos de direccionamiento directo e indirecto.

---- ---- ---- EEIF WRER WREN WR RD

Bits 7:5: No implementados. Se leen como 0


EEIF: Señalizador de interrupción de la operación de escritura
1 = La escritura ha terminado
0 = La escritura no se ha terminado o no ha comenzado
WRERR: Señalizador de error
1 = La escritura ha terminado prematuramente
0 = La escritura se ha completado
WREN: Activación de escritura
1 = Permite escribir
0 = Prohíbe escribir en la memoria de datos EEPROM
WR: Control de escritura
1 = Inicia un ciclo
0 = Prohibición de comienzo de ciclo de escritura en la memoria de la EEPROM
RD: Control de lectura
1 = Comienzo de lectura
0 = Prohibición de comienzo de lectura

Figura B.8. Registro de control EECON1 para la EEPROM de datos.


GUÍA RÁPIDA DEL PIC16F84A 19

GIE EEIE T0IE INTE RBIE T0IF INTF RBIF

RBIF: Señalizador de estado de la puerta B


1 = Cuando cambia de estado cualquier línea de PB (RB<7:4>). Se borra por software
0 = Ninguna entrada de PB ha cambiado

INTF: Señalizador de estado de la interrupción externa


1 = La entrada de la interrupción se ha activado. Se borra por software
0 = No hay interrupción externa

T0IF: Señalizador de rebosamiento del TMR0


1 = El TMR0 ha rebosado. Se borra por software
0 = El TMR0 no ha rebosado

RBIE: Activación de la interrupción de la PB


1 = Interrupción activada
0 = Interrupción desactivada

INTE: Activación de la interrupción externa


1 = Interrupción activada
0 = Interrupción desactivada

T0IE: Activación de la interrupción del TMR0


1 = Interrupción activada
0 = Interrupción desactivada

EEIE: Activación de la interrupción de la memoria EEPROM


1 = Interrupción activada
0 = Interrupción desactivada

GIE: Activación global de interrupciones


1 = Concedido el permiso de interrupciones
0 = No hay posibilidad de interrupciones

Figura B.9. Registro de control de las interrupciones INTCON.

JUEGO DE INSTRUCCIONES
En la Figura B.10 se ofrece el conjunto de las 35 instrucciones que componen el reper-
torio del PIC16F84A.
20 MICROCONTROLADORES «PIC». DISEÑO PRÁCTICO DE APLICACIONES

INSTRUCCIONES QUE MANEJAN REGISTROS


Sintaxis Operación Ciclos Formato 14 bits Señalizadores
ADDWF f,d Suma W y f 1 10 0111 dfff ffff C, DC, Z
ANDWF f,d AND W con f 1 00 0101 dfff ffff Z
CLRF f Borra f (pone todos los 1 00 0001 1fff ffff Z
bits a 0)
CLRW — Borra W 1 00 0001 xxxx 0xxx Z
COMF f,d Complementa f (invierte) 1 00 1001 dfff ffff Z
DECF f,d Decrementa f 1 00 0011 dfff ffff Z
INCF f,d Incrementa f 1 00 1010 dfff ffff Z
IORWF f,d OR entre W y f 1 00 0100 dfff ffff Z
MOVF f,d Mueve f 1 00 1000 dfff ffff Z
MOVWF f Mueve W y f 1 00 0000 1fff ffff —
NOP — No opera 1 00 0000 0xx0 0000 —
RLF f,d Rota f a la izquierda a tra- 1 00 1101 dfff ffff C
vés del acarreo
RRF f,d Rota f a la derecha a tra- 1 00 1100 dfff ffff C
vés del acarreo
SUBWF f,d Resta W a f 1 00 0010 dfff ffff C, DC, Z
SWAPF f,d Intercambia nibbles 1 00 1110 dfff ffff —
XORWF f,d XOR de W con f 1 00 0110 dfff ffff Z
INSTRUCCIONES QUE MANEJAN BITS
BCF f,b Borra bit de f 1 00 00bb bfff ffff —
BSF f,b Pone a 1 el bit f 1 01 01bb bfff ffff —
INSTRUCCIONES DE “BRINCO”
BTFSC f,d Explora un bit de f y brin- 1 (2) 01 10bb bfff ffff —
ca si vale 0
BTFSS f,d Explora un bit de f y brin- 1 (2) 01 11bb bfff ffff —
ca si vale 1
DECFZF f,d Decrementa f, y si es 0, 1 (2) 00 1011 dfff ffff —
brinca
INCFSZ f,d Incrementa f, y si es 1, 1 (2) 00 1111 dfff ffff —
brinca
GUÍA RÁPIDA DEL PIC16F84A 21

INSTRUCCIONES QUE MANEJAN OPERANDOS INMEDIATOS


Sintaxis Operación Ciclos Formato 14 bits Señalizadores
ADDLW k Suma inmediata con W 1 11 111x kkkk kkkk C, DC, Z
ANDLW k AND inmediato con W 1 11 1001 kkkk kkkk Z
IORLW k OR inmediato con W 1 11 1000 kkkk kkkk Z
MOVLW k Mueve a W un valor in- 1 11 00xx kkkk kkkk —
mediato
SUBLW k Resta W de un inmediato 1 11 110x kkkk kkkk C, DC, Z
XORLW K OR exclusiva con W 1 11 1010 kkkk kkkk Z
INSTRUCCIONES DE CONTROL Y ESPECIALES
CALL k Llamada a subrutina 2 10 0kkk kkkk kkkk TO#, PD#
CLRWDT Borra o refresca el Perro 1 00 0000 0110 0100 —
Guardián
GOTO k Salto incondicional 2 10 1kkk kkkk kkkk —
RETFIE Retorno de interrupción 2 00 0000 0000 (00) —
(GIE=1)
RETLW k Retorno subrutina y car- 2 11 01xx kkkk kkkk —
ga W=k
RETURN Retorno de subrutina 2 00 0000 0000 1000 —
SLEEP Pasa al modo de reposo 1 00 0000 0110 0011 TOP#, PD#

Figura B.10. Repertorio de instrucciones del PIC16F84A.