Sei sulla pagina 1di 5

PROGRAMACIN @ DEVICE XT_OSC DEFINE LCD_DREG PORTB DEFINE LCD_DBIT 0 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 5 DEFINE LCD_EREG

PORTB DEFINE LCD_EBIT 4 DEFINE ADC_BITS 10 DEFINE ADC_CLOCK 3 DEFINE ADC_SAMPLEUS 50 ;ADC_SAMPLEUS Exige utilizar cristal externo XT de 4MHz Define pines del LCD B0 a B3 Empezando desde el Puerto B0 hasta el B3 Define el puerto B para conectar el bit RS en el puerto B.5 Define el puerto B para conectar el bit Enable puerto B.4 Fije nmero de BITS del resultado (5,8,10) Fije EL CLOCK (rc = 3) Fije el tiempo de muestreo en Us Es el nmero de microsegundos que el programa espera entre fijar el canal y comenzar la conversin analgica/digital. El puerto A.0 es de entrada El puerto A.0 es conversor los dems son digitales Crear variable dato para guardar Crear variable dato1 para guardar Crear variable dato2 para guardar Crear variable dato1dec para guardar Crear variable deci para guardar Crea una variable "tembaj" y asigna un tamao de 8 bits es decir de 0 a 255 Crea una variable "tempalt" y asigna un tamao de 8 bits es decir de 0 a 255 Crea una variable "x" y asigna un tamao de 8 bits es decir de 0 a 255 g constante 223 este es el ASCII de grados nombres para los pines

TRISA =%1 ADCON1 = %00001110 dato VAR WORD dato1 var word dato2 var word dato1dec var word deci var word tempbaj VAR BYTE tempalt VAR BYTE x VAR BYTE g CON 223 led VAR portD.1 optoF VAR portD.2 optoC VAR portD.3 conversor var portD.4 bbajar VAR portD.5 enter VAR portD.7 bsubir VAR portD.6 EEPROM 0,[15,24]

contenido inicial de la EEPROM

intro: LCDOUT $fe, 1, "Cargando" pause 400 LCDOUT $fe, 1, "Cargando." pause 400 LCDOUT $fe, 1, "Cargando.." pause 400 LCDOUT $fe, 1, "Cargando..." pause 400 LCDOUT $fe, 1, "Cargando." pause 400 LCDOUT $fe, 1, "Cargando.." pause 400 LCDOUT $fe, 1, "Cargando..." pause 400 goto inicio inicio: FOR x =1 TO 3 HIGH led PAUSE 200 LOW led PAUSE 200 NEXT READ 0,tempbaj READ 1,tempalt sensar: ADCIN 0, dato ; LCDOUT $fe, 1, "T.mi T.actu T.ma" dato = dato /128 ; LCDOUT $fe,$c6,DEC dato,g,"C" LCDOUT $fe,$c0,DEC tempbaj,g,"C" LCDOUT $fe,$cc,DEC tempalt,g,"C" FOR x = 1 TO 50 IF enter =0 THEN grabar1a if conversor=0 then transformacion PAUSE 10 NEXT IF dato < tempbaj THEN calentar IF dato > tempalt THEN enfriar LOW optoC : LOW optoF

limpiar LCD y sacar texto pausa de 400 milisegundos

3 parpadeos del led que indica funciona

lee la EEPROM 0 y lo guarda en tempbaj lee la EEPROM 1 y lo guarda en tempalt

leer el canal 0 (A0) y guarde en dato limpiar LCD y sacar texto el dato dividir para 128= C/AD de 9 bits Display el decimal de dato Display el decimal de tempbaj Display el decimal de tempalt repetir 50 veces si enter =0, ir a grabar1a si conversor =0, ir a transformacion

si dato es < tempbaj, ir a calentar si dato es < tempalt, ir a enfriar apagar los 2 opto-triac

GOTO sensar calentar: HIGH optoC : LOW optoF GOTO sensar enfriar: HIGH optoF : LOW optoC GOTO sensar transformacion: LCDOUT $fe, 1, "Convitiendo." pause 200 ; LCDOUT $fe, 1, "Convitiendo.." pause 200 LCDOUT $fe, 1, "Convitiendo..." pause 200 transformacion2: ADCIN 0, dato ADCIN 0, dato1 dato = dato /128 dato1= ((dato*9)/5)+32 dato1dec = ((dato*9)//5) deci= (dato1dec*10)/5 dato2= ((dato2/128)+273) LCDOUT $fe, 1, "Conversion en:" LCDOUT $fe,$c0,DEC dato,g,"C" LCDOUT $fe,$c5,#dato1,".",#deci,g,"F" LCDOUT $fe,$cc,DEC dato2, "K" FOR x = 1 TO 50 IF CONVERSOR =0 THEN soltarG PAUSE 10 NEXT goto transformacion2 soltarG: gosub soltar soltarF: FOR x =1 TO 2 HIGH led PAUSE 200 LOW led

continuar sensando

encender el opto-triac del ventilador continuar sensando

encender el opto-triac del calefactor continuar sensando

limpiar LCD y sacar texto pausa de 200 milisegundos

leer el canal 0 (A0) y guardarlo en dato leer el canal 0 (A0) y guardarlo en dato1 el dato dividir para 128= C/AD de 9 bits conversin a Fahrenheit extraccin del decimal conversion a KELVIN Display el decimal de dato Display el valor numrico de dato1 y deci Display el decimal de datp2 repetir 50 veces si conversor =0, ir a soltarG pausa de 10 milisegundos siguiente repeticin hasta que sea x = 50 ir a transformacion2

ir a subrutina soltarG y volver cuando diga RETURN

repetir 2 veces encender led pausa de 200 milisegundos apagar led

PAUSE 200 NEXT goto sensar grabar1a: GOSUB soltar grabar1: LCDOUT $fe, 1, "Programar temp." LCDOUT $fe,$c0,"baja= ",DEC tempbaj ,g,"C" PAUSE 100 IF bbajar=0 THEN restar1 IF bsubir=0 THEN sumar1 IF enter=0 THEN grabarA GOTO grabar1 restar1: GOSUB soltar IF tempbaj < 1 THEN grabar1 tempbaj= tempbaj -1 GOTO grabar1 sumar1: GOSUB soltar IF tempbaj > 40 THEN grabar1 tempbaj= tempbaj + 1 GOTO grabar1 grabarA: GOSUB soltar WRITE 0,tempbaj grabar2: LCDOUT $fe, 1, "Programar temp." ; LCDOUT $fe,$c0,"alta= ",dec tempalt ,g,"C" ; PAUSE 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 -1

pausa de 200 milisegundos siguiente repeticin hasta que sea x = 2 continuar sensando

ir a subrutina soltar y volver cuando diga RETURN

limpiar LCD y sacar texto limpiar LCD y sacar texto pausa de 100 milisegundos ir a restar1 si bbajar es 0 lgico ir a sumar1 si bsubir es 0 lgico ir a grabar1A si enter es 0 lgico ir a grabar1

programa anti rebote de tecla ir a grabar1 si tempbaj <1 ir a grabar1

programa anti rebote de tecla ir a grabar1 si tempbaj >40 ir a grabar1

programa anti rebote de tecla escribir en la direccin 0 de la EEPROM

limpiar LCD y sacar texto limpiar LCD y sacar texto pausa 100 milisegundos ir a restar2 si bbajar es 0 lgico ir a sumar2 si bsubir es 0 lgico ir a grabarB si enter es 0 lgico ir a grabar2

programa anti rebote de tecla ir a grabar2 si tempalt < 5

GOTO grabar2 sumar2: GOSUB soltar IF tempalt > 50 THEN grabar2 tempalt= tempalt + 1 GOTO grabar2 grabarB: GOSUB soltar WRITE 1,tempalt GOTO inicio soltar: HIGH led PAUSE 150 LOW led soltar2: IF bbajar=0 THEN soltar2 IF bsubir=0 THEN soltar2 IF enter=0 THEN soltar2 if conversor=0 then soltar2 PAUSE 100 RETURN END

ir a grabar2

programa anti rebote de tecla ir a grabar2 si tempalt > 50 ir a grabar2

programa anti rebote de tecla escribir en la direccin 1 de la EEPROM ir a grabar2 programa anti rebote de tecla encender led pausa de 150 milisegundos apagar led

ir a soltar 2 si bbajar es 0 lgico ir a soltar 2 si bsubir es 0 lgico ir a soltar 2 si enter es 0 lgico ir a soltar 2 si conversor es 0 lgico pausa de 100 milisegundos regresar al GOSUB que lo llam fin del programa

Potrebbero piacerti anche