;Curso básico de microcontroladores PIC.  --- micropic@lleida.org
;prac_16.asm - Programa que cuenta los pulsos introducidos por el sensor optico de corte de haz ;infrarrojo H21A conectado a RA4

	list	p=16F84		;indica al ensamblador el modelo de PIC
	include	"P16F84.inc"	;incluye librería de definiciones para el PIC16F84
	__config	_CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC ;palabra de configuración

CONTA	equ	0x0C		;registro para el bucle de pausa 

	org	0x00		;primera posición de la memoria de programa
	goto	INICIO		;salto a la etiqueta inicio
	org	0x05		;para pasar por encima del vector de interrupción

INICIO	bsf	STATUS,RP0	;selecciona banco 1 del área de datos
	clrf	TRISB		;configura PORTB todo salidas
	movlw	b'00011111'
	movwf	TRISA		;configura PORTA todo entradas
	bcf	STATUS,RP0	;vuelve a banco 0 del área de datos
	clrf	PORTB		;empieza apagando todos los Led
	
BUCLE	btfsc	PORTA,4		;cambia a 0 RA4 ?
	goto	BUCLE		;no ha brincado, RA4 = 1, goto BUCLE
	call	PAUSA		;si, pequeño retardo antirrebotes
	btfsc	PORTA,4		;sigue a 0 RA4 ?
	goto	BUCLE		;no, falso pulso, goto BUCLE
	incf	PORTB,F		;si, incrementa PORTB y guarda en PORTB (,F)
ESPERA	btfss	PORTA,4		;vuelva a ser 1 RA4 ?
	goto	ESPERA		;no, goto ESPERA
	goto	BUCLE		;si, vuelve a esperar siguiente pulso

;subrutina de pausa

PAUSA	decfsz	CONTA,F
	goto	PAUSA
	return				
			
	end	
