Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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.
• Interrupción externa
La Tabla 1-1 detalla la distribución de pines del dispositivo con descripciones y detalles para cada
pin.
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.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.
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.
bit 5 RP0: Bits de selección de banco de registro (utilizados para direccionamiento directo)
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
bit 0 C: bit de llevar / pedir prestado (instrucciones ADDWF, ADDLW, SUBLW, SUBWF) (para tomar
prestado, la polaridad está invertida)
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:
- n = Valor en POR '1' = El bit se establece en '0' = El bit se borra x = El bit es desconocido
Nota: cuando el preescalador está asignado a el WDT (PSA = ’1’), TMR0 tiene un 1: 1 asignación de
preescalador.
Leyenda:
- 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).
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:
- n = Valor en POR '1' = El bit se establece en '0' = El bit se borra x = El bit es desconocido
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).
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.
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)
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.
Leyenda:
- n = Valor en POR '1' = El bit se establece en '0' = El bit se borra x = El bit es desconocido
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
MOVLW CONFIG_ADDR ;
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.
MOVLW 55h ;
MOVLW AAh ;
; empezar a escribir
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.
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).
READ
SUBWF EEDATA, W ;
Leyenda: x = desconocido, u = sin cambios, - = sin implementar, leído como '0', q = el valor
depende de la condición.
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.
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
MOVWF TRISA ; Establecer RA <3: 0> como entradas RA4 como salida
FIGURA 4-1: DIAGRAMA FIGURA 4-2: DIAGRAMA DE BLOQUES DEL PIN RA4
Nota: los pines de E / S tienen diodos Nota: los pines de E / S tienen diodos de
05h PORTA — — — RA4/T0CKI RA3 RA2 RA1 RA0 ---x xxxx ---u uuuu
85h TRISA — — — TRISA4 TRISA3 TRISA2 TRISA1 TRISA0 ---1 1111 ---1 1111
MOVWF TRISB ; Establecer RB <3: 0> como entradas RB <5: 4> como salidas
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>).
a) Cualquier lectura o escritura de PORTB. Esto pondrá fin a la condición de falta de coincidencia.
FIGURA 4-3: DIAGRAMA DE FIGURA 4-4: DIAGRAMA DE BLOQUE DE PINS RB3: RB0
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).
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.
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.
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
• Legible y escribible
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.
Los bits PSA y PS2: PS0 (OPTION_REG <3: 0>) determinan la asignación de preescalador y la
relación de preescala.
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.
indicador de interrupción
en el desbordamiento
Nota
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.
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.
Nota: T0CS, T0SE, PSA, PS2: PS0 son (OPTION_REG <5: 0>)
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'.
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
• Interrupciones
• DORMIR
• Protección de código
• Ubicaciones de identificación
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 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.
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.
1 = WDT habilitado
0 = WDT deshabilitado
11 = oscilador RC
10 = oscilador HS
01 = oscilador XT
00 = oscilador LP
6.2 Configuraciones del oscilador
• Cristal / resonador XT
• Resistencia / condensador RC
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)
Nota
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)
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.
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
CEXT> 20Pf
6.3 RESTABLECER
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.
Nota
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).
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.
Para obtener información adicional, consulte la Nota de aplicación AN607, "Solución de problemas
de encendido".
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.
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).
Nota
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.
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.
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.
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 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.
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.
Interrumpe la CPU
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.
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).
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.
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.
a) Almacena el registro W.
e) Restaura el registro W.
ISR : :
: ;
; resultado en W
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.
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.
Posescalador
Temporizador WDT
MUX
PSA
8 - a -1 MUX
PSA
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
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.1 SUEÑO
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.
Cabe señalar que un RESET generado por un tiempo de espera de WDT no baja el pin MCLR.
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
Nota
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:
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.
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.
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.
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.
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
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 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
d = 0 para el destino W
d = 1 para el destino f
General
Una descripción de cada instrucción está disponible en el Manual de referencia de rango medio de
PICmicro ™ (DS33023).