
	LIST	P=16F84A
	INCLUDE 	<P16F84A.INC>
	__CONFIG _CP_OFF & _WDT_OFF & _XT_OSC ; & _BODEN_OFF & _LVP_OFF

PUERTOA			EQU	05
VENT_BAJA		EQU	.0
SW_LUCES		EQU .1
SW_BALIZA		EQU	.2
SW_VENT			EQU	.3

PUERTOB			EQU	06
RECEPTOR		EQU	.0
VENT_ALTA		EQU	.1
BUZZER			EQU	.2
PUERTA			EQU	.3
DAR_CORRIENTE	EQU	.4
SIRENA			EQU	.5
LUCES			EQU	.6
BALIZA			EQU	.7

ESTADO			EQU	36
ACTIVADO		EQU	.0
CODIGO_OK		EQU	.1

CODIGO			EQU	39
J				EQU	48
K				EQU	49
L				EQU	50
M				EQU	38
TONO			EQU	37

			ORG	0X00
			GOTO 	CONFIGURACION
			ORG	0X05

	
;*************************** configuracion del puerto *****************

CONFIGURACION
;----------------------- CONFIGURO EL PUERTO A ------------------------
		BSF		STATUS,RP0
		MOVLW	B'00001110'
		MOVWF	TRISA
		BCF 	STATUS,RP0
		MOVLW	B'00000000'
		MOVWF	PUERTOA
;----------------------- CONFIGURO EL PUERTO B ------------------------
		BSF		STATUS,RP0
		MOVLW	B'00001001'
		MOVWF	TRISB
		BCF 	STATUS,RP0
		MOVLW	B'00000000'
		MOVWF	PUERTOB

;**************************** INICIO *********************************

		BCF		ESTADO,ACTIVADO
		BSF		PUERTOB,DAR_CORRIENTE		
INICIO

		

		BCF		ESTADO,CODIGO_OK
		BTFSC	PUERTOB,RECEPTOR	;*** REVISAR RECEPTOR ****
		CALL	VER_CODIGO

		BTFSC	ESTADO,CODIGO_OK		
		GOTO	DEFINIR_ACCION_REMOTO

		BTFSS	PUERTOB,PUERTA		;*** REVISAR PUERTA ****
		GOTO	PUERTA_ABIERTA		;**** ACTIVO EN 0 ****

		BTFSS	PUERTOA,SW_LUCES	;*** PRENDO O APAGO LAS LUCES **
		CALL	CONTROLAR_LUCES

		BTFSS	PUERTOA,SW_BALIZA	;*** PRENDO O APAGO LA BALIZA **
		CALL	CONTROLAR_BALIZA

		BTFSS	PUERTOA,SW_VENT	;*** VELOCIDAD DEL VENTILADOR **
		CALL	CONTROLAR_VENTILADOR

		GOTO 	INICIO

;********** DEFINIR ACCION DEL CONTROL REMOTO CON CODIGO CORRECTO ********

DEFINIR_ACCION_REMOTO
	
		BTFSS	ESTADO,ACTIVADO
		GOTO	ACTIVAR
		GOTO	DESACTIVAR

ACTIVAR
	
		BTFSS	PUERTOB,PUERTA
		GOTO	NO_ACTIVAR
		BSF		ESTADO,ACTIVADO		;** ACTIVO ALARMA **
		BCF		PUERTOB,DAR_CORRIENTE

		BSF		PUERTOB,SIRENA
		CALL	PAUSA300
		BCF		PUERTOB,SIRENA
		CALL	PAUSA300

		BSF		PUERTOB,SIRENA
		CALL	PAUSA300
		BCF		PUERTOB,SIRENA
		CALL	PAUSA300

		CALL 	PAUSA1000

		GOTO 	INICIO

DESACTIVAR
	
		BCF		ESTADO,ACTIVADO
		BSF		PUERTOB,DAR_CORRIENTE
		BCF		PUERTOB,SIRENA

		BSF		PUERTOB,SIRENA
		CALL	PAUSA300
		BCF		PUERTOB,SIRENA
		CALL	PAUSA300

		CALL 	PAUSA1000

		GOTO	INICIO
				

;************************** CODIGO CORRECTO ******************************
PUERTA_ABIERTA
	
	BTFSC	ESTADO,ACTIVADO
	GOTO	ROBANDO
	GOTO 	INICIO

;********************* PUERTA ABIERTA CON ALARMA ACTIVADA ****************
ROBANDO
	BSF		PUERTOB,SIRENA
	BCF		PUERTOB,DAR_CORRIENTE
	GOTO 	INICIO




;************** NO ACTIVAR ALARMA POR ESTAR LA PUERTA ABIERTA ************
NO_ACTIVAR

	BSF		PUERTOB,SIRENA
	CALL	PAUSA200
	BCF		PUERTOB,SIRENA
	CALL	PAUSA200

	BSF		PUERTOB,SIRENA
	CALL	PAUSA200
	BCF		PUERTOB,SIRENA
	CALL	PAUSA200

	BSF		PUERTOB,SIRENA
	CALL	PAUSA200
	BCF		PUERTOB,SIRENA
	CALL	PAUSA200

	BSF		PUERTOB,SIRENA
	CALL	PAUSA200
	BCF		PUERTOB,SIRENA
	CALL	PAUSA200

	GOTO 	INICIO


;***************** LEER CODIGO ENVIADO POR EL TRANSMISOR *********************
;************* SI EL CODIGO ES CORRECTO   ==>  ESTADO,CODIGO_OK = 1 **********
;************* SI EL CODIGO ES INCORRECTO ==>  ESTADO,CODIGO_OK = 0 **********

VER_CODIGO

	BCF		ESTADO,CODIGO_OK	
	CALL 	PAUSA5

	CALL 	PAUSA10
	BTFSC	PUERTOB,RECEPTOR		;****** BIT_0 = 0 ******
	RETURN

	CALL 	PAUSA10
	BTFSS	PUERTOB,RECEPTOR		;****** BIT_1 = 1 ******
	RETURN

	CALL 	PAUSA10
	BTFSC	PUERTOB,RECEPTOR		;****** BIT_2 = 0 ******
	RETURN

	CALL 	PAUSA10
	BTFSC	PUERTOB,RECEPTOR		;****** BIT_3 = 0 ******
	RETURN

	CALL 	PAUSA10
	BTFSS	PUERTOB,RECEPTOR		;****** BIT_4 = 1 ******
	RETURN
	
	CALL 	PAUSA10
	BTFSC	PUERTOB,RECEPTOR		;****** BIT_5 = 0 ******
	RETURN
	
	CALL 	PAUSA10
	BTFSS	PUERTOB,RECEPTOR		;****** BIT_6 = 1 ******
	RETURN
	
	CALL 	PAUSA10
	BTFSS	PUERTOB,RECEPTOR		;****** BIT_7 = 1 ******
	RETURN

	CALL	PAUSA10
	BTFSS	PUERTOB,RECEPTOR		;****** BIT_8 = 1 ******
	RETURN

	CALL 	PAUSA10
	BTFSS	PUERTOB,RECEPTOR		;****** BIT_9 = 1 ******
	RETURN

	CALL 	PAUSA10
	BTFSC	PUERTOB,RECEPTOR		;****** BIT_10 = 0 ******
	RETURN

	CALL 	PAUSA10
	BTFSS	PUERTOB,RECEPTOR		;****** BIT_11 = 1 ******
	RETURN

	CALL 	PAUSA10
	BTFSC	PUERTOB,RECEPTOR		;****** BIT_12 = 0 ******
	RETURN
	
	CALL 	PAUSA10
	BTFSC	PUERTOB,RECEPTOR		;****** BIT_13 = 0 ******
	RETURN
	
	CALL 	PAUSA10
	BTFSS	PUERTOB,RECEPTOR		;****** BIT_14 = 1 ******
	RETURN
	
	CALL 	PAUSA10
	BTFSS	PUERTOB,RECEPTOR		;****** BIT_15 = 1 ******
	RETURN

	CALL 	PAUSA10
	CALL 	PAUSA10

	BSF		ESTADO,CODIGO_OK
	RETURN
;*************************************************************************
;*************** CONTROLO EL ESTADO DE LAS LUCES *************************
;*************************************************************************
CONTROLAR_LUCES
				BTFSC	PUERTOB,LUCES
				GOTO	APAGAR_LUCES
				BSF		PUERTOB,LUCES	;** PRENDO LAS LUCES **
				CALL	BEEP
				RETURN
APAGAR_LUCES
				BCF		PUERTOB,LUCES	;** APAGO LAS LUCES **
				CALL	BEEP
				RETURN				
;*************************************************************************
;*************** CONTROLO EL ESTADO DE LA BALIZA *************************
;*************************************************************************
CONTROLAR_BALIZA
				BTFSC	PUERTOB,BALIZA
				GOTO	APAGAR_BALIZA
				BSF		PUERTOB,BALIZA	;** PRENDO LA BALIZA **
				CALL	BEEP
				RETURN
APAGAR_BALIZA
				BCF		PUERTOB,BALIZA	;** APAGO LA BALIZA **
				CALL	BEEP
				RETURN				
;*************************************************************************
;*************** CONTROLO LA VELOCIDAD DEL VENTILADOR ********************
;*************************************************************************
CONTROLAR_VENTILADOR
				BTFSC	PUERTOB,VENT_ALTA
				GOTO	APAGAR_VENT_TOTAL
				BTFSC	PUERTOA,VENT_BAJA
				GOTO	PRENDER_VENT_ALTA
				BSF		PUERTOA,VENT_BAJA	;** PRENDO LA BAJA **
				CALL	BEEP
				RETURN

APAGAR_VENT_TOTAL
				BCF		PUERTOA,VENT_BAJA	;** APAGO LA BAJA **
				BCF		PUERTOB,VENT_ALTA	;** APAGO LA ALTA **
				CALL	BEEP
				RETURN
PRENDER_VENT_ALTA
				BCF		PUERTOA,VENT_BAJA	;** APAGO LA BAJA **
				BSF		PUERTOB,VENT_ALTA	;** PRENDO LA ALTA **
				CALL	BEEP
				RETURN				

;*************************************************************************

;*************************************************************************

;*************************************************************************
;******************************** BEEP ***********************************
;*************************************************************************
BEEP
				BSF		PUERTOB,BUZZER
				CALL	PAUSA100
				BCF		PUERTOB,BUZZER
				CALL	PAUSA1000
;*************************************************************************
;*************************************************************************
;************************** subrutina de pausa 1S *****************
	
PAUSA1000
				CALL	PAUSA500B
				CALL	PAUSA500B
				RETURN

PAUSA500B
				MOVLW		.255
				MOVWF		J
jloopB			MOVWF	K
kloopB			DECFSZ	K,1
				GOTO	kloopB
				DECFSZ	J,1
				GOTO	jloopB
				NOP
				NOP
				RETURN

;************************** subrutina de pausa 500mS *****************
PAUSA500
				MOVLW	.100
				MOVWF	J
jloop			MOVWF	K
kloop			DECFSZ	K,1
				GOTO	kloop
				DECFSZ	J,1
				GOTO	jloop
				NOP
				NOP
				RETURN
;************************** subrutina de pausa 200mS *****************
PAUSA200
				MOVLW	.150
				MOVWF	J
jloopS			MOVWF	K
kloopS			DECFSZ	K,1
				GOTO	kloopS
				DECFSZ	J,1
				GOTO	jloopS
				NOP
				NOP
				RETURN
;************************** subrutina de pausa 100mS *****************
PAUSA100
				MOVLW	.75
				MOVWF	J
jloopS1			MOVWF	K
kloopS1			DECFSZ	K,1
				GOTO	kloopS1
				DECFSZ	J,1
				GOTO	jloopS1
				NOP
				NOP
				RETURN


;************************** subrutina de pausa 300mS *****************
PAUSA300
				MOVLW	.200
				MOVWF	J
jloopP			MOVWF	K
kloopP			DECFSZ	K,1
				GOTO	kloopP
				DECFSZ	J,1
				GOTO	jloopP
				NOP
				NOP
				RETURN

	;************ subrutina de pausa 10mS *****************
PAUSA10
				CALL 	PAUSA5
				CALL	PAUSA5
				RETURN
	;************ subrutina de pausa 5mS *****************
PAUSA5
				MOVLW	.1	
				MOVWF	J
jloop2			MOVLW	.8
				MOVWF	K
kloop2			DECFSZ	K,1
				GOTO	kloop2
				DECFSZ	J,1
				GOTO	jloop2
				NOP
				NOP
				RETURN


	end

