le cuento.... hace un tiempo realice un controlador de temperatura para una incubadora de huevos de gallinas y si que me funciona muy bien hasta incluso he llegado a sacar pollitos. el problema que tengo es que al software que realice le quiero anexar una rutina que me permita controlar el volteo automático cada 8:25 horas sin que esta rutina me interfiera en el trabajo del censado de la temperatura, esto seria como correr dos programas al mismo tiempo ó que trabaje en un modo de segundo plano algo asi me imagino yo, no se si estoy equivocado....
cabe mencionar que uso el Proton IDE
aca te dejo el codigo del programa a ver si me puedes dar una mano ya que soy nuevo en esta area.
'************************************************* ***************
'* Name : control de temperatura.BAS *
'* Author : [EMELY SUMOZA] *
'* Notice : Copyright (c) 2014 [SMILLER c.a] *
'* : All Rights Reserved *
'* Date : 20/06/2014 *
'* Version : 1.0 *
'* Notes : *
'* : *
'************************************************* ***************
Device 16F877A ' Define LCD registers and bits
Declare Xtal=4
TRISA=0
CMCON = 7 ; Set PORTA and PORTE to digital
;-------------------------------------------------------------------------------
Declare LCD_Type 0 ; definimos el tipo de lcd que se va a utilizar
Declare LCD_DTPort PORTA ; Definimos puertos a emplear
Declare LCD_DTPin PORTA.0 ; puertos que se usaran como línea de datos
Declare LCD_RSPin PORTB.2 ; puerto que va funcionar como RESET
Declare LCD_ENPin PORTB.1 ; Definimos el puerto que va a ENABLE en el LCD
;-------------------------------------------------------------------------------
DQ VAR PORTB.0 ; One-wire data pin
count_per_c VAR Byte ; Count per degree C
;-------------------------------------------------------------------------------
temperature VAR Word
x VAR Byte
x3 var Float
Tempbaj VAR Float
tempalt VAR Float
;------------------------------------------------------------
rF VAR PORTB.7
rC VAR PORTB.6
led VAR PORTA.4
enter VAR PORTB.5
bsubir VAR PORTB.4
bbajar VAR PORTB.3
;-------------------------------------------------------------------------------
DIn VAR Byte
DIn = 0
x1 var Float
x1 = 28.2
x2 var Float
x2 = 28
EWrite Din,[x1]
tempalt = ERead 0
EWrite Din,[X2] ;contenido inicial 0 de la EEPROM
;lee la EEPROM 0 y lo guarda en tempalt
tempbaj = ERead 1 ;lee la EEPROM 1 y lo guarda en tempbaj
;-------------------------------------------------------------------------------
Print $fe, 1,"BIENVENIDO" ;limpiar LCD y sacar texto
Print $fe, $c1,"CARGANDO ."
DelayMS 1500
Print $fe, 1,"BIENVENIDO " ;limpiar LCD y sacar texto
Print $fe, $c1,"CARGANDO .."
DelayMS 1000
Print $fe, 1,"BIENVENIDO" ;limpiar LCD y sacar texto
Print $fe, $c1,"CARGANDO ...."
DelayMS 1000
Print $fe, 1,"TEMPERATURA" ;limpiar LCD y sacar texto
Print $fe, $c1,"CARGANDA "
DelayMS 1000
;-------------------------------------------------------------------------------
inicio: ;3 parpadeos del led que indica funciona
For x =1 To 3
High led
DelayMS 500
Low led
DelayMS 300
Next
;-------------------------------------------------------------------------------
mainloop: ;programa principal de censado de temperatura
OWrite DQ, 1, [$CC, $44] ' inicia la convención de la temperatura
High led
DelayMS 100
Low led
DelayMS 100
OWrite DQ, 1, [$CC, $BE] ' lee la temperatura
ORead DQ, 0, [temperature.LowByte, temperature.HighByte]
temperature = temperature */ 1600
x3=temperature/100
Print $fe, 1,"TEMPERATURA"
Print $fe, $c1, Dec1 x3,06, 223,"C"
;-----------------------------------------------------------------------
For x = 1 To 10 ;repetir 10 veces
If enter =0 Then grabar1a
DelayMS 10
If X3 <= tempbaj Then calentar ;si X3 es <tempbaj ir a calentar
If X3 >= tempalt Then enfriar ;si X3 es >tempALT ir a ENFRIAR
Low rC : Low rF ;apagar los 2 relés
Next
GoTo mainloop ;continuar censando
calentar:
High rC : Low rF
GoTo mainloop
enfriar:
High rF : Low rC
GoTo mainloop
grabar1a:
GoSub soltar
grabar1:
Print $fe, 1, "Programar temp."
Print $fe,$c0,"baja= ",Dec1 tempbaj ,223,"C"
DelayMS 50
If bbajar=0 Then restar1
If bsubir=0 Then sumar1
If enter=0 Then grabarA
GoTo grabar1
restar1:
GoSub soltar ;programa antirrebote de tecla
If tempbaj < 1 Then grabar1
tempbaj= tempbaj -0.1
GoTo grabar1
sumar1:
GoSub soltar
If tempbaj > 100 Then grabar1
tempbaj= tempbaj + 0.1
GoTo grabar1
;................................................. .................
grabarA:
GoSub soltar
EWrite 1,[x1] ;escribir en la dirección 0 de la EEPROM
;................................................. ..................
grabar2:
Print $fe, 1, "Programar temp."
Print $fe,$c0,"alta= ",Dec1 tempalt ,223,"C"
DelayMS 100
If bbajar=0 Then restar2
If bsubir=0 Then sumar2
If enter=0 Then grabarB
GoTo grabar2
restar2:
GoSub soltar
If tempalt < 5 Then grabar2
tempalt= tempalt -0.1
GoTo grabar2
sumar2:
GoSub soltar
If tempalt > 50 Then grabar2
tempalt= tempalt + 0.1
GoTo grabar2
;................................................. ...............
grabarB:
GoSub soltar
EWrite 0,[x2];escribir en la dirección 1 de la EEPROM
GoTo inicio
;................................................. ...............
soltar: ;programa antirrebote de tecla
High led:
High PORTB.7
DelayMS 150
Low led
soltar2:
If bbajar=0 Then soltar2
If bsubir=0 Then soltar2
If enter=0 Then soltar2
DelayMS 100
Return
End