'***************************************************************************************
'NOMBRE: Temporizador_WC_10
'MICRO: PIC12f675
'DESCRIPCION: Automatismo par el control de un ventilador de WC
'FECHA/AUTOR: By COS, 09/06
'Version 1.0
'oscilador interno a 4Mhz
'***************************************************************************************
' ************************ Declaracion de variables ************************************
Dim timer_base As Word 'base patron para los timer
Dim timer_base_aux As Word 'tiempo en mSeg, en el que se basaran los timer
Dim contador As Byte 'controla la fase en la que se encuentran las temporizacines
Dim timer1_sg As Word 'primera base de tiempos, para el control de rutinas
Dim timer1 As Word 'indica el tiempo para la base timer_sg
Dim led_flash As Byte 'permite que se ejecute la rutina del parpadeo de los led
Dim flash As Byte 'indica el proximo estado de los led, apagado o encendido
' ************************* Asignacion de valores de las variables *******
timer_base = 0
timer_base_aux = 1000
contador = 0
timer1_sg = 0
timer1 = 30
led_flash = 0
flash = 0
' ************************ Inicializacion de registros generales y de E/S **************
VRCON = 0x00 'vref off(power off the comparator voltage)
ANSEL = 0x00 'off ADC
TRISIO = 0x00 'tri-state pins, are outputs
GPIO = 0x00 'clear port
CMCON = 0x07 'comparator off
' ********************** Estado inicial de los dispositivos a controlar ****************
Gosub off_rele 'desconecta el rele
Gosub on_ledverde 'activa el led verde
Gosub off_ledrojo 'apaga el led rojo
WaitMs 1000 'pausa de 1Seg.
' *********** habilitacion de interrupciones y programacion del timer1 *****************
INTCON.PEIE = 1 'bit de habilitacion de interrupciones de perifericos
T1CON.TMR1ON = 1 'bit de habilitacion del temporizador timer1
T1CON.TMR1CS = 0 'bit de seleccion de reloj para el timer1, interno Fosc/4
T1CON.T1CKPS0 = 0 'bit de seleccion del prescaler para el reloj del timer1
T1CON.T1CKPS1 = 0 'bit de seleccion del prescaler para el reloj del timer1
TMR1H = 0xfc 'carga el byte alto del registro del tiemr1 (1mSeg)
TMR1L = 0x18 'carga el byte bajo del registro del timer1 (1mSeg)
PIE1.TMR1IE = 1 'activa la interrupcion del timer1
Enable 'INTCON.GIE habilita las interrupciones generales
' ************* Rutina del programa ****************************************************
main:
If contador = 0 Then 'primera fase del control de tiempos y maniobras
If timer1_sg >= timer1 Then 'si terminan los 30Seg., base tiempos 120Seg
contador = 1
timer1 = 120
timer1_sg = 0
Gosub off_ledverde 'desconecta rele, y luz apagada, circuito off
Gosub on_ledrojo
Gosub on_rele
Endif
Endif
If contador = 1 Then 'segunda fase del control de tiempos y maniobras
If timer1_sg >= timer1 Then 'pasan los 120Seg, reconfigura para 10Seg.
contador = 2
timer1 = 10
timer1_sg = 0
Gosub off_rele 'rele off y luz apagada, el circuito queda off
led_flash = 1 'activa el parpadeo de los led
Endif
Endif
If contador = 2 Then 'tercera fase del control de tiempos y maniobras
If timer1_sg >= timer1 Then 'pasan los 10seg. reconfigura a 120seg
led_flash = 0 'desactiva el parpadeo de los led
contador = 1 'se cambia la fase de temporizacion
timer1 = 120 'base tiempos timer1_sg, para que cuente 2 minutos
timer1_sg = 0 'activa el contaje de la base de tiempos timer1_sg
Gosub on_rele 'activa el rele
Gosub on_ledverde 'activa el led verde
Gosub on_ledrojo 'activa el led rojo
Endif
Endif
Goto main
End
'********************* Subrutinas del programa ****************************************
on_ledverde: 'prende el led verde
GPIO.5 = 0
Return
off_ledverde: 'apaga el led verde
GPIO.5 = 1
Return
on_ledrojo: 'enciende el led rojo
GPIO.4 = 0
Return
off_ledrojo: 'apaga el led rojo
GPIO.4 = 1
Return
on_rele: 'activa el rele
GPIO.0 = 1
GPIO.1 = 0
Return
off_rele: 'desactiva el rele
GPIO.0 = 0
GPIO.1 = 1
Return
off_todo: 'todos los elementos a off
GPIO.5 = 1
GPIO.4 = 1
GPIO.0 = 0
GPIO.1 = 1
Return
'*********************** Rutina de las interrupciones***********************************
On Interrupt 'Comienzan las rutinas de las interrupciones, desactiva las interrupciones
Save System 'Guarda los valores del sistema
'--------------------------------------RUTINA TIMER_1-----------------------------------
If PIR1.TMR1IF = 1 Then 'comprueba interrupcion activa (solo hay una)
timer_base = timer_base + 1 'incrementa con cada desbordamiento timer1
If timer_base >= timer_base_aux Then 'control del numero desbordamientos
If timer1_sg < timer1 Then timer1_sg = timer1_sg + 1 'base tiempos
If led_flash > 0 Then 'hace que los led se vuelvan intermitentes
If flash = 0 Then 'desconecta los led
GPIO.5 = 0
GPIO.4 = 0
flash = 1 'permite que se conecten los led
Else
GPIO.5 = 1 'conecta los led
GPIO.4 = 1
flash = 0 'permite que se desconecten los led
Endif
Endif
timer_base = 0 'reinicializa el valor de la base de tiempos patron
Endif
Endif
TMR1H = 0xfc 'carga el registro del timer1, para que desborde cada 1mSeg.
TMR1L = 0x18
PIR1.TMR1IF = 0 'borra el flag de salto del tmr1
Resume 'activa las interrupciones y retorna al programa
END ' **********************************