Programar riego de dos zonas con un solo control

Hola :)
Tengo dos zonas de riego en el jardín y solo un programador con una salida en la domotica de casa donde me deja programar a que hora encender y a que hora apagar con una salida de relé.
Bien, tengo pensado conectar a una entrada del pic dicho relé y dos relés a la salida del mismo.
La idea es que cuando reciba señal en la entrada active el primer relé y cuando deje de recibir la señal active el segundo por el mismo periodo de tiempo.
Tengo el esquema del circuito ya hecho pero no se como programar el pic.
Mi nivel de programación es básico, todo lo que se lo he aprendido yo solo con un libro llamado Microcontrolador pic16f84a desarrollo de proyectos, el lenguaje que uso es ensamblador, y el programa es mlab ide.
Yo había pensado en lo siguiente:
Código:
    __CONFIG   _CP_OFF &  _WDT_OFF & _PWRTE_ON & _XT_OSC
    LIST       P=16F84A
    INCLUDE  <P16F84A.INC>

    CBLOCK  0x0C
    ENDC
    
#DEFINE       ENTRADA        PORTB,7              ;La señal que llega de la domotica
#DEFINE       RIEGO_1            PORTA,3             ;Las salidas hacia las dos zonas de riego
#DEFINE       RIEGO_2            PORTA,4        






; ZONA DE CÓDIGOS *******************************************************************   
    ORG    0
Inicio
    bsf    STATUS,RP0        ; Acceso al Banco 1.
    clrf    TRISA        ; Las líneas del Puerto A configuradas como salida.
    movlw    b\'11111111\'        ; Las 8 líneas del Puerto B configuradas como entrada.
    movwf    TRISB
    bcf    OPTION_REG,NOT_RBPU    ; Activa las resistencias de Pull-Up del Puerto B.
    bcf    STATUS,RP0        ; Acceso al Banco 0.
    
    
Principal
    bcf    RIEGO_1        
    bcf    RIEGO_2


    
    
    
Inicio
    btfsc    ENTRADA                ;hay un 0? Llega señal domotica?
    goto    Inicio                ;no
    call    Retardo_20ms        ;si
    btfsc    ENTRADA                ;sigue 0? o es rebote
    goto    Inicio                ;no_es rebote
                                ;si
    bsf    RIEGO_1                    ;Pone a regar la primera zona
    
    ;Aquí es donde debería de usar el registro w empezando en cero 

Aqui                            
    ;Aqui sumaria 1  al registro w no se como hacerlo   
    call    Retardo_1s
    btfsc    ENTRADA        ;compruebo si sigue llegando señal
    goto    Termina riego_1        ;no llega
    goto    Aqui                ;si llega
    
;si todo ba bien estaria sumando 1 al registro w cada segundo para después usarlo de contador para la segunda zona


Termina riego_1            ;cuando deja de recibir señal de la domotica
    bcf    RIEGO_1            ;para el riego de la primera zona
    bsf    RIEGO_2            ;Pone a regar la segunda zona
Aqui_2    
    ;Aqui restaria uno al registro w no se como hacerlo
    call    Retardo_1s
    ;Aqui comprobaria si el registro w es 0 y si lo es,  se saltaria la siguiente instrucción y si no seguiría 
    goto    Aqui_2
    
    bcf    RIEGO_2            ;para el riego de la segunda zona
    
    goto     Inicio

    INCLUDE  <RETARDOS.INC>    ; Librería con subrutinas de retardo.
    END                ; Fin del programa.
El tiempo de riego no va a superar los diez minutos,por lo que no se si 600sg desbordarían el registro w que es de 8 bit, en ese caso pienso en que los tiempos de suma sean de 5 segundos en vez de 1 así se quedaría en 120 (600 sg en tramos de 5sg).

Como veis soy un perfecto novato en todo esto y no me va a venir nada mal algo (mucha) de ayuda:D:D
Gracias de antemano a todos ...
 
Última edición por un moderador:
Amigo si publicas el circuito sera de ayuda para entender mas facilmente el programa. Respecto al registro de 8 bits, recuerda que permite albergar 2^8 es decir 256 valores posibles.
 
Última edición:
Atrás
Arriba