;Curso básico de microcontroladores PIC.  --- micropic@lleida.org
;prac_13.asm - Sirena temporizada programable con el valor de PORTA

	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_0	equ	0x0C		;primer registro para el bucle de retardo 
CONTA_1	equ	0x0D		;segundo registro para el bucle de retardo
CONTA_2	equ	0x0E		;tercer registro para el bucle de retardo

	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	movf	PORTA,W	;pasa valor PORTA a W
	addlw	0x01		;suma 1 para que nunca sea 0. (W = PORTA+1)
	movwf	CONTA_2	;conta_2 = repeticiones del bucle tiempo "base"	
	bsf	PORTB,0		;activa zumbador
	call	DELAY_VAR	;retardo variable
	bcf	PORTB,0		;desactiva zumbador
	movlw	.25
	movwf	CONTA_2	;carga conta_3 con 25 para...
	call	DELAY_VAR	;...obtener unos 3 segundos antes de...
	goto	BUCLE		;...volver a activar zumbador.


DELAY_VAR
	decfsz	CONTA_0,F
	goto	DELAY_VAR
	decfsz	CONTA_1,F
	goto	DELAY_VAR
	decfsz	CONTA_2,F	;aquí está el valor para variar el retardo
	goto	DELAY_VAR
	return

	end
