;	06-04-2008
;	Practica 4.ASM
;	Contador de piezas de lotes de nueve unidades
;	PIC 16f84a
;	MPLAB 8.00
;	PROTEUS 7.2 SP2
;	Guido Carmona Girón
;
;---------------Encabezado-------------------------------------------

	LIST	P=16F84A,				; usar PIC 16F84A
	#include <p16f84A.inc>
	errorlevel      -302    			; Eliminar banco mensajes
	__CONFIG _CP_OFF&_PWRTE_ON&_WDT_OFF&_XT_OSC	; code protec		off
							; power up timer	on
							; watchdog		off
							; osc: 4 MHz		XT
;-------Configuración de puertos-------------------------------------

	ORG	0x00               
	GOTO	inicio
	ORG	0x04          
	GOTO	ISR
	ORG	0X05

inicio	BSF	STATUS,RP0	; configurando puertos
	MOVLW	0x10
	MOVWF	TRISA		; RA0-RA3 = SALIDA
	MOVLW	0xFF		; PORTB = ENTRADA
	MOVWF	TRISB
	BCF	STATUS,RP0

;-------Habilitación de interrupciones---------------------------------

	BSF	INTCON,GIE	; habilitamos todas las interrupciones
	BSF	INTCON,INTE	; que sean interrupciones externas

;-------Programa Principal---------------------------------------------

	CLRF	PORTA
espera	SLEEP
	GOTO	espera		; El micro pasa a bajo consumo

ISR	MOVF	PORTA,W		; pasamos lo que hay en PORTA a W
	XORLW	B'1001'		; compara para saber si terminó la cuenta 
	BTFSC	STATUS,Z	; si no terminó salta una linea
	GOTO	reini		; y si terminó irá a reiniciarla
	INCF	PORTA,F		; incrementa en 1 PORTA y lo retiene
	BCF	INTCON,INTF	; borro bandera de interrupción	
	RETFIE			; regresa al modo SLEEP
reini	CLRF	PORTA
	BCF	INTCON,INTF	; borro bandera de interrupción	
	RETFIE
;-------------------------------------------------------------------------
	END			; fin del programa
;-------------------------------------------------------------------------