; -----------------------------------------------------------------------
; Plantilla generada por Piklab
    #include <p16f88.inc>

; -----------------------------------------------------------------------
; Bits de configuración: adapte los parámetros a su necesidad... sisi, apague TODO menos el timer de encendido que no se para que sirve... 
    __CONFIG _CONFIG1, _WDT_OFF & _PWRTE_ON & _INTRC_IO & _MCLR_OFF & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _WRT_PROTECT_OFF & _DEBUG_OFF & _CCP1_RB0 & _CP_OFF
    __CONFIG _CONFIG2, _FCMEN_OFF & _IESO_OFF

; Variables
RP0	equ	0x005
;--- Salidas ---
si	equ	0x0	;Sirena interna (a relay via transistor)
se	equ	0x1	;Sirena externa (idem)
led	equ	0x2	;Led activada/desactivada (directo a masa onboard)
;--- Entradas ---
Z1	equ	0x4	;Zona 1, temporiza 30 seg (en realidad un poco mas por rutinas de testeo de otras zonas)
Z2	equ	0x5	;Zona 2, instantanea
L	equ	0x7	;Señal del teclado: 0 activa, 1 desactiva
d1	equ	0x020	;<<<< Variables para retardados
d2	equ	0x021
d3	equ	0x022
d4	equ	0x023
d5	equ	0x024
d6	equ	0x025
d7	equ	0x026	;>>>>

STARTUP CODE 0x000

	bsf	STATUS,RP0		
	MOVLW 	b'01110110'		;Oscilador de 4 MHz
	MOVWF 	OSCCON		
X	BTFSS	OSCCON,2	;Preguntando si ya se estabilizó
	GOTO	X		;el cristal interno a 4 MHz

  	bcf	STATUS,RP0 
	CLRF 	 PORTA 
	CLRF	PORTB
	bsf	STATUS,RP0	;Desactivando Comparadores
	MOVLW      07h 		;
	MOVWF      CMCON	;
	CLRF 	 0x09B 	
	movlw	b'11111000'	;5 salidas, 3 entradas
	movwf	TRISB		; al portb
	movlw	00h
	movwf	TRISA		;porta no se usa, seteado todo a salidas
	bcf	STATUS,RP0	;Aquí regresamos al banco 0

PROG CODE
desactivada
	bcf	PORTB,si	;Apaga las sirenas
	bcf	PORTB,se	;^^^^^ ^^^ ^^^^^^^
	bcf	PORTB,led	; y el led
	btfsc	PORTB,L		;Se queda forever
	goto	$-1		;esperando ser activada
				;cuando se activa sigue asi...
	bsf	PORTB,led	;Enciende el led

activada
	btfsc	PORTB,L		;Si L=1
	goto	desactivada	;desactiva
	btfss	PORTB,Z1	;Si Z1=0
	goto	entrando	;entro alguien por la puerta
	btfss	PORTB,Z2	;Si Z2=0
	goto	suena		;entraron por la ventana (al estilo juez) sona la sirena
	goto	activada	;y queda haciendo esto por siempre (fatal error: luego de un minuto salta a suena)


entrando			;si salta Zona1, loopea 30seg para ingresar codigo de desactivacion... sino suena
	movlw	0x11		;setea el delay
	movwf	d1
	movlw	0x66
	movwf	d2
	movlw	0x42
	movwf	d3		;a 30 seg
entrando_del			;hace el delay de un poco mas de 30seg por chekeo de otras zonas instantaneas
	bsf	PORTB,led
	btfsc	PORTB,L		;Si L=1
	goto	desactivada	;desactiva
	btfss	PORTB,Z2	;Si Z2=0
	goto	suena		;entraron por la ventana ... sona la sirena	
	decfsz	d1, f		;<<<< al fin el retardo
	goto	$+2
	decfsz	d2, f
	goto	$+3
	bcf	PORTB,led
	decfsz	d3, f
	goto	entrando_del
	goto	suena		;>>>> si despues de 30ytantos segundos no la desactivaste... suena


suena
	movlw	0x54	;<<<<<< Este es facil, setea un retardo de 5min
	movwf	d1
	movlw	0xA1
	movwf	d2
	movlw	0xFD
	movwf	d3
	movlw	0x02
	movwf	d4	;>>>>>>> 300 seg

	bsf	PORTB,si	;prende las dos
	bsf	PORTB,se	;sirenas
sonando				;y dale que va...
	btfsc	PORTB,L		;Si L=1
	goto	desactivada	;desactiva
	decfsz	d1, f
	goto	$+2
	decfsz	d2, f
	goto	$+2
	decfsz	d3, f
	goto	$+2
	decfsz	d4, f
	goto	sonando		;al final son 5 min y chirola por el control del estado
	
	bcf	PORTB,si	;se aburre de sonar
	bcf	PORTB,se	;y apaga las sirenas :(
	goto	activada	;pero sigue activada la guacha
	

END		;Se fini... tan simple y no anda ...
