'****************************************************************
'* Name : TERMO_ON/OFF.PBP *
'* Author : Max Eduardo Reyes Vera Juarez *
'* Notice : Copyright (c) 2006 Protegido Por leyes de Autor *
'* : All Rights Reserved *
'* Date : 04/10/2006 *
'* Version : 1.0 *
'* Notes : *
'* : *
'****************************************************************
DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT 4
DEFINE LCD_EREG PORTC
DEFINE LCD_EBIT 5
DEFINE LCD_RSREG PORTC
DEFINE LCD_RSBIT 4
DEFINE ADC_CLOCK 3
DEFINE ADC_BITS 10
DEFINE ADC_SAMPLEUS 50
ADCON1 = 143
OPTION_REG.7 = 0
TRISA = 255
TRISB = 255
TRISC = 0
TRISD = 0
TERMO VAR PORTA.0
HTEMP VAR PORTB.0
LTEMP VAR PORTB.1
ENTER VAR PORTB.2
EXIT VAR PORTB.3
HEAT VAR PORTC.0
SENSOR VAR WORD
MAXTEMP VAR WORD
RANGO VAR WORD
REF VAR WORD
SL VAR WORD
RL VAR BYTE
TL VAR BYTE
I VAR BYTE
pause 500
high heat
pause 500
low heat
pause 1000
INICIO:
MAXTEMP=0
RANGO=0
PORTC=0
LCDOUT$FE,1," INGRESE "
LCDOUT$FE,$C0,"TEMPERATURA"
GOSUB PAUSA
GOTO INICIO
PAUSA:
FOR I=0 TO 20
IF HTEMP=0 OR LTEMP=0 THEN
GOTO MAST
ENDIF
PAUSE 100
NEXT I
RETURN
MAST:
IF EXIT=0 THEN BREAK
IF LTEMP=0 THEN
GOSUB MENOST
ENDIF
IF hTEMP=0 THEN
PAUSE 130
IF HTEMP=0 THEN
MAXTEMP=MAXTEMP+1
TL = MAXTEMP
LCDOUT$FE,1,"TEMPERATURA DE:"
LCDOUT$FE,$C0," ",DEC TL,"ßC"
IF LTEMP=0 THEN MENOST
ENDIF
ENDIF
IF MAXTEMP>=250 THEN
MAXTEMp=0
ENDIF
IF ENTER=0 THEN
MAXTEMP=(MAXTEMP*2)
GOSUB XRANGO
ENDIF
GOTO MAST
MENOST:
IF EXIT=0 THEN BREAK
IF HTEMP=0THEN
GOTO MAST
ENDIF
IF LTEMP=0 THEN
PAUSE 130
IF LTEMP=0 THEN
MAXTEMP = MAXTEMP - 1
TL = MAXTEMP
LCDOUT$FE,1,"TEMPERATURA DE:"
LCDOUT$FE,$C0," ",DEC TL,"ßC"
IF HTEMP=0 THEN MAST
ENDIF
ENDIF
IF MAXTEMP <=0 THEN
MAXTEMP = 250
ENDIF
IF ENTER=0 THEN
MAXTEMP=(MAXTEMP*2)
GOSUB XRANGO
ENDIF
GOTO MENOST
XRANGO:
LCDOUT$FE,1,"MARGEN DE ERROR?"
GOSUB PAUS2
GOTO XRANGO
RANGOTT:
IF EXIT=0 THEN BREAK
IF LTEMP=0 THEN
GOTO RANGOTM
ENDIF
IF HTEMP=0 THEN
PAUSE 130
IF HTEMP=0 THEN
RANGO = RANGO+1
RL = RANGO
LCDOUT$FE,1,"RANGO DE:"
LCDOUT$FE,$C0,"+/- ",DEC RL,"ßC"
IF LTEMP=0 THEN RANGOTM
ENDIF
ENDIF
IF RANGO>255 THEN
RANGO=0
ENDIF
IF ENTER=0 THEN
RANGO = (RANGO*2)
GOTO CALIENTA
ENDIF
GOTO RANGOTT
RANGOTM:
IF EXIT=0 THEN BREAK
IF HTEMP=0 THEN
GOTO RANGOTT
ENDIF
IF LTEMP=0 THEN
PAUSE 130
IF LTEMP=0 THEN
RANGO = RANGO-1
RL = RANGO
LCDOUT$FE,1,"RANGO DE:"
LCDOUT$FE,$C0,"+/- ",DEC RL,"ßC"
IF HTEMP=0 THEN RANGOTT
ENDIF
ENDIF
IF RANGO<=0 THEN
RANGO=255
ENDIF
IF ENTER=0 THEN
RANGO = (RANGO*2)
GOTO CALIENTA
ENDIF
GOTO RANGOTM
CALIENTA:
HIGH HEAT
GOSUB SENSA
SL=(SENSOR/2)
LCDOUT$FE,1,"CALENTANDO A:"
LCDOUT$FE,$C0,DEC TL,"ßC ","+/- ",DEC RL,"ßC"
PAUSE 1500
LCDOUT$FE,1,"TEMP DE: ", DEC SL, "ßC"
pause 1500
IF SENSOR>(MAXTEMP+RANGO) THEN
lcdout$fe,1
gOTO COOL
ENDIF
GOTO CALIENTA
COOL:
LOW HEAT
GOSUB SENSA
SL=(SENSOR/2)
lcdout $fe,$c0, "...ENFRIANDO...."
PAUSE 1500
LCDOUT$FE,1,"TEMP DE: ", DEC SL,"ßC"
PAUSE 1500
IF SENSOR<=(MAXTEMP-RANGO) THEN
GOTO CALIENTA
ENDIF
GOTO COOL
SENSA:
FOR i = 0 TO 50
ADCIN TERMO,SENSOR
REF=REF+SENSOR
IF EXIT=0 THEN BREAK
PAUSE 10
NEXT I
SENSOR =REF/50
REF=0
RETURN
PAUS2:
FOR I=0 TO 10
IF HTEMP=0 OR LTEMP=0 THEN
GOTO RANGOTT
ENDIF
PAUSE 150
NEXT I
RETURN
BREAK:
PORTC=0
MAXTEMP=0
RANGO=0
GOTO INICIO
END