Advertisement
ESTEXAV96

Sistema de climatizacion

May 16th, 2021
1,544
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pic 16 4.56 KB | None | 0 0
  1. ;*--- Pines donde ira conectado el LCD ---*
  2.  
  3. DEFINE LCD_DREG PORTB
  4. DEFINE LCD_DBIT 0
  5. DEFINE LCD_RSREG PORTB
  6. DEFINE LCD_RSBIT 4
  7. DEFINE LCD_EREG PORTB
  8. DEFINE LCD_EBIT 5
  9.  
  10. ;*-------------------------------------------------*
  11.  
  12. ;*---Parámetros conversor Analógico/Digital---*
  13.  
  14. DEFINE ADC_BITS 10 ;Fijar número de BITS del resultado (5,8,10)
  15. DEFINE ADC_CLOCK 3 ;Fijar EL CLOCK (rc = 3)
  16. DEFINE ADC_SAMPLEUS 50 ;Fijar el tiempo de muestreo en Us
  17. ;ADC_SAMPLEUS es el número de micro segundos que el programa espera
  18. ;entre fijar el canal y comenzar la conversión analógica/digital.
  19.  
  20. ;*------------------------------------------------------*
  21.  
  22. TRISA =%1 ;el puerto A.0 es de entrada
  23. ADCON1 = %00001110 ;el puerto A.0 es conversor los demás son Digitales
  24. TRISD = %11100000
  25.  
  26. dato VAR WORD ;crear variable dato para guardar el valor de la temperatura actual
  27. tempMin VAR BYTE; Variable para almacenar la temperatura mínima programada
  28. tempMax VAR BYTE; Variable para almacenar la temperatura máxima programada
  29. x VAR BYTE; Variable para hacer una pausa utilizando un ciclo for
  30. g CON 223 ;g constante 223. Este es el ASCII de grados
  31. calf VAR portD.3 ;nombres para los pines
  32. vent VAR portD.4
  33. enter VAR portD.5
  34. botonBajar VAR portD.6
  35. botonSubir VAR portD.7
  36.  
  37. EEPROM 0,[18,25] ;contenido inicial de la EEPROM. Temperatura inicial que se muestra en el LCD
  38.  
  39. inicio:´
  40.  
  41.     READ 0,tempMin ;lee dirección 0 de la memoria EEPROM y lo guarda en tempMin
  42.     READ 1,tempMax ;lee dirección 1 de la memoria EEPROM y lo guarda en tempMax
  43.  
  44. sensar:
  45.    
  46.     ADCIN 0, dato ;leer el canal 0 (A0) y guarde en dato
  47.     LCDOUT $fe, 1,$fe, 2, "T.MIN T.ACT T.MAX" ;limpiar LCD y sacar texto
  48.     dato = dato /128 ; el dato dividir para 128= C/AD de 9 bits
  49.     LCDOUT $fe,$c6,DEC dato,g,"C" ;Display el decimal de dato(Temp Actual)
  50.     LCDOUT $fe,$c0,DEC tempMin,g,"C" ;Display el decimal de tempMin
  51.     LCDOUT $fe,$cc,DEC tempMax,g,"C" ;Display el decimal de tempMax
  52.  
  53.     FOR X = 0 TO 100 ;Pausa: Esta pausa es para evitar cambios bruscos de la Temp Actual
  54.         If enter = 1 Then grabar1a; al presionar el pulsador selec nos vamos a la subrutina grabarla.
  55.             PAUSE 15
  56.     Next
  57.  
  58.  
  59.     IF dato < tempMin THEN calentar ;si dato es<tempMin ir a calentar
  60.     IF dato > tempMax THEN enfriar ;si dato es>tempMax ir a enfriar
  61.    
  62.     LOW calf : LOW vent ;apagar los 2 relés
  63.  
  64. GOTO sensar ;continuar sensando
  65.  
  66. calentar:
  67.     HIGH calf : LOW vent; Encendemos el calefactor
  68. GoTo sensar
  69.  
  70. enfriar:
  71.     HIGH vent: LOW calf; Encendemos el ventilador
  72. GoTo sensar
  73.  
  74. grabar1a:
  75.  
  76. GOSUB soltar; ;programa anti rebote de tecla
  77.  
  78. grabar1:
  79.  
  80. ; Aquí vamos a programar la temperatura Mínima
  81.  
  82.     LCDOUT $fe, 1, $fe, 2, "PROGRAMAR TEMP:"
  83.     LCDOUT $fe,$c0,"Minima = ",DEC tempMin ,g,"C"
  84.     PAUSE 100
  85.    
  86.         IF botonBajar=1 THEN restar1; Si presionamos el pulsador (-) nos vamos a restar
  87.         IF botonSubir=1 THEN sumar1; Si presionamos el pulsador (+) nos vamos a sumar
  88.         If enter = 1 Then grabarA
  89.    
  90. GoTo grabar1
  91.  
  92. restar1:
  93.  
  94.     GOSUB soltar ;programa antirrebote de tecla
  95.     IF tempMin < 9 THEN grabar1 ; Limite mínimo para la temperatura mínima
  96.     tempMin= tempMin -1 ; Restamos el valor de temMin
  97.    
  98.     GoTo grabar1
  99.      
  100. sumar1:
  101.  
  102.     GoSub soltar
  103.     IF tempMin > 18 THEN grabar1 ; Limite máximo para la temperatura mínima
  104.     tempMin= tempMin + 1 ; Sumamos el valor de temMin
  105.    
  106. GoTo grabar1
  107.  
  108. grabarA:
  109.  
  110.     GoSub soltar
  111.  
  112.     ; Grabamos el valor de la temperatura mínima programada, en la memoria EEPROM
  113.  
  114.     WRITE 0,tempMin ;escribir en la dirección 0 de la EEPROM
  115.  
  116. grabar2:
  117.  
  118. ; Aquí vamos a programar la temperatura Maxima
  119.  
  120.     LCDOUT $fe, 1, $fe, 2, "PROGRAMAR TEMP:"
  121.     LCDOUT $fe,$c0,"Maxima = ",dec tempMax ,g,"C"
  122.     PAUSE 100
  123.    
  124.         If botonBajar = 1 Then restar2
  125.         If botonSubir = 1 Then sumar2
  126.         If enter = 1 Then grabarB
  127.        
  128. GoTo grabar2
  129.  
  130. restar2:
  131.  
  132.     GoSub soltar
  133.     IF tempMax < 24 THEN grabar2 ; Limite mínimo para la temperatura máxima
  134.     tempMax = tempMax - 1
  135.    
  136. GoTo grabar2
  137.  
  138. sumar2:
  139.  
  140.     GoSub soltar
  141.     IF tempMax > 40 THEN grabar2 ; Limite máximo para la temperatura máxima
  142.     tempMax = tempMax + 1
  143.    
  144. GoTo grabar2
  145.  
  146. grabarB:
  147.  
  148.     GoSub soltar
  149.  
  150.     ; Grabamos el valor de la temperatura mínima programada en la memoria EEPROM
  151.  
  152.     WRITE 1,tempMax;escribir en la dirección 1 de la EEPROM
  153.    
  154. GoTo inicio
  155.  
  156. soltar: ;programa anti rebote de tecla
  157.  
  158.     If botonBajar = 1 Then soltar
  159.     If botonSubir = 1 Then soltar
  160.     If enter = 1 Then soltar
  161.     PAUSE 100
  162.    
  163. Return
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement