El PIC16F84A
DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.1

Índice / Introducción Registros del PIC16F84A El lenguaje ensamblador del PIC16F84A

Características especiales del PIC16F84A

Índice de contenidos


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.2

Palabra de configuración

    Hay ciertos aspectos del PIC que han de ser activados o desactivados cuando se programa y no se pueden volver a cambiar hasta que el PIC no se reprograme de nuevo.

    El PIC16F84 dispone de 4 elementos programables (los modelos superiores tienen más) que se encuentran en la llamada palabra de configuración. A estos 4 elementos o bits de configuración también se les conoce como fuses (fusibles).

    La palabra de configuración se encuentra en la dirección de memoria de programa 2007 h. Esta posición está más allá del espacio de memoria de programa destinada al usuario y pertenece al espacio de memoria de prueba y configuración (2000h - 3FFFh). Solamente se puede acceder a este espacio durante la programación del dispositivo.

R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W R/W
CP CP CP CP CP CP CP CP CP CP /PWRTE WDTE FOSC1 FOSC0
B13 B12 B11 B10 B9 B8 B7 B6 B5 B4 B3 B2 B1 B0

DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.3

CP

    Activando CP, Code Protection, tendremos la garantía de que el código escrito en el PIC no pueda ser leído por otra persona, para que no se copie, modifique, etc. Esto no impide que el PIC funcione como siempre, ni que no se pueda sobrescribir su contenido. Lo único que nos impide es leerlo.

PWRTE

    Si activamos el bit PWRTE, conseguimos que se genere un retardo en la inicialización del microcontrolador. Esto se utiliza para que la tensión se estabilice, por lo que se recomienda su uso.

WDTE

    El "perro guardián" del PIC se configura aquí. Con esto el PIC tiene la capacidad de autorresetearse. Es útil ante problemas que impidan el funcionamiento del programa del PIC, como un bucle infinito, el WDT lo sacará de él reseteándo al PIC.

    Su funcionamiento es sumamente sencillo. Simplemente es un registro que debemos borrar cada cierto tiempo. Si pasa un tiempo (entre 2.5ms y 2.5 seg) y el registro no ha sido borrado, el PIC se resetea. La instrucción para borrar el registro es CLRWDT. Con poner un par de ellos a lo largo de nuestro código es suficiente para tener una garantía de que nuestro PIC no se quede "colgado".

FOSC1, FOSC0

    Mediante FOSC1 y FOSC0 controlamos el modo de oscilación que usará el PIC para funcionar. Como ya sabemos, el oscilador se puede configurar de 4 maneras distintas, dependiendo de la velocidad y del tipo de circuito oscilador empleado. Vamos a recordar como eran y como podemos configurarlos.


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.4

Programar la palabra de configuración

    Existen dos maneras de programar la palabra de configuración:

1) Cuando se programa el PIC. En todos los programadores es posible activar o desactivar estas opciones a nuestra conveniencia. En la siguiente figura puede verse una captura del programa ICProg, el más extendido en la programación de microcontroladores y en la parte derecha, las opciones de configuración.

2) Activación por código. La línea de memoria de configuración es creada por el programa ensamblador con los valores por defecto. Podemos hacer que estos valores cambien introduciendo una línea de código en el nuestro algoritmo. Este código está contenido en el fichero que incluimos en la cabecera (P16F84A.INC):

	_CP_ON		EQU H'000F' ; Activa code protect
	_CP_OFF 	EQU H'3FFF' ; Desactiva code protect
	_PWRTE_ON 	EQU H'3FF7' ; Activa power on reset
	_PWRTE_OFF 	EQU H'3FFF' ; Desactiva power on reset
	_WDT_ON 	EQU H'3FFF' ; Activa Watchdog
 	_WDT_OFF 	EQU H'3FFB' ; Desactiva Watchdog
	_LP_OSC 	EQU H'3FFC' ; Oscilador LP
	_XT_OSC 	EQU H'3FFD' ; Oscilador XT
	_HS_OSC 	EQU H'3FFE' ; Oscilador HS
	_RC_OSC 	EQU H'3FFF' ; Oscilador RC

DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.5

    Como podemos ver los nombres de las etiquetas son bastante intuitivos. Este código debe situarse al principio del programa, después del tipo de PIC a usar y de la definición de las etiquetas. La línea de configuración siempre comienza con la directriz __CONFIG y cada opción debe estar separada de otra con el carácter & . Veamos un ejemplo:

	LIST P=PIC16F84A ; Pic a usar

#INCLUDE <P16F84A.INC> ; Lista de etiquetas de microchip

	; Bits de configuración. Configuran opciones externas de hardware para la programacion
	__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC & _PWRTE_ON

    En este ejemplo, Code Protect y Watchdog Timer están desactivados, Power on Reset en cambio está activado, y el cristal usado no supera los 4 MHz.

    Cuando cargemos el archivo del PIC en el programador (por ejemplo, en Ic-Prog), estarán marcadas las opciones que hemos configurado en el código. Aunque lo hayamos hecho así, podemos cambiar estas opciones en la ventana del programador.

Oscilador

    Todo microprocesador o microcontrolador requiere de una señal de reloj que sincronice su funcionamiento. Esta señal se obtiene mediante un oscilador de frecuencia.

    Existen microcontroladores que tienen un oscilador interno y no requieren de componentes externos. El microcontrolador PIC16F84 requiere de un circuito externo de oscilación o generador de pulsos de reloj.

    La frecuencia de reloj máxima es de 4 MHz para el PIC16F84A-04 y de 20 MHz para el PIC16F84A-20.

    El PIC16F84 puede utilizar cuatro tipo diferentes configuraciones de reloj. La elección dependerá de la precisión y velocidad que requiramos; por otro lado, el coste también es un aspecto a tener en cuenta a la hora de elegir uno u otro.

    En el momento de programar el microcontrolador se deberá especificar en los parámetros el tipo de oscilador que utilizamos en el circuito electrónico. En ese momento, se programan dos bits de configuración denominados FOSC1 y FOSC2. Por ejemplo si su frecuencia de trabajo es de 20 MHz entonces la configuración del microcontrolador deberá estar en "HS"; pero si su frecuencia de trabajo es de 4 Mhz entonces la configuración del microcontrolador deberá estar en "XT".

    Existen 4 modos de oscilador para el PIC16F84A. Tres (LP,XT y HS) utilizan cristal de cuarzo y el cuarta (LP) utiliza una resistencia y un condensador

    Relacionados con los modos de oscilador y la frecuencia máxima a la que el PIC podrá trabajar tenemos 3 versiones del PIC16F84A:

El PIC16LF84A-04, ideal para aplicaciones de bajo consumo, puede trabajar con una Vdd de 2 a 5,5 voltios en los modos LP, XT y RC, pero no dispone del modo HS. Puede utilizarse en el modo LP para frecuencias entre 0 y 200 KHz, en el modo XT para frecuencias entre 100 KHz y 2 MHz y en el modo RC desde 0 hasta 2 MHz.

El PIC16F84A-04, para aplicaciones generales, puede trabajar en los cuatro modos. En el modo LP para frecuencias entre 32 KHz y 200 KHz, en el modo XT para frecuencias entre 100 KHz y 4 MHz y en el modo RC hasta 4 MHz. Puede trabajar con una Vdd de 4 a 5,5 voltios en los modos XT, LP y RC, pero el rango se acorta de 4,5 a 5,5 voltios con el modo HS.

El PIC16F84A-20 se reservará normalmente para el modo HS y frecuencias entre 4 MHz y 20 MHz. Puede trabajar con una Vdd de 4 a 5,5 voltios en los modos XT, LP y RC, pero el rango se acorta de 4,5 a 5,5 voltios con el modo HS.

    A continuación entraremos en algunos detalles sobre los modos de oscilador

Modo oscilador XT, LP y HS

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

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

    La condición más importante para que este oscilador funcione es que los condensadores C1 y C2 deberán ser iguales. En una tabla mas adelante están reflejados algunos valores de los condensadores C1 y C2.

    Debe utilizarse una resistencia en serie (Rs) para cristales AT.

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


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.6

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

Selección de condensadores para osciladores de cristal.

Modo Frecuencia OSC1/C1 OSC2/C2
LP 32 Khz
200 Khz
68 - 100 pF
15 - 33 pF
68 - 100 pF
15 - 33 pF
XT 100 Khz
2 Mhz
4 Mhz
100 - 150 pF
15 - 33 pF
15 - 33 pF
100 - 150 pF
15 - 33 pF
15 - 33 pF
HS 4 Mhz
20 Mhz
15 - 33 pF
15 - 33 pF
15 - 33 pF
15 - 33 pF

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

    Nota: Sólo el PIC16F84A-20 podrá llegar a trabajar a 20 MHz.

Modo oscilador RC

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

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

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

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

    Los valores de R deben estar comprendidos entre 5 y 100 K, mientras que los valores de C no deben ser inferiores a 20 pF.

    Es importante saber que para valores de resistencia menor a 5 K, el sistema se hace inestable o se podría detener la oscilación completamente. Para valores de resistencias mayores a 100 K (por ejemplo 1 MOhmio), el oscilador se hace muy susceptible al ruido, humedad y a la temperatura por lo tanto se recomienda que este tipo de oscilador se encuentre en el siguiente rango (5K < R < 100 K). Por otro lado se recomienda utilizar un condensador no polarizado mayor de 20 picoFaradios para disminuir el ruido y aumentar la estabilidad del sistema.

    La frecuencia del oscilador, dividida por 4, está disponible en el terminal OSC2/CLKOUT y puede utilizarse para comprobar la frecuencia o para sincronizar otros dispositivos.


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.7

    A continuación se muestran algunos gráficos que muestran valores de frecuencia de oscilación según el condensador y la resistencia. También es importante saber que la tensión de alimentación que tendrá el microcontrolador influye directamente en la frecuencia final. En la figura siguiente se muestran algunas combinaciones de resistencias y condensador. En la gráfica se muestra que la frecuencia máxima que puede conseguirse es de unos 800 Khz con un condensador de 300 pF.

    Si nos damos cuenta, para algunos valores del voltaje, el valor de frecuencia se hace verdadero para la expresión de la frecuencia que da la fórmula:

    ;f = R x C

    Donde C está expresado en Faradios y R en Ohmios. Por desgracia el punto en el que coincide la frecuencia y el voltaje no es lineal para todos los valores de V.

    En la siguiente gráfica tenemos que la máxima frecuencia que podrá ser obtenida es de unos 1,8 Mhz colocando un condensador de 100 pF.

    Finalmente en la tercera gráfica tenemos que la máxima frecuencia obtenida con un oscilador RC es de unos 15 Mhz utilizando un condensador de 22 pF.


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.8

Oscilador externo

    A continuación se exponen dos configuraciones que se pueden emplear con tres de los cuatro modos de funcionamiento: XT, HS ó LS. En ambos casos se utiliza un oscilador externo.

    Conviene recordar que según la frecuencia de la señal inyectada, debemos usar la opción LP para frecuencias comprendidas entre 32 y 200 KHz, la opción XT para frecuencias situadas entre los 100 KHz y los 4 MHz, y la opción HS para frecuencias comprendidas entre 4 y 20 MHz (dependiendo esta última de la velocidad máxima permitida por el PIC).

    Señal de reloj externa:

    En ciertas ocasiones disponemos una fuente de reloj que proviene de una fuente externa como puede ser un oscilador TTL o CMOS. La onda generada por esta fuente externa puede servir para poner en funcionamiento el PIC. En la siguiente figura tenemos la forma de conexionar la entrada digital a traves de un inversor lógico.

    Como se puede observar, todos los circuitos oscilatorios que se conectan al PIC a través de una sola patilla, van conectadas a la entrada OSC1, dejando la entrada OSC2 abierta.


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.9

Oscilador TTL

    Este tipo de oscilador está basado en un cristal que contiene toda la circuitería para generar una onda cuadrada. Este ha de ser conectado como si de un generador de señal externa se tratase. Al incluir toda la circuitería esto lo convierte en la opción más costosa; pero resulta una forma interesante por la precisión en la señal de reloj emitida.

    Estos tipos de cristales están diseñados especialmente para tecnologías TTL. La frecuencias disponibles para esta versión de cristal son muy amplias y las mas usuales son 1 - 1.8432 - 2 - 4 - 8 - 10 - 11.059 - 12 - 14.31818 - 16 - 20 - 25 - 32 - 33 - 40 - 50 - 80 y 100 Mhz.

    En la imagen siguiente se muestra como debe conectarse al microcontrolador y las características del cristal.

El reset

    Cuando se ejecuta un reset, se producen dos acciones importantes.

    El reset puede ser provocado por 3 causas diferentes que dan origen a 5 modos:

    En todos los casos, salvo en el quinto, el contador de programa PC se pone a 0000 h (vector de reset), donde debe encontrarse la primera instrucción ejecutable del programa. Además todos los registros específicos (SFR) son colocados en estados predeterminados (ver Estado predeterminado de los registros específicos en Registros del PIC16F84A).

    En el quinto caso, cuando se produce un desbordamiento del WDT mientras el PIC está en modo SLEEP, no se produce un reset propiamente dicho, sino que el PIC se sale del modo SLEEP, se "despierta" mediante el temporizador watchdog y el PC se incrementa en una unidad para pasar a la instrucción que sigue a la instrucción SLEEP, igual que cuando se sale de este modo mediante una interrupción, si el bit GIE del registro INTCON está a uno.

Reset a la alimentación

Power-on Reset (POR)

    Cuando se alimenta al PIC, se genera automáticamente un reset gracias a un circuito interno que detecta la subida de la tensión de alimentación en el rango de 1.2 a 1,7 voltios. Esto elimina la necesidad de utilizar un circuito externo mediante resistencia y condensador para conseguir un reset a la alimentción y si no va a utilizarse un reset manual, la patilla MCLR, puede conectarse a positivo (VCC) directamente o a través de una resistencia para desactivarla.


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.10

Power-up Timer (PWRT)

    PWRT es un sistema interno del microcontrolador que lo mantiene reseteado durante unos 72 ms hasta que se estabilice la tensión de alimentación. Utiliza un circuito oscilador RC interno y un contador para conseguir ese tiempo.

    El tiempo en que está activo PWRT puede ser distinto entre distintos PIC, según el valor de Vcc, la temperatura y otras variables.

    PWRT puede se habilitado/deshabilitado mediante el bit de configuración PWRTE , recomendandose su activación (ver Palabra de configuración ).

Oscillator Start-up Timer (OST)

    OST es un temporizador interno que proporciona un retardo de 1024 ciclos del oscilador después de que termine el retardo que proporciona PWRT . Se utiliza para mantener reseteado al microcontrolador para asegurarse que la oscilación del cristal de cuarzo o resonador se ha iniciado y se ha estabilizado.

    OST actúa solamente si se utilizan los modos XT , LP y HS y cuando se alimenta al PIC o cuando se despierta desde el modo SLEEP.

Secuencia de reset

    Teniendo en cuenta lo que hemos visto sobre POR, PWRT y OST , la secuencia que que se sigue si PWRT y OST están habilitados es:

    El tiempo total variará según el modo del oscilador y la configuración de PWRTE. Por ejemplo, en el modo RC con PWRT deshabilitado el tiempo de reset será mínimo.

Configuración oscilador Alimentación Despertar desde SLEEP
PWRT habilitado PWRT deshabilitado
XT, HS, LP 72 ms + 1024 TOSC 1024 TOSC 1024 TOSC
RC 72 ms - -

Circuito de reset a la alimentación externo

    Este circuito de reset a la alimentación externo es únicamente necesario si la subida de la tensión de alimentación es muy lenta. En la figura siguiente se muestra la configuración necesaria para realizar un reset automático:


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.11

    Algunas reglas básicas para realizar este circuito son:

    Nota: Si en MCLR se aplica una tensión por debajo de VSS se pueden inducir corrientes mayores de 80 mA, que pueden causar problemas. Para solucionar esto se coloca una resistencia de 50 a 100 ohmios para aplicar un nivel bajo a la patilla MCLR en lugar de llevar esta patilla directamente a VSS. En nuestro caso esta resistencia es R2.

    Para terminar habría que decir que, en la mayoría de los casos será más que suficiente con conectar MCLR a la alimentación positiva (VCC) y usar los dispositivos de reset del PIC.

Reset manual

    En el caso de que sea necesario se puede aplicar un reset manual a la patilla MCLR mediante un pulsador y una resistencia.

    La siguiente figura muestra una configuración básica para realizar un reset manual:

    La resistencia de 100 ohmios puede eliminarse del circuito al no existir peligro de que en MCLR aparezcan tensiones menores de VSS. Pero debería mantenerse si se coloca un condensador en paralelo al pulsador.


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.12

Origen del reset

    Es posible distinguir por software el origen del reset, para lo que basta con leer los bits TO (Timer Out) y PD (Power Down) del registro de estado como se muestra el la tabla siguiente:

TO PD ORIGEN DEL RESET
0 0 Desbordamiento WDT en modo SLEEP. Se ha salido del modo SLEEP.
0 1 Desbordamiento WDT en modo normal.
1 0 Activación MCLR en modo SLEEP
1 1 Conexión de alimentación (POR)
Activación MCLR en modo normal

Las interrupciones

    El sistema de interrupciones consiste en un mecanismo por el cual un evento interno o externo, asíncrono respecto al programa, puede interrumpir la normal ejecución de éste produciendo automáticamente un salto a una subrutina, de manera que pueda atender inmediatamente el evento, y retomar luego la ejecución del programa exactamente en donde estaba en el momento de ser interrumpido.

    Este mecanismo es muy útil por ejemplo para el manejo de timers o rutinas que deben repetirse periódicamente (refresco de display, antirrebote para teclado, detección de pulsos externos, recepción de datos, etc.).

Funcionamiento

    Las interrupciones se comportan casi exactamente igual que las subrutinas. Desde el punto de vista del control del programa, al producirse una interrupción se produce el mismo efecto que ocurriría si el programa tuviese un CALL 0004 h (una llamada a una subrutina situada en la posición de memoria 0004h) en el punto en que se produjo la interrupción. En el registro de control del sistema de interrupciones principal (INTCON) existe un bit de habilitación general de interrupciones GIE , que debe ser programado a 1 para que las interrupciones puedan actuar. Al producirse una interrupción, este bit se borra automáticamente para evitar nuevas interrupciones.

    La instrucción RETFIE se utiliza al final de la rutina de interrupción, y es idéntica a un retorno de subrutina, salvo que además coloca a uno automáticamente el bit GIE volviendo a habilitar las interrupciones. Dentro de la rutina de interrupción, el programa deberá comprobar el estado de las banderas de interrupción de cada una de las fuentes habilitadas, para detectar cual fue la que causó la interrupción y así decidir que acción tomar.

    En la siguiente figura se muestra la lógica combinacional que usa el PIC16F84A para detectar una interrupción. Cada interrupción se autoriza manualmente a través del bit XXXE y después generalmente, a través del bit GIE. Ver Registro INTCON .


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.13

Fuentes de interrupción

    La señal que produce la interrupción es en realidad una sola, que resulta de la combinación de todas las fuentes posibles y de los bits de habilitación.

    Las fuentes de interrupción varían con cada versión de PIC, y pueden ser, por ejemplo:

    En el caso del PIC16F84A, las fuentes de interrupción son 4:

Proceso genérico para crear interrupciones

    Como ya sabemos una interrupción sólo puede ejecutar un solo vector de interrupción. Esto significa, que a diferencia de otros microcontroladores, que tienen un vector para cada tipo de interrupción, aquí sólo disponemos de uno para todas las interrupciones. Por consiguiente, en la interrupción tendremos que comprobar las banderas correspondientes para saber que fuente ha sido la que ha causado la interrupción.

    Veamos un ejemplo. En el siguiente fragmento de código, definimos el vector de reset en la posición 0x00, como siempre, y en la instrucción siguiente saltamos al principio del programa. Después definimos el vector de reset, mediante la instrucción ORG 0x04 y a continuación está situado el código perteneciente a la subrutina de la instrucción. Esta termina con la instrucción RETFIE . Si nos damos cuenta, al principio el programa pregunta si la instrucción fue provocada por la patilla de interrupción externo. Antes de retornar el control al programa principal se baja la bandera que provocó la interrupción. La instrucción de retorno vuelve a habilitar las instrucciones.


DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.14

;************************************************;
; ESTE PROGRAMA HACE UN CONTADOR DECIMAL DE UN   ;
; DISPLAY DE 7 SEGMENTOS, SE INCREMENTA CADA VEZ ;
; QUE EL MICRO TIENE UNA INTERRUPCION POR EL PIN ;
; RBO/INT                                        ;
;************************************************;

		LIST P=PIC16F84A

; EN VEZ DE INCLUIR EL ARCHIVO P16F84A.INC
; DEFINIMOS AQUÍ LAS ETIQUETAS QUE USAREMOS
STATUS		EQU	03h
PORTA		EQU	05h 
TRISA		EQU	05h
PORTB		EQU	06h
TRISB		EQU	06h
INTCON		EQU	0Bh
CONTA		EQU	0Ch
LOOPS		EQU	0Dh
LOOPS2		EQU	0Eh
OPCION		EQU	01h

Z		EQU	02h
W		EQU	00h

		ORG	0X00		; VECTOR DE RESET
		GOTO	INICIO		; SALTA AL INICIO DEL PROGRAMA

		ORG	0X04		; VECTOR QUE ATIENDE LA INTERRUPCION

		CALL	RETARDO		; LLAMA A RETARDO
		BTFSC	PORTB,0		; PREGUNTA POR EL PIN RB0
		GOTO	SALE		; SALTA A LA ETIQUETA SALE
		BTFSS	INTCON,1	; CONFIRMA SI LA INTERRUPCION FUE
					; CAUSADA POR EL PIN INT
		GOTO	SALE		; SALTA A LA ETIQUETA SALE
		INCF	CONTA		; INCREMENTA EL CONTADOR
		MOVF	CONTA,W		; CARGA W CON EL CONTADOR
		XORLW	0X0A		; XOR PARA VER SI ES IGUAL A 0Ah
		BTFSC	STATUS,Z	; PRUEBA SI EL CONTADOR LLEGÓ A 0Ah
		CLRF	CONTA		; SI LLEGÓ A 10 PASA A 0

		MOVF	CONTA,W		; PASA EL DATO AL DISPLAY
		MOVWF 	PORTA 
		CALL	RETARDO		; LLAMA A RETARDO

SALE 		BCF	INTCON,1	; PONE A CERO LA BANDERA DE INTERRUPCION
		RETFIE			; REGRESA AL PROGRAMA PRINCIPAL

RETARDO
		MOVLW	.100 
		MOVWF	LOOPS
TOP2		MOVLW	.110
		MOVWF	LOOPS2
TOP		NOP
		NOP
		NOP
		NOP
		NOP
		NOP
		DECFSZ LOOPS2
		GOTO TOP
		DECFSZ LOOPS
		GOTO TOP2
		RETLW 0
INICIO
		.......

DISPOSITIVOS LÓGICOS MICROPROGRAMABLES Características especiales del PIC16F84A 7.15

Índice / Introducción Registros del PIC16F84A El lenguaje ensamblador del PIC16F84A