Saludos, necesito vuestra ayuda para terminar mi primer proyeco real con un microcontrolador, el ema es el siguiente....necesito encender y apagar una bombilla cada cierto tiempo( a las 11 de la noche...a las 12 y a las 6 de la mañana durane 30 min cada vez) el microcontrolador siempre se va a encender a las 12 del medio dia...xa saber a la ora a la q se enciende y cada cierto tiempo en la ejecucion del programa se va guardando en la posicion 0 de la memoria eeprom un dato que me va a ayudar a qsi hay un corte de corriente pequeño "sepa" por donde iba en el programa y vuelva dnd estaba. El caso esque mi programa es MUY RUDIMENTARIO y queria saber como lo ariais..yo lo e probado y funciona pero seguro q hay otra forma de hacerlo mejor.AYUDA.gracias
SOBRETODO CON: según el numero guardado en la eproom saltar a la etiqueta correspondiente en vez de modificar el PCL según el numero de instrucciones que
hay entre el addwf PCL,F y la instruccion por dnd se kedó!gracias
;********************Programa para encender y apagar la luz***********************************
LIST P=16F84A
INCLUDE <P16F84.INC>
__CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
CBLOCK 0x0C
Contador
ENDC
ORG 0x2100
DE 0
#DEFINE BANCO1 bsf STATUS,5
#DEFINE BANCO0 bcf STATUS,5
#DEFINE LUZ PORTB,0
#DEFINE LUZON bsf LUZ
#DEFINE LUZOFF bcf LUZ
contador0 EQU h'10'
contador1 EQU h'11'
contador2 EQU h'12'
contador3 EQU h'13'
contador4 EQU h'14'
ORG 0
;**************INICIO**********
goto PROG
ORG 4
;************INTERRUPCIONES****
ORG 5
;**************MAIN************
PROG
BANCO1
clrf PORTB
BANCO0
clrf PORTB
movlw 0
call EEPROM_LeeDato
call TablaVerdad
addwf PCL,F
;*******INICIO DE PRUEBA***********************
call diez
call retardo
LUZON
bsf PORTB,2
call diez
call retardo
LUZOFF
;*******EMPEZAMOS A LAS 12 de la am************
call hora
call retardo
movlw .1
call EEPROM_EscribeDato
;******LA 1 tarde******************************
call hora
call retardo
movlw .2
call EEPROM_EscribeDato
;******LA 2 tarde******************************
call hora
call retardo
movlw .3
call EEPROM_EscribeDato
;******LA 3 tarde******************************
call hora
call retardo
movlw .4
call EEPROM_EscribeDato
;******LA 4 tarde******************************
call hora
call retardo
movlw .5
call EEPROM_EscribeDato
;******LA 5 tarde******************************
call hora
call retardo
movlw .6
call EEPROM_EscribeDato
;******LA 6 tarde******************************
call hora
call retardo
movlw .7
call EEPROM_EscribeDato
;******LA 7 tarde******************************
call hora
call retardo
movlw .8
call EEPROM_EscribeDato
;******LA 8 tarde******************************
call hora
call retardo
movlw .9
call EEPROM_EscribeDato
;******LA 9 tarde******************************
call hora
call retardo
movlw .10
call EEPROM_EscribeDato
;******LA 10 tarde*****************************
call hora
call retardo
movlw .11
call EEPROM_EscribeDato
;******SON LAS 11 tarde************************
;***********************1er ENCENDIDO**********
;***********************1er ENCENDIDO**********
;***********************1er ENCENDIDO**********
LUZON
call treinta
call retardo
LUZOFF
;******LA 11.30 tarde**************************
call hora
call retardo
movlw .12
call EEPROM_EscribeDato
;******LA 12.30 tarde/noche********************
call hora
call retardo
;***********************2o ENCENDIDO**********
;***********************2o ENCENDIDO**********
;***********************2o ENCENDIDO**********
LUZON
call treinta
call retardo
LUZOFF
;*********YA ES LA UNA DE LA NOCHE*************
movlw .13
call EEPROM_EscribeDato
;******LA 1 madrugada**************************
call hora
call retardo
movlw .14
call EEPROM_EscribeDato
;******LA 2 madrugada**************************
call hora
call retardo
movlw .15
call EEPROM_EscribeDato
;******LA 3 madrugada**************************
call hora
call retardo
movlw .16
call EEPROM_EscribeDato
;******LA 4 madrugada**************************
call hora
call retardo
movlw .17
call EEPROM_EscribeDato
;******LA 5 madrugada**************************
call hora
call retardo
movlw .18
call EEPROM_EscribeDato
;******LA 6 madrugada**************************
;***********************2o ENCENDIDO**********
;***********************2o ENCENDIDO**********
;***********************2o ENCENDIDO**********
LUZON
call treinta
call retardo
LUZOFF
;*******SON LAS 6.30 de la madrugada***********
call treinta
call retardo
movlw .19
call EEPROM_EscribeDato
;*******SON LAS 7 de la madrugada**************
call hora
call retardo
movlw .20
call EEPROM_EscribeDato
;******LA 8 madrugada**************************
call hora
call retardo
movlw .21
call EEPROM_EscribeDato
;******LA 9 madrugada**************************
call hora
call retardo
movlw .22
call EEPROM_EscribeDato
;******LA 10 madrugada*************************
call hora
call retardo
movlw .23
call EEPROM_EscribeDato
;******LA 11 madrugada*************************
call hora
call retardo
movlw .0
call EEPROM_EscribeDato
;******SON LAS 12 de la madrugada**************
;******ES LA VUELTA****************************
goto PROG
TablaVerdad
addwf PCL,F
DT 0,.10,.13,.19,.22,.25,.28,.31,.34,.37,.40,.43,.47,.55,.58,.61,.64,.67,.70,.73,.81,.84,.87,.90,.93,.96
retardo
bucle4
bucle3
bucle2
bucle1
bucle0 nop
decfsz contador0,1
goto bucle0
decfsz contador1,1
goto bucle1
decfsz contador2,1
goto bucle2
decfsz contador3,1
goto bucle3
decfsz contador4,1
goto bucle4
return
diez movlw d'249' ; retardo de 1ms = 0.001s.
movwf contador0
movlw d'249' ; retardo de 0.250 s arox.
movwf contador1
movlw d'10' ; asta aki van 60 s.
movwf contador2
movlw d'1' ; retardo de 1h.
movwf contador3
movlw d'1' ; retardo de 1/2=0.5 día.
movwf contador4
return
treinta movlw d'249' ; retardo de 1ms = 0.001s.
movwf contador0
movlw d'249' ; retardo de 0.250 s arox.
movwf contador1
movlw d'240' ; asta aki van 60 s.
movwf contador2
movlw d'30' ; retardo de 1h.
movwf contador3
movlw d'1' ; retardo de 1/2=0.5 día.
movwf contador4
return
hora movlw d'249' ; retardo de 1ms = 0.001s.
movwf contador0
movlw d'249' ; retardo de 0.250 s arox.
movwf contador1
movlw d'240' ; asta aki van 60 s.
movwf contador2
movlw d'60' ; retardo de 1h.
movwf contador3
movlw d'1' ; retardo de 1/2=0.5 día.
movwf contador4
return
INCLUDE<RETARDOS.INC>
INCLUDE<EEPROM.INC>
end