Está en la página 1de 41

1.

0 DESCRIPCIÓN GENERAL DEL DISPOSITIVO Este documento contiene información específica del
dispositivo para el funcionamiento del dispositivo PIC16F84A. Puede encontrar información
adicional en el Manual de referencia de rango medio de PICmicro ™, (DS33023), que puede
descargarse del sitio web de Microchip. El Manual de referencia debe considerarse un
documento complementario a esta hoja de datos y se recomienda su lectura para comprender
mejor la arquitectura del dispositivo y el funcionamiento de los módulos periféricos. El
PIC16F84A pertenece a la familia de gama media de dispositivos microcontroladores
PICmicro®. En la Figura 1-1 se muestra un diagrama de bloques del dispositivo.

La memoria de programa contiene 1K palabras, lo que se traduce en 1024 instrucciones, ya que


cada palabra de memoria de programa de 14 bits tiene el mismo ancho que cada instrucción de
dispositivo. La memoria de datos (RAM) contiene 68 bytes. La EEPROM de datos es de 64 bytes.
También hay 13 pines de E / S configurados por el usuario pin a pin. Algunos pines están
multiplexados con otras funciones del dispositivo. Estas funciones incluyen:

• Interrupción externa

• Cambio en interrupción PORTB

• Entrada de reloj Timer0

La Tabla 1-1 detalla la distribución de pines del dispositivo con descripciones y detalles para cada
pin.

FIGURA 1-1: DIAGRAMA DE BLOQUES PIC16F84A

TABLA 1-1: DESCRIPCIÓN DEL PINOUT DE PIC16F84A

Nombre de PDIP SOIC SSOP I/O/ Buffer Type Descripción


PIN No. No. No. P
Type
OSC1/CLKIN 16 16 18 I ST/CMOS(3) Entrada de cristal del oscilador /
entrada de fuente de reloj
externa.
OSC2/CLKOU 15 15 19 O — Salida de cristal oscilador. Se
T conecta a cristal o resonador en
modo Oscilador de cristal. En el
modo RC, el pin OSC2 emite
CLKOUT, que tiene 1/4 de la
frecuencia de OSC1 y denota la
frecuencia del ciclo de instrucción.
MCLR 4 4 4 I/P ST Entrada de borrado maestro
(reinicio) / entrada de voltaje de
programación. Este pin es un
RESET activo bajo para el
dispositivo.
PORTA es un puerto de E / S
bidireccional.
RA0 17 17 19 I/O TTL
RA1 18 18 20 I/O TTL
.RA2 1 1 1 I/O TTL
RA3 2 2 2 I/O TTL
RA4/T0CKI 3 3 3 I/O ST
También se puede seleccionar
como entrada de reloj al
temporizador / contador TMR0. La
salida es del tipo de drenaje
abierto.
PORTB es un puerto de E / S
bidireccional. PORTB se puede
programar por software para un
pull-up interno débil en todas las
entradas.
RB0/INT 6 6 7 I/O TTL/ST(1) RB0 / INT también se puede
RB1 7 7 8 I/O TTL seleccionar como un pin de
RB2 8 8 9 I/O TTL interrupción externo.
RB3 9 9 10 I/O TTL

RB4 10 10 11 I/O TTL Pin de interrupción al cambiar.


RB5 11 11 12 I/O TTL Pin de interrupción al cambiar.
RB6 12 12 13 I/O TTL/ST(2) Pin de interrupción al cambiar.
Reloj de programación en serie.
RB7 13 13 14 I/O TTL/ST(2) Pin de interrupción al cambiar.
Datos de programación en serie
VSS 5 5 5,6 P — Referencia de tierra para pines
lógicos y de E / S.
VDD 14 14 15,16 P — Suministro positivo para pines
lógicos y de E / S
Leyenda:

I = entrada O = salida I / O = entrada / salida P = potencia


- = No se utiliza TTL = Entrada TTL ST = Entrada de disparador Schmitt

Nota

1: Este búfer es una entrada de disparador Schmitt cuando se configura como interrupción
externa.

2: Este búfer es una entrada de disparador Schmitt cuando se usa en el modo de programación en
serie.

3: Este búfer es una entrada de disparador Schmitt cuando se configura en modo de oscilador RC y
una entrada CMOS de lo contrario

2.0 ORGANIZACIÓN DE LA MEMORIA Hay dos bloques de memoria en el PIC16F84A. Estos son la
memoria del programa y la memoria de datos. Cada bloque tiene su propio bus, por lo que el
acceso a cada bloque puede ocurrir durante el mismo ciclo de oscilador.
La memoria de datos se puede dividir además en la RAM de uso general y los registros de
funciones especiales (SFR). El funcionamiento de los SFR que controlan el "núcleo" se describe
aquí. Los SFR utilizados para controlar los módulos periféricos se describen en la sección que
analiza cada módulo periférico individual.
El área de memoria de datos también contiene la memoria EEPROM de datos. Esta memoria
no se asigna directamente a la memoria de datos, sino que se asigna indirectamente. Es decir,
un puntero de dirección indirecta especifica la dirección de la memoria EEPROM de datos para
leer / escribir. Los 64 bytes de memoria EEPROM de datos tienen el rango de direcciones 0h-
3Fh. Se pueden encontrar más detalles sobre la memoria EEPROM en la Sección 3.0.
Se puede encontrar información adicional sobre la memoria del dispositivo en el Manual de
referencia de rango medio de PICmicro ™, (DS33023).

2.1 Organización de la memoria del programa El PIC16FXX tiene un contador de programa de 13


bits capaz de direccionar un espacio de memoria de programa de 8K x 14. Para el PIC16F84A, los
primeros 1K x 14 (0000h-03FFh) se implementan físicamente (Figura 2-1). Acceder a una ubicación
por encima de la dirección implementada físicamente provocará una conexión. Por ejemplo, para
las ubicaciones 20h, 420h, 820h, C20h, 1020h, 1420h, 1820h y 1C20h, la instrucción será la misma.
El vector RESET está en 0000h y el vector de interrupción está en 0004h.

2.2 Organización de la memoria de datos La memoria de datos está dividida en dos áreas. El
primero es el área de Registros de funciones especiales (SFR), mientras que el segundo es el área
de Registros de propósito general (GPR). Los SFR controlan el funcionamiento del dispositivo.

Se almacenan partes de la memoria de datos. Esto es tanto para el área SFR como para el área
GPR. El área de GPR está almacenada para permitir más de 116 bytes de RAM de uso general. Las
áreas bancarias del SFR son para los registros que controlan las funciones periféricas. La actividad
bancaria requiere el uso de bits de control para la selección de bancos. Estos bits de control se
encuentran en el registro de ESTADO. La Figura 2-2 muestra la organización del mapa de la
memoria de datos.

Las instrucciones MOVWF y MOVF pueden mover valores del registro W a cualquier ubicación en
el archivo de registro ("F") y viceversa.
Se puede acceder a toda la memoria de datos directamente usando la dirección absoluta de cada
archivo de registro o indirectamente a través del Registro de selección de archivo (FSR) (Sección
2.5). El direccionamiento indirecto utiliza el valor actual del bit RP0 para acceder a las áreas
almacenadas de la memoria de datos.

La memoria de datos está dividida en dos bancos que contienen los registros de propósito general
y los registros de funciones especiales. El banco 0 se selecciona borrando el bit RP0 (ESTADO). La
configuración del bit RP0 selecciona el banco 1. Cada banco se extiende hasta 7Fh (128 bytes). Las
primeras doce ubicaciones de cada banco están reservadas para los registros de funciones
especiales. El resto son registros de propósito general, implementados como RAM estática.

2.2.1 ARCHIVO DE REGISTRO DE PROPÓSITO GENERAL Cada Registro de Propósito General (GPR)
tiene un ancho de 8 bits y se accede directamente o indirectamente a través del FSR (Sección 2.5).
Las direcciones GPR en el Banco 1 se asignan a las direcciones en el Banco 0. Como ejemplo, la
ubicación de direccionamiento 0Ch o 8Ch accederá al mismo GPR

2.3 Registros de funciones especiales Los registros de funciones especiales (Figura 2-2 y Tabla 2-1)
son utilizados por la CPU y el periférico funciones para controlar el funcionamiento del dispositivo.
Estos los registros son RAM estática. Los registros de funciones especiales se pueden clasificar en
dos conjuntos, núcleo y periférico. Los asociados con las funciones básicas se describen en esta
sección. Los relacionados con el funcionamiento de las funciones periféricas se describen en la
sección correspondiente a esa función específica.

TABLA 2-1: RESUMEN DEL ARCHIVO DE REGISTRO DE FUNCIONES ESPECIALES

Leyenda: x = desconocido, u = sin cambios. - = no implementado, leído como '0', q = el valor


depende de la condición Nota 1: No se puede acceder directamente al byte superior del contador
del programa. PCLATH es un registro esclavo para PC. El contenido de PCLATH se puede transferir
al byte superior del contador del programa, pero el contenido de PC nunca se transfiere a PCLATH.
2: Los bits de estado TO y PD en el registro STATUS no se ven afectados por un reinicio de MCLR. 3:
Otros RESET (sin encendido) incluyen: RESET externo a través de MCLR y el Reset del temporizador
Watchdog. 4: En cualquier dispositivo RESET, estos pines se configuran como entradas. 5: Este es
el valor que estará en el pestillo de salida del puerto.

2.3.1 REGISTRO DE ESTADO El registro de ESTADO contiene el estado aritmético de la ALU, el


estado de RESET y el bit de selección de banco para la memoria de datos. Como ocurre con
cualquier registro, el registro STATUS puede ser el destino de cualquier instrucción. Si el registro
STATUS es el destino de una instrucción que afecta a los bits Z, DC o C, entonces la escritura en
estos tres bits está deshabilitada. Estos bits se establecen o borran de acuerdo con la lógica del
dispositivo. Además, los bits TO y PD no se pueden escribir. Por lo tanto, el resultado de una
instrucción con el registro STATUS como destino puede ser diferente al esperado. Por ejemplo,
CLRF STATUS borrará los tres bits superiores y establecerá el bit Z. Esto deja el registro de ESTADO
como 000u u1uu (donde u = sin cambios). Solo las instrucciones BCF, BSF, SWAPF y MOVWF deben
usarse para alterar el registro STATUS (Tabla 7-2), porque estas instrucciones no afectan ningún bit
de estado.

Nota 1: Los bits IRP y RP1 (ESTADO) no son utilizados por el PIC16F84A y deben programarse como
borrados. NO se recomienda el uso de estos bits como bits R / W de propósito general, ya que esto
puede afectar la compatibilidad ascendente con productos futuros. 2: Los bits C y DC operan como
un bit de préstamo y un bit de préstamo de dígitos, respectivamente, en la resta. Consulte las
instrucciones SUBLW y SUBWF para ver ejemplos. 3: Cuando el registro STATUS es el destino de
una instrucción que afecta a los bits Z, DC o C, la escritura en estos tres bits está deshabilitada. Los
bits especificados se actualizarán de acuerdo con la lógica del dispositivo.

REGISTRO 2-1: REGISTRO DE ESTADO (DIRECCIÓN 03h, 83h)

bit 7-6 No implementado: mantener como "0"

bit 5 RP0: Bits de selección de banco de registro (utilizados para direccionamiento directo)

01 = Banco 1 (80h - FFh)

00 = Banco 0 (00h - 7Fh)

bit 4 TO: bit de tiempo de espera

1 = Después del encendido, instrucción CLRWDT o instrucción SLEEP

0 = Ocurrió un tiempo de espera de WDT

bit 3 PD: bit de apagado

1 = Después del encendido o por la instrucción CLRWDT

0 = Por ejecución de la instrucción SLEEP

bit 2 Z: bit cero

1 = El resultado de una operación aritmética o lógica es cero


0 = El resultado de una operación aritmética o lógica no es cero

bit 1 DC: bit de llevar / pedir prestado de dígitos (instrucciones ADDWF, ADDLW, SUBLW, SUBWF)
(para tomar prestado, la polaridad está invertida)

1 = Ocurrió una ejecución desde el cuarto bit de orden inferior del resultado

0 = Sin ejecución desde el cuarto bit de orden inferior del resultado

bit 0 C: bit de llevar / pedir prestado (instrucciones ADDWF, ADDLW, SUBLW, SUBWF) (para tomar
prestado, la polaridad está invertida)

1 = Ocurrió una ejecución del bit más significativo del resultado

0 = No se ha llevado a cabo el bit más significativo del resultado.

Nota: Una resta se ejecuta sumando el complemento a dos del segundo operando. Para las
instrucciones de rotación (RRF, RLF), este bit se carga con el bit de orden superior o inferior del
registro fuente.

Leyenda:

R = bit legible W = bit escribible U = bit no implementado, leído como "0"

- n = Valor en POR '1' = El bit se establece en '0' = El bit se borra x = El bit es desconocido

2.3.2 REGISTRO DE OPCIONES El registro de OPCIONES es un registro de lectura y escritura que


contiene varios bits de control para configurar el preescalador TMR0 / WDT, la interrupción INT
externa, TMR0 y los pull-ups débiles en PORTB.

Nota: cuando el preescalador está asignado a el WDT (PSA = ’1’), TMR0 tiene un 1: 1 asignación de
preescalador.

REGISTRO 2-2: OPCIÓN REGISTRO (DIRECCIÓN 81h)

bit 7 RBPU: PORTB Pull-up Enable bit

1 = las dominadas PORTB están deshabilitadas

0 = Los pull-ups de PORTB se habilitan mediante valores de pestillo de puerto individuales

bit 6 INTEDG: Bit de selección de borde de interrupción

1 = Interrupción en el flanco ascendente del pin RB0 / INT

0 = Interrupción en el flanco descendente del pin RB0 / INT

bit 5 T0CS: Bit de selección de fuente de reloj TMR0


1 = Transición en el pin RA4 / T0CKI

0 = Reloj de ciclo de instrucción interno (CLKOUT)

bit 4 T0SE: Bit de selección de borde de origen TMR0

1 = Incremento en la transición de alto a bajo en el pin RA4 / T0CKI

0 = Incremento en la transición de bajo a alto en el pin RA4 / T0CKI

bit 3 PSA: bit de asignación de preescalador

1 = Prescaler está asignado al WDT

0 = Prescaler está asignado al módulo Timer0

bit 2-0 PS2: PS0: bits de selección de frecuencia de preescalador

Leyenda:

R = bit legible W = bit escribible U = bit no implementado, leído como "0"

- n = Valor en POR '1' = El bit se establece en '0' = El bit se borra x = El bit es desconocido

2.3.3 REGISTRO INTCON El registro INTCON es un registro que se puede leer y escribir y que
contiene los diversos bits de habilitación para todas las fuentes de interrupción.

Nota: Los bits de bandera de interrupción se establecen cuando ocurre una condición de
interrupción, independientemente del estado de su bit de habilitación correspondiente o del bit
de habilitación global, GIE (INTCON).

REGISTRO 2-3: REGISTRO INTCON (DIRECCIÓN 0Bh, 8Bh)

bit 7 GIE: bit de habilitación de interrupción global

1 = Habilita todas las interrupciones desenmascaradas

0 = Deshabilita todas las interrupciones

bit 6 EEIE: EE Write Complete Interrupt Enable bit

1 = Habilita las interrupciones EE Write Complete

0 = Deshabilita la interrupción EE Write Complete

bit 5 T0IE: Bit de habilitación de interrupción de desbordamiento TMR0

1 = Habilita la interrupción TMR0


0 = Deshabilita la interrupción TMR0

bit 4 INTE: RB0 / INT Bit de habilitación de interrupción externa

1 = Habilita la interrupción externa RB0 / INT

0 = Deshabilita la interrupción externa RB0 / INT

bit 3 RBIE: Bit de habilitación de interrupción de cambio de puerto RB

1 = Habilita la interrupción de cambio de puerto RB

0 = Desactiva la interrupción de cambio de puerto RB

bit 2 T0IF: Bit de indicador de interrupción de desbordamiento TMR0

1 = El registro TMR0 se ha desbordado (debe borrarse en el software)

0 = El registro TMR0 no se desbordó

bit 1 INTF: RB0 / INT Bit de indicador de interrupción externa

1 = Ocurrió la interrupción externa RB0 / INT (debe borrarse en el software)

0 = No se produjo la interrupción externa RB0 / INT

bit 0 RBIF: Bit de bandera de interrupción de cambio de puerto RB

1 = Al menos uno de los pines RB7: RB4 cambió de estado (debe borrarse en el software)

0 = Ninguno de los pines RB7: los pines RB4 han cambiado de estado

Leyenda:

R = bit legible W = bit escribible U = bit no implementado, leído como "0"

- n = Valor en POR '1' = El bit se establece en '0' = El bit se borra x = El bit es desconocido

2.4 PCL y PCLATH El contador de programa (PC) especifica la dirección de la instrucción a


buscar para su ejecución. La PC tiene 13 bits de ancho. El byte bajo se llama registro PCL.
Este registro se puede leer y escribir. El byte alto se llama registro PCH. Este registro
contiene los bits de la PC y no se puede leer ni escribir directamente. Si se modifica el
contador de programa (PC) o una prueba condicional es verdadera, la instrucción requiere
dos ciclos. El segundo ciclo se ejecuta como NOP. Todas las actualizaciones del registro
PCH pasan por el registro PCLATH.

2.4.1 PILA La pila permite que ocurra una combinación de hasta 8 llamadas de programa e
interrupciones. La pila contiene la dirección de retorno de esta rama en la ejecución del
programa. Los dispositivos de gama media tienen una pila de hardware de 8 niveles de
profundidad x 13 bits de ancho. El espacio de la pila no es parte del programa ni del
espacio de datos y el puntero de la pila no se puede leer ni escribir. La PC se PUSHE a la
pila cuando se ejecuta una instrucción CALL o una interrupción provoca una bifurcación. La
pila se hace POP en caso de ejecución de una instrucción RETURN, RETLW o RETFIE.
PCLATH no se modifica cuando la pila es PUSHed o POPed. Después de que la pila se haya
PUSHADO ocho veces, la novena inserción sobrescribe el valor que se almacenó desde la
primera inserción. La décima pulsación sobrescribe la segunda pulsación (y así
sucesivamente).

2.5 Direccionamiento indirecto; Registros INDF y FSR El registro INDF no es un registro


físico. El direccionamiento de INDF en realidad se dirige al registro cuya dirección está
contenida en el registro FSR (FSR es un puntero). Este es un direccionamiento indirecto.

EJEMPLO 2-1: DIRECCIÓN INDIRECTA

• El archivo de registro 05 contiene el valor 10h

• El archivo de registro 06 contiene el valor 0Ah

• Cargue el valor 05 en el registro FSR

• Una lectura del registro INDF devolverá el valor de 10h

• Incrementar el valor del registro FSR en uno (FSR = 06)

• Una lectura del registro INDF ahora devolverá el valor de 0Ah.

La lectura del INDF en sí mismo indirectamente (FSR = 0) producirá 00h. La escritura en el


registro INDF da como resultado indirectamente una no operación (aunque los bits
STATUS pueden verse afectados). En el Ejemplo 2-2 se muestra un programa simple para
borrar las ubicaciones de RAM 20h-2Fh usando direccionamiento indirecto.

EJEMPLO 2-2: CÓMO BORRAR LA RAM CON DIRECCIÓN INDIRECTA

Una dirección efectiva de 9 bits se obtiene concatenando el registro FSR de 8 bits y el bit
IRP (ESTADO), como se muestra en la Figura 2-3. Sin embargo, IRP no se usa en el
PIC16F84A.

FIGURA 2-3: DIRECCIÓN DIRECTA / INDIRECTA


Nota 1: Para obtener detalles del mapa de memoria, consulte la Figura 2-2.

2: Manténgase tan claro para compatibilidad ascendente con productos futuros.

3: No implementado

3.0 MEMORIA EEPROM DE DATOS La memoria de datos EEPROM se puede leer y escribir durante
el funcionamiento normal (rango completo de VDD). Esta memoria no está mapeada
directamente en el espacio de archivo de registro. En su lugar, se trata indirectamente a través
de los registros de funciones especiales. Se utilizan cuatro SFR para leer y escribir esta
memoria. Estos registros son:
• EECON1
• EECON2 (no es un registro implementado físicamente)
• EEDATA
• EEADR
EEDATA contiene los datos de 8 bits para lectura / escritura, y EEADR contiene la dirección de
la ubicación EEPROM a la que se accede. Los dispositivos PIC16F84A tienen 64 bytes de
EEPROM de datos con un rango de direcciones de 0h a 3Fh.

La memoria de datos EEPROM permite la lectura y escritura de bytes. Una escritura de byte
borra automáticamente la ubicación y escribe los nuevos datos (borrar antes de escribir). La
memoria de datos EEPROM está clasificada para ciclos altos de borrado / escritura. El tiempo
de escritura está controlado por un temporizador en chip. El tiempo de escritura variará con el
voltaje y la temperatura, así como de un chip a otro. Consulte las especificaciones de CA para
conocer los límites exactos.
Cuando el dispositivo está protegido por código, la CPU puede continuar leyendo y escribiendo
la memoria EEPROM de datos. El programador del dispositivo ya no puede acceder a esta
memoria.
Información adicional sobre la EEPROM de datos está disponible en el Manual de referencia
de rango medio de PICmicro ™ (DS33023).
REGISTRO 3-1: REGISTRO EECON1 (DIRECCIÓN 88h)

bit 7-5 No implementado: leído como '0

bit 4 EEIF: Bit de indicador de interrupción de operación de escritura EEPROM


1 = La operación de escritura se completó (debe borrarse en el software)
0 = La operación de escritura no está completa o no se ha iniciado.

bit 3 WRERR: bit indicador de error EEPROM

1 = Una operación de escritura finaliza prematuramente (cualquier reinicio de MCLR o


cualquier reinicio de WDT durante el funcionamiento normal)

0 = La operación de escritura se completó

bit 2 WREN: Bit de habilitación de escritura EEPROM

1 = permite ciclos de escritura

0 = inhibe la escritura en la EEPROM

bit 1 WR: bit de control de escritura

1 = Inicia un ciclo de escritura. El hardware borra el bit una vez que se completa la
escritura. El bit WR solo se puede configurar (no borrar) en el software.

0 = El ciclo de escritura en la EEPROM está completo

bit 0 RD: Leer bit de control

1 = Inicia una lectura de EEPROM. RD se borra en el hardware. El bit RD solo se puede


establecer (no borrado) en el software.

0 = No inicia una lectura EEPROM

Leyenda:

R = bit legible W = bit escribible U = bit no implementado, leído como "0"

- n = Valor en POR '1' = El bit se establece en '0' = El bit se borra x = El bit es desconocido

3.1 Lectura de la memoria de datos EEPROM

Para leer una ubicación de la memoria de datos, el usuario debe escribir la dirección en el registro
EEADR y luego establecer el bit de control RD (EECON1). Los datos están disponibles, en el ciclo
siguiente, en el registro EEDATA; por lo tanto, se puede leer en la siguiente instrucción. EEDATA
mantendrá este valor hasta otra lectura o hasta que el usuario lo escriba (durante una operación
de escritura

EJEMPLO 3-1: LECTURA EEPROM DE DATOS

BCF STATUS, RP0 ; Banco 0

MOVLW CONFIG_ADDR ;

MOVWF EEADR ; Dirección para leer

BSF STATUS, RP0 ; Banco 1

BSF EECON1, RD ; EE leer

BCF STATUS, RP0 ; Banco 0

MOVF EEDATA, W ; W = EEDATA

3.2 Escritura de datos EEPROM Memoria

Para escribir una ubicación de datos EEPROM, el usuario primero debe escribir la dirección en el
registro EEADR y los datos en el registro EEDATA. Luego, el usuario debe seguir una secuencia
específica para iniciar la escritura de cada byte.

EJEMPLO 3-2: ESCRITURA DE DATOS EEPROM

BSF STATUS, RP0 ; Banco 1

BCF INTCON, GIE ; Deshabilitar INT.

BSF EECON1, WREN ; Habilitar escritura

MOVLW 55h ;

MOVWF EECON2 ; Escribir 55h

MOVLW AAh ;

MOVWF EECON2 ; Escribe AAh


Secuencia requerida

BSF EECON1,WR ; Establecer bit WR

; empezar a escribir

BSF INTCON, GIE ; Habilitar INT.

La escritura no se iniciará si la secuencia anterior no se sigue exactamente (escriba 55h en


EECON2, escriba AAh en EECON2, luego establezca el bit WR) para cada byte. Recomendamos
encarecidamente que las interrupciones se deshabiliten durante este segmento de código.

Además, el bit WREN en EECON1 debe establecerse para habilitar la escritura. Este mecanismo
evita escrituras accidentales en la EEPROM de datos debido a la ejecución de código erróneo
(inesperado) (es decir, programas perdidos). El usuario debe mantener el bit WREN limpio en todo
momento, excepto cuando actualice EEPROM. El hardware no borra el bit WREN.

Después de que se haya iniciado una secuencia de escritura, borrar el bit WREN no afectará este
ciclo de escritura. El bit WR no podrá establecerse a menos que se establezca el bit WREN.

Al finalizar el ciclo de escritura, el bit WR se borra en el hardware y se establece el bit indicador de


interrupción de escritura completa de EE (EEIF). El usuario puede habilitar esta interrupción o
sondear este bit. EEIF debe borrarse mediante software.

3.3 Verificación de escritura

Dependiendo de la aplicación, las buenas prácticas de programación pueden dictar que el valor
escrito en la EEPROM de datos debe verificarse (Ejemplo 3-3) con el valor deseado que se va a
escribir. Esto debe usarse en aplicaciones donde un bit EEPROM se estresará cerca del límite de
especificación.

Generalmente, la falla de escritura de EEPROM será un bit que se escribió como un "0", pero se lee
como un "1" (debido a una fuga del bit).

EJEMPLO 3-3: Verificación de escritura

BCF STATUS,RP0 ; Banco 0

: ; Cualquier código puede ir aquí

MOVF EEDATA,W ; Debe estar en el banco 0

BSF STATUS,RP0 ; Banco 1

READ

BSF EECON1, RD ; SÍ, lea el valor escrito

BCF STATUS, RP0 ; Bano 0

; ¿El valor escrito (en W reg) y leído (en EEDATA) es el mismo?

SUBWF EEDATA, W ;

BTFSS STATUS, Z ; ¿La diferencia es 0?

GOTO WRITE_ERR ; NO, error de escritura

TABLA 3-1: REGISTROS / BITS ASOCIADOS CON EEPROM DE DATOS


Direcció Nombr Bit 7 Bit Bit Bit Bit 3 Bit 2 Bit Bit Valor en Valor en
n e 6 5 4 1 0 el reinicio todos los
de demás
encendid RESET
o
08h EEDATA Datos de registro EEPROM xxxx xxxx uuuu uuuu
09h EEADR Registro de direcciones EEPROM xxxx xxxx uuuu uuuu
88h EECON1 — — — EEI WRERR WRE WR RD ---0 x000 ---0 q000
F N
89h EECON2 Registro de control EEPROM 2 ---- ---- ---- ----

Leyenda: x = desconocido, u = sin cambios, - = sin implementar, leído como '0', q = el valor
depende de la condición.

Las celdas sombreadas no son utilizadas por la EEPROM de datos.

4.0 PUERTOS DE E / S

Algunos pines para estos puertos de E / S están multiplexados con una función alternativa para las
funciones periféricas del dispositivo. En general, cuando un periférico está habilitado, ese pin no
se puede utilizar como un pin de E / S de propósito general.

Puede encontrar información adicional sobre los puertos de E / S en el Manual de referencia de


rango medio de PICmicro ™ (DS33023).

4.1 Registros PORTA y TRISA

PORTA es un puerto bidireccional de 5 bits de ancho. El registro de dirección de datos


correspondiente es TRISA. Establecer un bit TRISA (= 1) hará que el pin PORTA correspondiente sea
una entrada (es decir, pondrá el controlador de salida correspondiente en un modo de alta
impedancia). Borrar un bit TRISA (= 0) hará que el pin PORTA correspondiente sea una salida (es
decir, pondrá el contenido del pestillo de salida en el pin seleccionado)

Nota: En un reinicio de encendido, estos pines se configuran como entradas y se leen como '0'.

La lectura del registro PORTA lee el estado de los pines, mientras que escribir en él escribirá en el
pestillo del puerto. Todas las operaciones de escritura son operaciones de lectura-modificación-
escritura. Por lo tanto, una escritura en un puerto implica que se leen los pines del puerto. Este
valor se modifica y luego se escribe en el pestillo de datos del puerto.

El pin RA4 se multiplexa con la entrada de reloj del módulo Timer0 para convertirse en el pin RA4 /
T0CKI. El pin RA4 / T0CKI es una entrada de disparador Schmitt y una salida de drenaje abierta.
Todos los demás pines del puerto RA tienen niveles de entrada TTL y controladores de salida
CMOS completos

EJEMPLO 4-1: INICIALIZANDO PORTA


BCF STATUS, RP0 ;

CLRF PORTA ; Inicialice PORTA borrando los pestillos de datos de salida

BSF STATUS, RP0 ; Seleccione el banco 1

MOVLW 0x0F ; Valor utilizado para inicializar la dirección de los datos

MOVWF TRISA ; Establecer RA <3: 0> como entradas RA4 como salida

; TRISA <7: 5> siempre se leen como '0'.

FIGURA 4-1: DIAGRAMA FIGURA 4-2: DIAGRAMA DE BLOQUES DEL PIN RA4

DE BLOQUE DE PINS RA3: RA0

Nota: los pines de E / S tienen diodos Nota: los pines de E / S tienen diodos de

de protección para VDD y VSS protección para VDD y VSS.

TABLA 4-1: FUNCIONES PORTA

Nombre Bit0 Tipo de búfer Función


RA0 bit0 TTL De entrada y salida
RA1 Bit1 TTL De entrada y salida
RA2 Bit2 TTL De entrada y salida
RA3 Bit3 TTL De entrada y salida
RA4/T0CK Bit4 ST Entrada / salida o entrada de reloj externo para TMR0.
I La salida es del tipo de drenaje abierto.
Leyenda: TTL = entrada TTL, ST = entrada de disparador Schmitt

TABLA 4-2: RESUMEN DE REGISTROS ASOCIADOS CON PORTA


Dirección Nombre Bit 7 Bit 6 Bit Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en Valor en
5 el reinicio todos los
de demás
encendid RESET
o

05h PORTA — — — RA4/T0CKI RA3 RA2 RA1 RA0 ---x xxxx ---u uuuu

85h TRISA — — — TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 ---1 1111 ---1 1111

Leyenda: x = desconocido, u = sin cambios, - = sin implementar, leído como '0'.

Las celdas sombreadas no están implementadas, se leen como '0'.

4.2 Registros PORTB y TRISB

PORTB es un puerto bidireccional de 8 bits de ancho. El registro de dirección de datos


correspondiente es TRISB. Establecer un bit TRISB (= 1) hará que el pin PORTB correspondiente sea
una entrada (es decir, pondrá el controlador de salida correspondiente en un modo de alta
impedancia). Borrar un bit TRISB (= 0) hará que el pin PORTB correspondiente sea una salida (es
decir, pondrá el contenido del pestillo de salida en el pin seleccionado).

EJEMPLO 4-2: INICIALIZAR PORTB

BCF STATUS, RP0 ;

CLRF PORTB ; Inicialice PORTB borrando los pestillos de datos de salida

BSF STATUS, RP0 ; Seleccione el banco 1

MOVLW 0xCF ; Valor utilizado para inicializar la dirección de los datos

MOVWF TRISB ; Establecer RB <3: 0> como entradas RB <5: 4> como salidas

; RB <7:6> como entradas

Cada uno de los pines PORTB tiene un pull-up interno débil. Un solo bit de control puede activar
todas las dominadas. Esto se realiza borrando el bit RBPU (OPCIÓN <7>). El pull-up débil se apaga
automáticamente cuando el pin del puerto se configura como salida. Las dominadas se desactivan
en un reinicio de encendido.

Cuatro de los pines de PORTB, RB7: RB4, tienen una función de interrupción al cambiar. Solo los
pines configurados como entradas pueden provocar esta interrupción (es decir, cualquier pin RB7:
RB4 configurado como salida se excluye de la comparación de interrupción al cambiar). Los pines
de entrada (de RB7: RB4) se comparan con el valor anterior enganchado en la última lectura de
PORTB. Las salidas de "desajuste" de RB7: RB4 se combinan en OR para generar la interrupción de
cambio de puerto RB con el bit de bandera RBIF (INTCON <0>).

Esta interrupción puede despertar al dispositivo de SLEEP. El usuario, en la rutina de servicio de


interrupción, puede borrar la interrupción de la siguiente manera:

a) Cualquier lectura o escritura de PORTB. Esto pondrá fin a la condición de falta de coincidencia.

b) Borrar el bit de bandera RBIF.

Una condición de discordancia continuará estableciendo el bit de bandera RBIF. La lectura de


PORTB terminará la condición de discordancia y permitirá que se borre el bit de bandera RBIF. La
función de interrupción al cambiar se recomienda para la activación al presionar una tecla y las
operaciones en las que PORTB solo se usa para la función de interrupción del cambio. No se
recomienda el sondeo de PORTB mientras se usa la función de interrupción al cambiar.

FIGURA 4-3: DIAGRAMA DE FIGURA 4-4: DIAGRAMA DE BLOQUE DE PINS RB3: RB0

BLOQUE DE PINS RB7: RB4

Nota Nota

1: TRISB = ’1’ habilita un pull-up débil 1: TRISB = ’1’ habilita un pull-up débil

(si RBPU = ’0’ en el registro OPTION_REG). (si RBPU = ’0’ en el registro OPTION_REG).

2: Los pines de E / S tienen protección de 2: Los pines de E / S tienen protección de

diodos para VDD y VSS. diodos para VDD y VSS.


TABLA 4-3: FUNCIONES PORTB

Nombre Bit0 Tipo de búfer Función de coherencia de E / S


RB0/INT Bit0 TTL/ST(1) Pin de entrada / salida o entrada de interrupción externa.
Pull-up débil programable por software interno.
RB1 Bit1 TTL Pin de entrada/salida. Pull-up débil programable por
software interno.

RB2 Bit2 TTL Pin de entrada / salida. Pull-up débil programable por
software interno.
RB3 Bit3 TTL Pin de entrada / salida. Pull-up débil programable por
software interno.

RB4 Bit4 TTL Pin de entrada / salida (con interrupción al cambiar).


Pull-up débil programable por software interno.

RB5 Bit5 TTL Pin de entrada / salida (con interrupción al cambiar).


Pull-up débil programable por software interno.
RB6 Bit6 TTL/ST(2) Pin de entrada / salida (con interrupción al cambiar).
Pull-up débil programable por software interno. Reloj de
programación en serie.
RB7 Bit7 TTL/ST(2) Pin de entrada / salida (con interrupción al cambiar).
Pull-up débil programable por software interno. Datos de
programación en serie.
Leyenda: TTL = entrada TTL, ST = disparador Schmitt.

Nota

1: Este búfer es una entrada de disparador Schmitt cuando se configura como interrupción
externa.

2: Este búfer es una entrada de disparador Schmitt cuando se usa en el modo de programación en
serie.

TABLA 4-4: RESUMEN DE REGISTROS ASOCIADOS CON PORTB


Dirección Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en el Valor en
reinicio de todos los
encendido demás
RESET

06h PORTB RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0/INT xxxx xxxx uuuu uuuu

86h TRISB TRISB7 TRISB6 TRISB5 TRISB4 TRISB3 TRISB2 TRISB1 TRISB0 1111 1111 1111 1111

81h OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111

0Bh,8Bh INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u
Leyenda: x = desconocido, u = sin cambios. PORTB no utiliza las celdas sombreadas.
5.0 MÓDULO TIMER0

El temporizador / contador del módulo Timer0 tiene las siguientes características:

• temporizador / contador de 8 bits

• Legible y escribible

• Selección de reloj interno o externo

• Selección de borde para reloj externo

• Prescaler programable por software de 8 bits

• Interrupción por desbordamiento de FFh a 00h

La figura 5-1 es un diagrama de bloques simplificado del módulo Timer0.

Información adicional sobre los módulos de temporizador está disponible en el Manual de


referencia de rango medio de PICmicro ™ (DS33023).

5.1 Operación del Timer0

Timer0 puede funcionar como temporizador o como contador.

El modo de temporizador se selecciona borrando el bit T0CS (OPTION_REG <5>). En el modo


Timer, el módulo Timer0 incrementará cada ciclo de instrucción (sin prescaler). Si se escribe el
registro TMR0, el incremento se inhibe durante los siguientes dos ciclos de instrucción. El usuario
puede solucionar esto escribiendo un valor ajustado en el registro TMR0.

El modo de contador se selecciona configurando el bit T0CS (OPTION_REG <5>). En el modo


Contador, Timer0 se incrementará, ya sea en cada flanco ascendente o descendente del pin RA4 /
T0CKI. El flanco de incremento está determinado por el bit de selección de flanco de origen de
Timer0, T0SE (OPTION_REG <4>). El bit de borrado T0SE selecciona el borde ascendente. Las
restricciones en la entrada del reloj externo se analizan a continuación.

Cuando se utiliza una entrada de reloj externo para Timer0, debe cumplir con ciertos requisitos.
Los requisitos garantizan que el reloj externo se pueda sincronizar con el reloj de fase interno
(TOSC). Además, existe un retraso en el incremento real de Timer0 después de la sincronización.

Información adicional sobre los requisitos de reloj externo está disponible en el Manual de
referencia de rango medio de PICmicro ™, (DS33023).

5.2 Prescaler

Un contador de 8 bits está disponible como preescalador para el módulo Timer0 o como
posescalador para el temporizador de vigilancia, respectivamente (Figura 5-2). Para simplificar,
este contador se denomina "preescalador" en esta hoja de datos. Tenga en cuenta que solo hay un
preescalador disponible que se comparte de forma exclusiva y mutua entre el módulo Timer0 y el
temporizador Watchdog. Por lo tanto, una asignación de preescalador para el módulo Timer0
significa que no hay un preescalador para el temporizador de vigilancia, y viceversa.

El preescalador no se puede leer ni escribir.

Los bits PSA y PS2: PS0 (OPTION_REG <3: 0>) determinan la asignación de preescalador y la
relación de preescala.

Al borrar el bit PSA, se asignará el preescalador al módulo Timer0. Cuando el preescalador se


asigna al módulo Timer0, se pueden seleccionar valores de preescala de 1: 2, 1: 4, ..., 1: 256.

La configuración del bit PSA asignará el preescalador al temporizador de vigilancia (WDT). Cuando
el preescalador está asignado al WDT, se pueden seleccionar valores de preescala de 1: 1, 1: 2, ...,
1: 128.

Cuando se asigna al módulo Timer0, todas las instrucciones que se escriben en el registro TMR0
(por ejemplo, CLRF 1, MOVWF 1, BSF 1, etc.) borrarán el preescalador. Cuando se asigna a WDT,
una instrucción CLRWDT borrará el preescaler junto con el WDT

Nota: escribir en TMR0 cuando el preescalador está asignado a Timer0 borrará el recuento del
preescalador, pero no cambiará la asignación del preescalador.

FIGURA 5-1: DIAGRAMA DE BLOQUES DEL TEMPORIZADOR0

Sincronizar con relojes internos

Establecer el bit T0IF del

indicador de interrupción

en el desbordamiento

Nota

1: T0CS, T0SE, PSA, PS2: PS0 (OPTION_REG <5: 0>).

2: El preescalador se comparte con el temporizador de vigilancia (consulte la Figura 5-2 para


obtener un diagrama de bloques detallado).

5.2.1 CAMBIO DE ASIGNACIÓN DE PREESCALIZADOR

La asignación del preescalador está completamente bajo el control del software (es decir, se
puede cambiar "sobre la marcha" durante la ejecución del programa).

Nota:
Para evitar un RESET no intencionado del dispositivo, se debe ejecutar una secuencia de
instrucción específica (que se muestra en el Manual de referencia de rango medio de PICmicro ™,
DS33023) al cambiar la asignación del preescalador de Timer0 a WDT. Esta secuencia debe
seguirse incluso si el WDT está desactivado.

5.3 Interrupción del temporizador 0

La interrupción TMR0 se genera cuando el registro TMR0 se desborda de FFh a 00h. Este
desbordamiento establece el bit T0IF (INTCON <2>). La interrupción se puede enmascarar
borrando el bit T0IE (INTCON <5>). El bit T0IF debe ser borrado en software por la rutina de
servicio de interrupción del módulo Timer0 antes de volver a habilitar esta interrupción. La
interrupción TMR0 no puede despertar al procesador de SLEEP ya que el temporizador se apaga
durante SLEEP.

FIGURA 5-2: DIAGRAMA DE BLOQUES DEL PRESCALADOR TIMER0 / WDT

Establecer el bit de bandera T0IF en desbordamiento

Nota: T0CS, T0SE, PSA, PS2: PS0 son (OPTION_REG <5: 0>)

TABLA 5-1: REGISTROS ASOCIADOS CON TIMER0


Dirección Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 Valor en el Valor en
reinicio de todos los
encendido demás
RESET

01h TMR0 Registro del módulo Timer0 xxxx xxxx uuuu uuuu

0Bh,8Bh INTCON GIE EEIE T0IE INTE RBIE T0IF INTF RBIF 0000 000x 0000 000u

81h OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111 1111 1111
85h TRISA — — — Registro de dirección de datos ---1 1111 ---1 1111
Leyenda: x = desconocido, u = sin cambios, - = ubicaciones no implementadas leídas como '0'.

Timer0 no utiliza las celdas sombreadas.

6.0 CARACTERÍSTICAS ESPECIALES DE LA CPU

Lo que distingue a un microcontrolador de otros procesadores son los circuitos especiales para
hacer frente a las necesidades de las aplicaciones en tiempo real. El PIC16F84A tiene una serie de
características de este tipo destinadas a maximizar la confiabilidad del sistema, minimizar el costo
mediante la eliminación de componentes externos, proporcionar modos de funcionamiento de
ahorro de energía y ofrecer protección de código. Estas características son:

• Selección OSC

• REINICIAR

- Reinicio de encendido (POR)

- Temporizador de encendido (PWRT)

- Temporizador de arranque del oscilador (OST)

• Interrupciones

• Temporizador de vigilancia (WDT)

• DORMIR

• Protección de código

• Ubicaciones de identificación

• In-Circuit Serial Programming ™ (ICSP ™)

El PIC16F84A tiene un temporizador de vigilancia que se puede apagar solo a través de bits de
configuración. Funciona con su propio oscilador RC para mayor confiabilidad. Hay dos
temporizadores que ofrecen los retrasos necesarios en el encendido. Uno es el temporizador de
arranque del oscilador (OST), destinado a mantener el chip en RESET hasta que el oscilador de
cristal se estabilice.

El otro es el temporizador de encendido (PWRT), que proporciona un retardo fijo de 72 ms


(nominal) solo en el encendido. Este diseño mantiene el dispositivo en RESET mientras se
estabiliza la fuente de alimentación. Con estos dos temporizadores en chip, la mayoría de las
aplicaciones no necesitan circuitos de RESET externos.

El modo SLEEP ofrece un modo de apagado de muy baja corriente. El usuario puede despertarse
de SLEEP a través de RESET externo, Time-out del temporizador de vigilancia o mediante una
interrupción. Se proporcionan varias opciones de oscilador para permitir que la pieza se ajuste a la
aplicación. La opción de oscilador RC ahorra costes del sistema, mientras que la opción de cristal
LP ahorra energía. Se utiliza un conjunto de bits de configuración para seleccionar las distintas
opciones.

Información adicional sobre características especiales está disponible en el Manual de referencia


de rango medio de PICmicro ™ (DS33023)

6.1 Bits de configuración

Los bits de configuración se pueden programar (leer como '0'), o dejar sin programar (leer como
'1'), para seleccionar varias configuraciones de dispositivo. Estos bits se asignan en la ubicación de
memoria del programa 2007h.

La dirección 2007h está más allá del espacio de memoria del programa de usuario y pertenece al
espacio especial de memoria de prueba / configuración (2000h - 3FFFh). Solo se puede acceder a
este espacio durante la programación.

REGISTRO 6-1: PALABRA DE CONFIGURACIÓN PIC16F84A

bit 13-4 CP: Bit de protección de código

1 = Protección de código deshabilitada

0 = Toda la memoria del programa está protegida por código

bit 3 PWRTE: bit de habilitación del temporizador de encendido

1 = El temporizador de encendido está desactivado

0 = El temporizador de encendido está habilitado

bit 2 WDTE: Bit de habilitación del temporizador de vigilancia

1 = WDT habilitado

0 = WDT deshabilitado

bit 1-0 FOSC1: FOSC0: bits de selección del oscilador

11 = oscilador RC

10 = oscilador HS

01 = oscilador XT

00 = oscilador LP
6.2 Configuraciones del oscilador

6.2.1 TIPOS DE OSCILADORES

El PIC16F84A se puede operar en cuatro modos de oscilador diferentes. El usuario puede


programar dos bits de configuración (FOSC1 y FOSC0) para seleccionar uno de estos cuatro modos:

• Cristal LP de baja potencia

• Cristal / resonador XT

• Cristal / resonador de alta velocidad HS

• Resistencia / condensador RC

6.2.2 OSCILADOR DE CRISTAL / RESONADORES DE CERÁMICA

En los modos XT, LP o HS, se conecta un resonador de cristal o de cerámica a los pines OSC1 /
CLKIN y OSC2 / CLKOUT para establecer la oscilación (Figura 6-1)

FIGURA 6-1: FUNCIONAMIENTO DEL RESONADOR DE CRISTAL / CERÁMICA (CONFIGURACIÓN HS,


XT OR LP OSC)

Nota

1: Consulte la Tabla 6-1 para conocer los valores recomendados de C1 y C2.

2: Es posible que se requiera una resistencia en serie (RS) para los cristales cortados en tiras AT.

El diseño del oscilador PIC16F84A requiere el uso de un cristal cortado en paralelo. El uso de un
cristal tallado en serie puede dar una frecuencia fuera de las especificaciones del fabricante del
cristal. En los modos XT, LP o HS, el dispositivo puede tener una fuente de reloj externa para
controlar el pin OSC1 / CLKIN (Figura 6-2)

FIGURA 6-2: OPERACIÓN DE ENTRADA DE RELOJ EXTERNO (CONFIGURACIÓN HS, XT OR LP OSC)


TABLA 6-1: SELECCIÓN DE CONDENSADORES PARA RESONADORES CERÁMICOS

Rangos probados:

Nota: Los valores recomendados de C1 y C2 son idénticos a los rangos probados en esta tabla. Una
mayor capacitancia aumenta la estabilidad del oscilador, pero también aumenta el tiempo de
inicio. Estos valores son solo para orientación de diseño. Dado que cada resonador tiene sus
propias características, el usuario debe consultar al fabricante del resonador para conocer los
valores apropiados de los componentes externos.

Nota: Cuando se utilizan resonadores con frecuencias superiores a 3,5 MHz, se recomienda el uso
del modo HS en lugar del modo XT. El modo HS se puede utilizar en cualquier VDD para el que esté
clasificado el controlador.

TABLA 6-2: SELECCIÓN DE CONDENSADORES PARA OSCILADOR DE CRISTAL

Nota: una mayor capacitancia aumenta la estabilidad del oscilador, pero también aumenta el
tiempo de inicio. Estos valores son solo para orientación de diseño. Es posible que se requieran Rs
en el modo HS, así como en el modo XT, para evitar cristales de conducción excesiva con
especificación de nivel de conducción bajo. Dado que cada cristal tiene sus propias características,
el usuario debe consultar al fabricante del cristal para conocer los valores apropiados de los
componentes externos. Para VDD> 4.5V, se recomienda C1 = C2 ≈ 30 pF.

6.2.3 OSCILADOR RC

Para aplicaciones que no son sensibles a la sincronización, la opción de dispositivo RC ofrece


ahorros de costos adicionales. La frecuencia del oscilador RC es una función de la tensión de
alimentación, los valores de la resistencia (REXT), los valores del condensador (CEXT) y la
temperatura de funcionamiento. Además de esto, la frecuencia del oscilador variará de una
unidad a otra debido a la variación normal de los parámetros del proceso. Además, la diferencia en
la capacitancia del marco de plomo entre los tipos de paquetes también afecta la frecuencia de
oscilación, especialmente para valores bajos de CEXT. El usuario debe tener en cuenta la variación,
debido a la tolerancia de los componentes externos R y C. La Figura 6-3 muestra cómo se conecta
una combinación de R / C al PIC16F84A.

FIGURA 6-3: MODO OSCILADOR RC

Valores recomendados: 5 kΩ ≤ REXT ≤ 100 kΩ

CEXT> 20Pf

6.3 RESTABLECER

El PIC16F84A diferencia entre varios tipos de RESET:

• Reinicio de encendido (POR)

• MCLR durante el funcionamiento normal

• MCLR durante el SUEÑO

• Reinicio de WDT (durante el funcionamiento normal)

• WDT Wake-up (durante el SUEÑO)

La Figura 6-4 muestra un diagrama de bloques simplificado del circuito RESET en chip. La ruta de
reinicio de MCLR tiene un filtro de ruido para ignorar los pulsos pequeños. Las especificaciones
eléctricas establecen los requisitos de ancho de pulso para el pin MCLR.
Algunos registros no se ven afectados en ninguna condición de RESET; su estado es desconocido
en un POR y no cambia en cualquier otro RESET. La mayoría de los otros registros se restablecen a
un "estado RESET" en POR, MCLR o WDT Reset durante el funcionamiento normal y en MCLR
durante SLEEP. No se ven afectados por un reinicio de WDT durante el SUEÑO, ya que este reinicio
se considera la reanudación del funcionamiento normal.

La Tabla 6-3 proporciona una descripción de las condiciones de RESET para el contador de
programa (PC) y el registro de ESTADO. La Tabla 6-4 ofrece una descripción completa de los
estados de RESET para todos los registros.

Los bits TO y PD se establecen o borran de manera diferente en diferentes situaciones de RESET


(Sección 6.7). Estos bits se utilizan en software para determinar la naturaleza del RESET.

FIGURA 6-4: DIAGRAMA DE BLOQUE SIMPLIFICADO DEL CIRCUITO DE REINICIO EN CHIP

Nota

1: Este es un oscilador separado del oscilador RC del pin CLKIN.

2: Consulte la Tabla 6-5.

TABLA 6-3: CONDICIÓN DE RESTABLECIMIENTO DEL CONTADOR DE PROGRAMA Y EL REGISTRO DE


ESTADO

Condición Contador de ESTADO Registro


programa
Reinicio de encendido 000h 0001 1xxx
MCLR durante el funcionamiento normal 000h 000u uuuu
MCLR durante el SUEÑO 000h 0001 0uuu
Reinicio de WDT (durante el funcionamiento normal) 000h 0000 1uuu
Despertador WDT PC + 1 uuu0 0uuu
Interrumpir el despertar del SUEÑO PC + 1(1) uuu1 0uuu
Leyenda: u = sin cambios, x = desconocido
Nota 1: Cuando el despertador se debe a una interrupción y el bit GIE está establecido, la PC se
carga con el vector de interrupción (0004h)

TABLA 6-4: CONDICIONES DE RESTABLECIMIENTO PARA TODOS LOS REGISTROS

registro Dirección Reinicio de encendido MCLR durante: Despertar del SUEÑO:


- operación normal - mediante interrupción
- DORMIR - a través de WDT Time-
Reinicio de WDT out
durante operación
normal

Leyenda: u = sin cambios, x = desconocido, - = bit no implementado, leído como '0', q = el valor
depende de la condición

Nota 1: Uno o más bits de INTCON se verán afectados (para provocar la activación).

2: Cuando el despertador se debe a una interrupción y el bit GIE está establecido, la PC se carga
con el vector de interrupción

(0004h).

3: La Tabla 6-3 enumera el valor RESET para cada condición específica.

4: En cualquier dispositivo RESET, estos pines se configuran como entradas.

5: Este es el valor que estará en el pestillo de salida del puerto.

6.4 Reinicio de encendido (POR)

Se genera un pulso de reinicio de encendido en el chip cuando se detecta un aumento de VDD (en
el rango de 1.2V - 1.7V). Para aprovechar el POR, simplemente conecte el pin MCLR directamente
(oa través de una resistencia) a VDD. Esto eliminará los componentes RC externos que
normalmente se necesitan para crear Power-on Reset. Se debe cumplir un tiempo de subida
mínimo para VDD para que esto funcione correctamente. Consulte Especificaciones eléctricas para
obtener más detalles.

Cuando el dispositivo inicia el funcionamiento normal (sale de la condición de RESET), se deben


cumplir los parámetros de funcionamiento del dispositivo (voltaje, frecuencia, temperatura, etc.)
para garantizar el funcionamiento. Si no se cumplen estas condiciones, el dispositivo debe
mantenerse en RESET hasta que se cumplan las condiciones de funcionamiento.

Para obtener información adicional, consulte la Nota de aplicación AN607, "Solución de problemas
de encendido".

El circuito POR no produce un RESET interno cuando VDD disminuye.


6.5 Temporizador de encendido (PWRT)

El temporizador de encendido (PWRT) proporciona un tiempo de espera nominal fijo de 72 ms


(TPWRT) desde POR (Figuras 6-6 a 6-9). El temporizador de encendido funciona con un oscilador
RC interno. El chip se mantiene en RESET mientras el PWRT esté activo. El retardo PWRT permite
que el VDD se eleve a un nivel aceptable (posible excepción que se muestra en la Figura 6-9).

Un bit de configuración, PWRTE, puede habilitar / deshabilitar PWRT. Consulte el Registro 6-1 para
conocer el funcionamiento del bit PWRTE para un dispositivo en particular.

El tiempo de retardo de encendido TPWRT variará de un chip a otro debido al VDD, la temperatura
y la variación del proceso. Consulte los parámetros de CC para obtener más detalles.

6.6 Temporizador de arranque del oscilador (OST)

El temporizador de arranque del oscilador (OST) proporciona un retardo del ciclo del oscilador de
1024 (desde la entrada OSC1) después de que finaliza el retardo PWRT (Figura 6-6, Figura 6-7,
Figura 6-8 y Figura 6-9). Esto asegura que el oscilador o resonador de cristal se haya iniciado y
estabilizado.

El tiempo de espera de OST (TOST) se invoca solo para los modos XT, LP y HS y solo en Power-on
Reset o despertar desde SLEEP.

Cuando VDD aumenta muy lentamente, es posible que el tiempo de espera de TPWRT y el tiempo
de espera de TOST expiren antes de que VDD haya alcanzado su valor final. En este caso (Figura 6-
9), puede ser necesario un circuito de reinicio de encendido externo (Figura 6-5).

FIGURA 6-5: CIRCUITO DE RESTABLECIMIENTO DE ENCENDIDO EXTERNO (PARA ENCENDIDO


LENTO DE VDD)

Nota

1: Se requiere el circuito de reinicio de encendido


externo solo si la velocidad de encendido del VDD es
demasiado lenta. El diodo D ayuda a descargar el
condensador rápidamente cuando el VDD se apaga.

2: Se recomienda R <40 kΩ para asegurarse de que la


caída de voltaje en R no exceda 0.2V (la especificación
de corriente de fuga máxima en el pin MCLR es 5 µA).
Una caída de voltaje mayor degradará el nivel de VIH en el pin MCLR.

3: R1 = 100Ω a 1 kΩ limitará cualquier flujo de corriente que ingrese al MCLR desde el capacitor
externo C, en el caso de que el pin del MCLR se rompa debido a ESD o EOS.

FIGURA 6-6: SECUENCIA DE TIEMPO LÍMITE EN EL ENCENDIDO (MCLR NO ATA A VDD): CASO 1
FIGURA 6-7: SECUENCIA DE TIEMPO LÍMITE AL ENCENDER (MCLR NO ATA A VDD): CASO 2

FIGURA 6-8: SECUENCIA DE TIEMPO LÍMITE EN EL ENCENDIDO (MCLR ATADO A VDD): TIEMPO
RÁPIDO DE SUBIDA DE VDD

FIGURA 6-9: SECUENCIA DE TIEMPO LÍMITE EN EL ENCENDIDO (MCLR VINCULADO A VDD): TIEMPO
LENTO DE SUBIDA DE VDD
Cuando VDD aumenta muy lentamente, es posible que el tiempo de espera de TPWRT y el tiempo
de espera de TOST expiren antes de que VDD haya alcanzado su valor final. En este ejemplo, el
chip se reiniciará correctamente si, y solo si, V1 ≥ VDD min.

6.7 Secuencia de tiempo de espera y bits de estado de apagado (TO / PD)

En el encendido (Figuras 6-6 a 6-9), la secuencia de tiempo de espera es la siguiente:

1. El tiempo de espera de PWRT se invoca después de que ha expirado un POR.

2. Luego, se activa el OST.

El tiempo de espera total variará según la configuración del oscilador y el estado de los bits de
configuración de PWRTE. Por ejemplo, en el modo RC con PWRT desactivado, no habrá tiempo de
espera en absoluto.

TABLA 6-5: TIEMPO MUERTO EN DIFERENTES SITUACIONES

Configuración del Encender


Despertar de sleep
oscilador PWRT habilitado PWRT deshabilitado
72 ms +
XT, HS, LP
1024TOSC 1024TOSC 1024TOSC
RC 72 ms — —

Dado que los tiempos de espera se producen a partir del pulso POR, si el MCLR se mantiene bajo el
tiempo suficiente, los tiempos de espera expirarán. Luego, elevando el MCLR, la ejecución
comenzará inmediatamente (Figura 6-6). Esto es útil para realizar pruebas o para sincronizar más
de un dispositivo PIC16F84A cuando funciona en paralelo.

La Tabla 6-6 muestra el significado de los bits TO y PD. La Tabla 6-3 enumera las condiciones de
RESET para algunos registros especiales, mientras que la Tabla 6-4 enumera las condiciones de
RESET para todos los registros.

TABLA 6-6: BITS DE ESTADO Y SU SIGNIFICADO

T
PD Condición
O
1 1 Reinicio de encendido
0 x Ilegal, TO está configurado en POR
x 0 Ilegal, PD está configurado en POR
0 1 Reinicio de WDT (durante el funcionamiento normal)
0 0 Despertador WDT
1 1 MCLR durante el funcionamiento normal
1 0 MCLR durante SLEEP o interrumpir el despertar desde SLEEP

6.8 Interrupciones

El PIC16F84A tiene 4 fuentes de interrupción:

• Pin de interrupción externa RB0 / INT

• Interrupción de desbordamiento de TMR0

• Interrupciones de cambio de PORTB (pines RB7: RB4)

• Interrupción completa de escritura de EEPROM de datos

El registro de control de interrupciones (INTCON) registra las solicitudes de interrupción


individuales en bits de bandera. También contiene los bits de habilitación de interrupciones
individuales y globales.

El bit de habilitación de interrupción global, GIE (INTCON <7>), habilita (si está establecido) todas
las interrupciones desenmascaradas o deshabilita (si está despejado) todas las interrupciones. Las
interrupciones individuales se pueden inhabilitar a través de sus correspondientes bits de
habilitación en el registro INTCON. El bit GIE se borra en RESET.

La instrucción "retorno de la interrupción", RETFIE, sale de la rutina de interrupción y establece el


bit GIE, que vuelve a habilitar las interrupciones.

La interrupción de pin RB0 / INT, la interrupción de cambio de puerto RB y los indicadores de


interrupción de desbordamiento TMR0 están contenidos en el registro INTCON.

Cuando se responde a una interrupción, el bit GIE se borra para deshabilitar cualquier interrupción
adicional, la dirección de retorno se inserta en la pila y la PC se carga con 0004h. Para eventos de
interrupción externa, como el pin RB0 / INT o la interrupción de cambio de PORTB, la latencia de
interrupción será de tres a cuatro ciclos de instrucción. La latencia exacta depende de cuándo
ocurre el evento de interrupción. La latencia es la misma para las instrucciones de uno y dos ciclos.
Una vez en la rutina de servicio de interrupción, el origen de la interrupción puede determinarse
sondeando los bits de la bandera de interrupción. Los bits del indicador de interrupción deben
borrarse en el software antes de volver a habilitar las interrupciones para evitar solicitudes de
interrupciones infinitas.

Nota: Los bits de bandera de interrupción individuales se establecen independientemente del


estado de su bit de máscara correspondiente o del bit GIE.
FIGURA 6-10: LÓGICA DE INTERRUPCIÓN

Despertar (si está en modo SUEÑO)

Interrumpe la CPU

6.8.1 INTERRUPCIÓN INT

La interrupción externa en el pin RB0 / INT se dispara por flanco: ya sea en aumento si el bit
INTEDG (OPTION_REG <6>) está establecido, o en descenso si el bit INTEDG está limpio. Cuando
aparece un flanco válido en el pin RB0 / INT, se establece el bit INTF (INTCON <1>). Esta
interrupción puede desactivarse borrando el bit de control INTE (INTCON <4>). El bit de bandera
INTF debe borrarse en el software a través de la rutina de servicio de interrupción antes de volver
a habilitar esta interrupción. La interrupción INT puede despertar al procesador de SLEEP (Sección
6.11) solo si el bit INTE se estableció antes de entrar en SLEEP. El estado del bit GIE decide si el
procesador se bifurca al vector de interrupción después de la activación.

6.8.2 INTERRUPCIÓN DE TMR0

Un desbordamiento (FFh → 00h) en TMR0 establecerá el bit de bandera T0IF (INTCON <2>). La
interrupción se puede habilitar / deshabilitar estableciendo / borrando el bit de habilitación T0IE
(INTCON <5>) (Sección 5.0).

6.8.3 INTERRUPCIÓN DE PORTB

Un cambio de entrada en PORTB <7: 4> establece el bit de bandera RBIF (INTCON <0>). La
interrupción se puede habilitar / deshabilitar estableciendo / borrando el bit de habilitación RBIE
(INTCON <3>) (Sección 4.2).

Nota: Para que se reconozca un cambio en el pin de E / S, el ancho de pulso debe ser al menos TCY
ancho.

6.8.4 INTERRUPCIÓN DE EEPROM DE DATOS

Al finalizar un ciclo de escritura de EEPROM de datos, se establecerá el bit de bandera EEIF


(EECON1 <4>). La interrupción se puede habilitar / deshabilitar estableciendo / borrando el bit de
habilitación EEIE (INTCON <6>) (Sección 3.0).
6.9 Guardar contexto durante interrupciones

Durante una interrupción, solo se guarda en la pila el valor de PC de retorno. Normalmente, los
usuarios desean guardar los valores del registro de claves durante una interrupción (por ejemplo,
registro W y registro STATUS). Esto se implementa en software.

El código del Ejemplo 6-1 almacena y restaura los valores de los registros STATUS y W. Los
registros definidos por el usuario, W_TEMP y STATUS_TEMP son las ubicaciones de
almacenamiento temporal para los valores de los registros W y STATUS.

El ejemplo 6-1 hace lo siguiente:

a) Almacena el registro W.

b) Almacena el registro STATUS en STATUS_TEMP.

c) Ejecuta el código de rutina de servicio de interrupción.

d) Restaura el registro STATUS (y bit de selección de banco).

e) Restaura el registro W.

EJEMPLO 6-1: GUARDAR ESTADO Y W REGISTROS EN RAM


PUSH MOVWF W_TEMP ; Copie W al registro TEMP,

SWAPF STATUS, W ; Cambiar el estado para guardarlo en W

MOVWF STATUS_TEMP ; Guardar el estado en el registro STATUS_TEMP

ISR : :

: ; La rutina de servicio de interrupción debe

: ; configurar el banco según sea necesario

: ;

POP SWAPF STATUS_TEMP,W ; Intercambie nibbles en el registro STATUS_TEMP y coloque el

; resultado en W

MOVWF STATUS ; Mueva W al registro STATUS (establece el banco en el estado original)

SWAPF W_TEMP, F ; Intercambie nibbles en W_TEMP y coloque el resultado en W_TEMP

SWAPF W_TEMP, W ; Intercambie nibbles en W_TEMP y coloque el resultado en W

6.10 Temporizador de vigilancia (WDT)

El Watchdog Timer es un oscilador RC en chip de ejecución libre que no requiere ningún


componente externo. Este oscilador RC está separado del oscilador RC del pin OSC1 / CLKIN. Eso
significa que el WDT se ejecutará incluso si el reloj en los pines OSC1 / CLKIN y OSC2 / CLKOUT del
dispositivo se ha detenido, por ejemplo, mediante la ejecución de una instrucción SLEEP. Durante
el funcionamiento normal, un tiempo de espera de WDT genera un RESET del dispositivo. Si el
dispositivo está en modo SLEEP, una activación WDT hace que el dispositivo se active y continúe
con el funcionamiento normal. El WDT puede desactivarse permanentemente programando el bit
de configuración WDTE como un '0' (Sección 6.1).

6.10.1 PERIODO WDT

El WDT tiene un período de tiempo de espera nominal de 18 ms (sin preescalador). Los períodos
de tiempo de espera varían con la temperatura, VDD y las variaciones del proceso de una pieza a
otra (consulte las especificaciones de CC). Si se desean períodos de tiempo de espera más largos,
se puede asignar un preescalador con una relación de división de hasta 1: 128 al WDT bajo el
control del software escribiendo en el registro OPTION_REG. Por lo tanto, se pueden realizar
períodos de tiempo de espera de hasta 2,3 segundos.

Las instrucciones CLRWDT y SLEEP borran el WDT y el escalador posterior (si está asignado al WDT)
y evitan que se agote el tiempo de espera y genere una condición de RESET del dispositivo.

El bit TO del registro STATUS se borrará cuando se agote el tiempo de espera de WDT.

6.10.2 CONSIDERACIONES DE PROGRAMACIÓN DE WDT

También debe tenerse en cuenta que en las peores condiciones (VDD = Min., Temperature = Max.,
Max. WDT Prescaler), pueden pasar varios segundos antes de que se agote el tiempo de espera de
WDT.

FIGURA 6-11: DIAGRAMA DE BLOQUES DEL TEMPORIZADOR DE WATCHDOG


Desde la fuente de reloj TMR0 (Figura 5-2)

A TMR0 (Figura 5-2)

Posescalador

Temporizador WDT

MUX

PSA

8 - a -1 MUX

PSA

Tiempo de espera de WDT

Bit de habilitación WDT

Nota: PSA y PS2: PS0 son bits en el registro OPTION_REG


TABLA 6-7: RESUMEN DE REGISTROS ASOCIADOS CON EL TEMPORIZADOR WATCHDOG
Valor en
Valor en el
todos los
Dirección Nombre Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 reinicio de
demás
encendido
RESET

Config. bits (2) (2) (2) (2) PWRTE(1) WDTE FOSC1 FOSC0 (2)
2007h
1111 1111
81h OPTION_REG RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 1111 1111

Leyenda: x = desconocido. El WDT no utiliza las celdas sombreadas.

Nota 1: Consulte el Registro 6-1 para conocer el funcionamiento del bit PWRTE.

2: Consulte el Registro 6-1 y la Sección 6.12 para conocer el funcionamiento del código y los bits de
protección de datos.

6.11 Modo de apagado (SLEEP)

Un dispositivo se puede apagar (SLEEP) y luego encender (despertar desde SLEEP).

6.11.1 SUEÑO

El modo de apagado se ingresa ejecutando la instrucción SLEEP.

Si está habilitado, el temporizador de vigilancia se borra (pero sigue funcionando), el bit PD


(STATUS <3>) se borra, el bit TO (STATUS <4>) se establece y el controlador del oscilador se apaga.
Los puertos de E / S mantienen el estado que tenían antes de que se ejecutara la instrucción SLEEP
(impulsando alta, baja o alta impedancia).

Para obtener el menor consumo de corriente en el modo SLEEP, coloque todos los pines de E / S
en VDD o VSS, sin circuitos externos que extraigan corriente de los pines de E / S, y desactive los
relojes externos. Los pines de E / S que son entradas de alta impedancia deben colocarse hacia
arriba o hacia abajo externamente para evitar las corrientes de conmutación causadas por las
entradas flotantes. La entrada T0CKI también debe estar en VDD o VSS. Se debe considerar la
contribución de los pull-ups en chip en PORTB.

El pin MCLR debe estar en un nivel lógico alto (VIHMC).

Cabe señalar que un RESET generado por un tiempo de espera de WDT no baja el pin MCLR.

6.11.2 DESPERTAR DEL SUEÑO

El dispositivo puede despertarse de SLEEP a través de uno de los siguientes eventos:


1. Entrada RESET externa en el pin MCLR.

2. Activación de WDT (si WDT estaba habilitado).

3. Interrupción del pin RB0 / INT, cambio de puerto RB o escritura de EEPROM de datos completa.

Los periféricos no pueden generar interrupciones durante SLEEP, ya que no hay relojes Q en el
chip.

El primer evento (reinicio de MCLR) provocará un reinicio del dispositivo. Los dos últimos eventos
se consideran una continuación de la ejecución del programa. Los bits TO y PD se pueden utilizar
para determinar la causa de un RESET del dispositivo. El bit PD, que se establece en el encendido,
se pone a cero cuando se invoca SLEEP. El bit TO se borra si se produjo un tiempo de espera de
WDT (y provocó la activación).

Mientras se ejecuta la instrucción SLEEP, se busca previamente la siguiente instrucción (PC + 1).
Para que el dispositivo se despierte a través de un evento de interrupción, el bit de habilitación de
interrupción correspondiente debe estar configurado (habilitado). La activación se produce
independientemente del estado del bit GIE. Si el bit GIE está limpio (inhabilitado), el dispositivo
continúa la ejecución en la instrucción SLEEP. Si el bit GIE está establecido (habilitado), el
dispositivo ejecuta la instrucción después de la instrucción SLEEP y luego se bifurca a la dirección
de interrupción (0004h). En los casos en los que la ejecución de la instrucción que sigue a SLEEP no
es deseable, el usuario debe tener un NOP después de la instrucción SLEEP

Instrucción obtenida; Instrucción ejecutada; Ciclo ficticio; FLUJO DE INSTRUCCIONES

Nota

1: Se asume el modo de oscilador XT, HS o LP.

2: TOST = 1024TOSC (dibujo no a escala). Este retraso no estará allí para el modo RC osc.

3: GIE = "1" asumido. En este caso, después de la activación, el procesador pasa a la rutina de
interrupción. Si GIE = '0', la ejecución continuará en línea.

4: CLKOUT no está disponible en estos modos osc, pero se muestra aquí como referencia de
tiempo
6.11.3 DESPERTAR CON INTERRUPCIONES

Cuando las interrupciones globales están deshabilitadas (GIE borrado) y cualquier fuente de
interrupción tiene su bit de habilitación de interrupción y su bit de bandera de interrupción
establecidos, ocurrirá uno de los siguientes:

• Si la interrupción ocurre antes de la ejecución de una instrucción SLEEP, la instrucción SLEEP se


completará como NOP. Por lo tanto, el posescalador WDT y WDT no se borrará, el bit TO no se
establecerá y los bits PD no se borrarán.

• Si la interrupción ocurre durante o después de la ejecución de una instrucción SLEEP, el


dispositivo se despertará inmediatamente de SLEEP. La instrucción SLEEP se ejecutará
completamente antes del despertar. Por lo tanto, el posescalador WDT y WDT se borrará, el bit TO
se establecerá y el bit PD se borrará.

Incluso si se verificaron los bits de bandera antes de ejecutar una instrucción SLEEP, es posible que
los bits de bandera se establezcan antes de que se complete la instrucción SLEEP. Para determinar
si se ejecutó una instrucción SLEEP, pruebe el bit PD. Si se establece el bit PD, la instrucción SLEEP
se ejecutó como NOP.

Para asegurarse de que el WDT se borre, se debe ejecutar una instrucción CLRWDT antes de una
instrucción SLEEP.

6.12 Verificación del programa / Protección de código

Si el (los) bit (s) de protección del código no se han programado, la memoria del programa en el
chip se puede leer con fines de verificación.

6.13 Ubicaciones de identificación

Se designan cuatro ubicaciones de memoria (2000h - 2004h) como ubicaciones de identificación


para almacenar la suma de comprobación u otros números de identificación de código. Estas
ubicaciones no son accesibles durante la ejecución normal, pero solo se pueden leer y escribir
durante la programación / verificación. Solo se pueden utilizar los cuatro bits menos significativos
de la ubicación del ID.

6.14 Programación en serie en circuito

Los microcontroladores PIC16F84A se pueden programar en serie mientras se encuentran en el


circuito de aplicación final. Esto se hace simplemente con dos líneas para reloj y datos, y otras tres
líneas para alimentación, tierra y voltaje de programación. Los clientes pueden fabricar placas con
dispositivos no programados y luego programar el microcontrolador justo antes de enviar el
producto, lo que permite programar el firmware más reciente o el firmware personalizado.
Para obtener detalles completos de la programación en serie, consulte la Guía de programación en
serie en circuito ™ (ICSP ™), (DS30277).

7.0 RESUMEN DEL CONJUNTO DE INSTRUCCIONES

Cada instrucción PIC16CXX es una palabra de 14 bits, dividida en un OPCODE que especifica el tipo
de instrucción y uno o más operandos que especifican aún más la operación de la instrucción. El
resumen del conjunto de instrucciones PIC16CXX en la Tabla 7-2 enumera las operaciones de
control y las operaciones orientadas a bytes, orientadas a bits y literales. La Tabla 7-1 muestra las
descripciones de los campos del código de operación.

Para instrucciones orientadas a bytes, "f" representa un designador de registro de archivo y "d"
representa un designador de destino. El designador de registro de archivo especifica qué registro
de archivo se utilizará en la instrucción.

El designador de destino especifica dónde se colocará el resultado de la operación. Si 'd' es cero, el


resultado se coloca en el registro W. Si 'd' es uno, el resultado se coloca en el registro de archivo
especificado en la instrucción.

Para las instrucciones orientadas a bits, 'b' representa un designador de campo de bits que
selecciona el número del bit afectado por la operación, mientras que 'f' representa la dirección del
archivo en el que se encuentra el bit.

Para operaciones literales y de control, "k" representa un valor literal o constante de ocho u once
bits.

TABLA 7-1: DESCRIPCIONES DE CAMPOS DE OPCODE

Campo Descripción
F Registrar dirección de archivo (0x00 a 0x7F)
W Registro de trabajo (acumulador)
B Dirección de bit dentro de un registro de archivo de 8 bits
K Campo literal, datos constantes o etiqueta
No importa la ubicación (= 0 o 1) El ensamblador generará código con x = 0. Es la forma de uso
X
recomendada para la compatibilidad con todas las herramientas de software de Microchip.
Seleccionar destino; d = 0: almacenar el resultado en W, d = 1: almacenar el resultado en el
D
registro de archivo f. El valor predeterminado es d = 1
PC Contador de programa
TO Bit de tiempo de espera
PD Bit de apagado

El conjunto de instrucciones es muy ortogonal y se agrupa en tres categorías básicas:

• Operaciones orientadas a bytes

• Operaciones orientadas a bits


• Operaciones literales y de control

Todas las instrucciones se ejecutan dentro de un solo ciclo de instrucción, a menos que una
prueba condicional sea verdadera o el contador del programa se cambie como resultado de una
instrucción.

En este caso, la ejecución toma dos ciclos de instrucción y el segundo ciclo se ejecuta como un
NOP. Un ciclo de instrucción consta de cuatro períodos de oscilador. Por tanto, para una
frecuencia de oscilador de 4 MHz, el tiempo normal de ejecución de la instrucción es 1 µs. Si una
prueba condicional es verdadera o el contador del programa se cambia como resultado de una
instrucción, el tiempo de ejecución de la instrucción es de 2 µs.

La Tabla 7-2 enumera las instrucciones reconocidas por el ensamblador MPASM ™.

La Figura 7-1 muestra los formatos generales que pueden tener las instrucciones.

Nota: Para mantener la compatibilidad ascendente con futuros productos PIC16CXX, no use las
instrucciones OPTION y TRIS.

Todos los ejemplos utilizan el siguiente formato para representar un número hexadecimal:

0xhh

donde h significa un dígito hexadecimal.

FIGURA 7-1: FORMATO GENERAL DE LAS INSTRUCCIONES

Operaciones de registro de archivos orientadas a bytes

d = 0 para el destino W

d = 1 para el destino f

f = dirección de registro de archivo de 7 bits

Operaciones de registro de archivos orientadas a bits

b = dirección de bits de 3 bits

f = dirección de registro de archivo de 7 bits


Operaciones literales y de control

General

k = valor inmediato de 8 bits

Solo instrucciones CALL y GOTO

k = valor inmediato de 11 bits

Una descripción de cada instrucción está disponible en el Manual de referencia de rango medio de
PICmicro ™ (DS33023).

También podría gustarte