;****************************** CONFIGURACION *********************
__CONFIG 0X3194
#INCLUDE <P12F675.INC>
LIST P=12F675
CBLOCK 0X20
PDel0
PDel1
PDel2
CONTADOR
REGISTROALTA
REGISTROBAJA
ENDC
;*********FIN DE CONFIGURACION Y DECLARACION DE REGISTROS *************
;*** CONFIGURACION DEL PIC ***
INICIO
BCF STATUS,5 ;***COMPARADORES ***
CLRF GPIO
MOVLW B'00000111'
MOVWF CMCON
BSF STATUS,5 ;***ENTRADAS Y SALIDAS ***
MOVLW B'00001001' ;SEGUN EL DATASHEET EL PIN 3
MOVWF TRISIO ;SOLO FUNCIONA COMO ENTRADA
MOVLW B'00010001'
MOVWF ANSEL ;*** ADC CONVERSOR ***
BCF STATUS,5
MOVLW B'10000001'
MOVWF ADCON0
CALL DEMORA30U ;*** DEMORA DE 30 MICROSEGUNDOS ***
BCF STATUS,5
MOVLW D'5'
MOVWF CONTADOR
BSF ADCON0,GO_DONE
CALL DEMORA30U
ESPERA ;*** ESPERA INICIAL DE 5 SEGUNDOS APROX. ***
BSF GPIO,4
CALL DEMORA500M ;*** DEMORA DE 500 MILISEGUNDOS ***
BCF GPIO,4
CALL DEMORA500M
DECFSZ CONTADOR
GOTO ESPERA
MOVLW D'5'
MOVWF CONTADOR
CONVERSION ;*** CONVERSION DE ANALOGICO A DIGITAL ***
BTFSC ADCON0,GO_DONE
GOTO CONVERSION
MOVLW B'11000011' ;*** COMPARACION DE REGISTROS ***
MOVWF REGISTROALTA ;PARA SABER SI EL VALOR INGRESADO
MOVF ADRESL,0 ;ES ALTA O BAJA TENSION
SUBWF REGISTROALTA,0
BTFSC STATUS,Z ;SON DIFERENTES?
GOTO ALTATENSION ;NO, VE A ALTA TENSION
BTFSS STATUS,C ;SI, PREGUNTA SI W ES MAYOR QUE REGISTROALTA
GOTO ALTATENSION ;SI, VE A ALTA TENSION
MOVLW B'10001110' ;NO, HACE LA COMPRACION
MOVWF REGISTROBAJA
MOVF ADRESL,0
SUBWF REGISTROBAJA,0
BTFSC STATUS,Z ;SON DIFERENTES?
GOTO BAJATENSION ;NO, VE A BAJA TENSION
BTFSS STATUS,C ;SI, PREGUNTA SI W ES MAYOR QUE REGISTROBAJA
GOTO ENCENDIDO ;SI, VE A ENCENDIDO
GOTO BAJATENSION ;NO, VE A BAJA TENSION
ALTATENSION ;*** ENCIENDE UN LED ROJO ***
MOVLW B'000010'
MOVWF GPIO
BSF ADCON0,GO_DONE
CALL DEMORA30U
GOTO CONVERSION ;*** HACE DE NUEVO LA CONVERSION ADC Y COMPARA ***
BAJATENSION ;*** ENCIENDE UN LED AMARILLO ***
MOVLW B'000100'
MOVWF GPIO
BSF ADCON0,GO_DONE
CALL DEMORA30U
GOTO CONVERSION ;*** HACE DE NUEVO LA CONVERSION ADC Y COMPARA ***
ENCENDIDO ;*** ENCIENDE UN LED VERDE ***
MOVLW B'110000'
MOVWF GPIO
BSF ADCON0,GO_DONE
CALL DEMORA30U
GOTO CONVERSION ;*** HACE DE NUEVO LA CONVERSION ADC Y COMPARA ***
;*** RETARDOS ***
DEMORA500M movlw .239 ; 1 set numero de repeticion (B)
movwf PDel2 ; 1 |
PLoop1 movlw .232 ; 1 set numero de repeticion (A)
movwf PDel1 ; 1 |
PLoop2 clrwdt ; 1 clear watchdog
PDelL1 goto PDelL2 ; 2 ciclos delay
PDelL2 goto PDelL3 ; 2 ciclos delay
PDelL3 clrwdt ; 1 ciclo delay
decfsz PDel1, 1 ; 1 + (1) es el tiempo 0 ? (A)
goto PLoop2 ; 2 no, loop
decfsz PDel2, 1 ; 1 + (1) es el tiempo 0 ? (B)
goto PLoop1 ; 2 no, loop
PDelL4 goto PDelL5 ; 2 ciclos delay
PDelL5 goto PDelL6 ; 2 ciclos delay
PDelL6 goto PDelL7 ; 2 ciclos delay
PDelL7 clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
DEMORA30U
movlw .6 ; 1 set numero de repeticion
movwf PDel0 ; 1 |
PLoop0
clrwdt ; 1 clear watchdog
decfsz PDel0, 1 ; 1 + (1) es el tiempo 0 ?
goto PLoop0 ; 2 no, loop
clrwdt ; 1 ciclo delay
return ; 2+2 Fin.
END