Die Hex-datei ist 7k groß.

Write ca 2 min
Read ca. 2 min

also ewig

Grüße
martin

PS.: Hier der komplette Code

Code:
$regfile = "m8def.dat"
$crystal = 3686400
'***************************Config Schaltausgänge*******************************
Config Portb = Output
Brenner Alias Portb.5
Pumpefb Alias Portb.1
Pumpehk Alias Portb.2
Pumpeww Alias Portb.4
Heizungonoff Alias Portb.5
'**************************Def. allgemeiner Variabeln***************************
Dim Tagnacht As Bit
Dim Nachtbetrieb As Byte
Dim Tagbetrieb As Byte
Dim Tempmessstelle(7) As Single

Const Tagtemp_og = 21.6
Const Nachttemp_og = 21.0
Const Tagtemp_ug = 21.4
Const Nachttemp_ug = 20.8

Nachtbetrieb = 21
Tagbetrieb = 5
'**************************Funktionen LCD-Display*******************************

Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
Config Lcdbus = 4
Config Lcdmode = Port

Dim ___lcdno As Bit

___lcdno = 0
 Initlcd
 Cursor Off
 Cls
___lcdno = 1
Initlcd
Cursor Off
Cls
'*******************************************************************************

Config 1wire = Portb.3                                      'DS1820

Match_rom Alias &H55
Read_scratchpad Alias &HBE
Start_conversion Alias &H44
Innen Alias 0                                               'Innen
Aussen Alias 1                                              'Aussen
Kessel Alias 2
Rücklauf Alias 3
Vorlauf Alias 4

Dim Read_temp As Integer
Dim Sensor_ids(40) As Byte
Dim Id As Byte
Dim Offset As Byte
Dim Ds_array(7) As Byte
Dim Bruchteil As Single
Dim Temperatur As Single
Dim I As Integer

'*************************Config Timer1*****************************************
Config Timer1 = Timer , Prescale = 8                        '256       'Konfiguriere Timer1
Enable Timer1                                               'schalte den Timer1 ein
On Timer1 Isr_von_timer1                                    'verzweige bei Timer1 überlauf zu   Isr_von_Timer1
Enable Interrupts
Timer1 = 51135                                              'Timer1 soll schon von 34285 wegzählen
'***************************Config RTC******************************************
Config Sda = Portc.4
Config Scl = Portc.5

Const Ds1307w = &HD0                                        ' Addresses of Ds1307 clock
Const Ds1307r = &HD1

Config Clock = User                                         ' this will dim the bytes automatic
Dim Weekday As Byte

'Time$ = "19:44:00"                 ' to watch the day changing value
'Date$ = "02.26.07"                 ' erstmaliges stellen der Uhr
'***************************Config 1Wire****************************************


For Id = 1 To 40                                            'Einlesen der 5 Sensoren IDs (5*8 Byte)
   I = Id - 1
   Readeeprom Sensor_ids(id) , I
Next Id

Do
   Wait 1
   For Id = Innen To Vorlauf
      Offset = Id * 8
      Offset = Offset + 1                                   'Offset geht auf 1, 9, 17, 25 und 33
      1wreset                                               'hier wird der Temperaturwert eingelesen
      1wwrite Match_rom
      1wwrite Sensor_ids(offset) , 8                        '8 Byte ID wird übertragen
      1wwrite Read_scratchpad
      For I = 1 To 7                                        'nur bis 7, weil 8 und 9 uninteressant
         Ds_array(i) = 1wread()
      Next I
      Read_temp = Makeint(ds_array(1) , Ds_array(2))
      1wreset                                               'jetzt wird wieder die Konvertierung gestartet
      1wwrite Match_rom
      1wwrite Sensor_ids(offset) , 8
      1wwrite Start_conversion
      Shift Read_temp , Right
      If 127 < Read_temp Then Read_temp = Read_temp - 32767
      Bruchteil = 16 - Ds_array(7)
      Bruchteil = Bruchteil / 16
      Bruchteil = Bruchteil - 0.25
      Temperatur = Read_temp + Bruchteil
      Tempmessstelle(id + 1) = Temperatur
      ___lcdno = 0
      Locate 1 , 1 : Lcd "  Inn Auss Kess Vorl Rück "
      Select Case Id
      Case Innen:
         Locate 2 , 2 : Lcd Fusing(temperatur , "#.#")
      Case Aussen:                                          'ausgabe im Display ist dann z.B.
         Locate 2 , 7 : Lcd Fusing(temperatur , "#.#")      '  Inn  Auss  Kess Rück Vorl
      Case Kessel:                                          ' 14.4  52.4 67.3 43.0 62.8
         Locate 2 , 12 : Lcd Fusing(temperatur , "#.#")
      'Case Rücklauf:
      '   Locate 2 , 18 : Lcd Fusing(temperatur , "#.#")
      'Case Vorlauf:
      '   Locate 2 , 23 : Lcd Fusing(temperatur , "#.#")
      End Select
   Next Id
  Gosub Anzeigezeit
Loop
End

'***************************Anzeige Zeit****************************************
Anzeigezeit:
  ___lcdno = 1
  Locate 2 , 1
  Lcd Time$
  Locate 2 , 12
  Lcd Date$
  Locate 2 , 21
  Lcd "Tag: " ; Weekday
  Waitms 500
Return
 '*************************Sub Relais schalten***********************************
Schalterelais:
Select Case Tagnacht
  Case 0
    Gosub Nachtbetrieb
  Case 1
    Gosub Tagbetrieb
End Select
Return
 '**************************Sub für Tagbetrieb***********************************
Tagbetrieb:
  Pumpeww = 1
  If Tempmessstelle(1) >= Tagtemp_og Then
    Brenner = 0                                             ' Brenner
    If Tempmessstelle(1) <= 2.95 Then
      Pumpefb = 0                                           ' Pumpe FB
    End If
    If Tempmessstelle(1) < 3.05 Then
      Pumpehk = 0                                           ' PumpeHK
    End If
  End If
  If Tempmessstelle(1) <= Tagtemp_ug Then
    Brenner = 1
    Pumpefb = 1
    Pumpehk = 1
  End If
Return
'**************************Sub für Nachtbetrieb*********************************
Nachtbetrieb:
  If Tempmessstelle(1) >= Nachttemp_og Then
    Brenner = 0
    If Tempmessstelle(1) < 2.9 Then
      Pumpefb = 0                                           ' Pumpe FB
    End If
    If Tempmessstelle(1) < 3.0 Then
      Pumpehk = 0                                           ' PumpeHK
    End If
  End If
  If Tempmessstelle(1) < Nachttemp_ug Then
    Brenner = 1
    Pumpefb = 1
    Pumpehk = 1
  End If
Return
 '**************************Subroutine für Timer1********************************
Isr_von_timer1:                                             'ISR von Timer1
  Timer1 = 51135
  If _hour >= Nachtbetrieb Or _hour < Tagbetrieb Or _hour = 7 Then       'Sp > 2 Then  'Timer1 soll wieder von 34285 wegzählen
    Tagnacht = 0                                            'Nachteinstellung
  Else
    Tagnacht = 1                                            'Tageinstellung
  End If
Return
'***************************Subs für RTC****************************************
Getdatetime:
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' start address in 1307

  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307r                                          ' send address
  I2crbyte _sec , Ack
  I2crbyte _min , Ack                                       ' MINUTES
  I2crbyte _hour , Ack                                      ' Hours
  I2crbyte Weekday , Ack                                    ' Day of Week
  I2crbyte _day , Ack                                       ' Day of Month
  I2crbyte _month , Ack                                     ' Month of Year
  I2crbyte _year , Nack                                     ' Year
  I2cstop
  _sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)
  _day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)
Return

Setdate:
  _day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 4                                                ' starting address in 1307
  I2cwbyte _day                                             ' Send Data to SECONDS
  I2cwbyte _month                                           ' MINUTES
  I2cwbyte _year                                            ' Hours
  I2cstop
Return

Settime:
  _sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)
  I2cstart                                                  ' Generate start code
  I2cwbyte Ds1307w                                          ' send address
  I2cwbyte 0                                                ' starting address in 1307
  I2cwbyte _sec                                             ' Send Data to SECONDS
  I2cwbyte _min                                             ' MINUTES
  I2cwbyte _hour                                            ' Hours
  I2cstop
Return
'*******************************************************************************


$eeprom

Data &H10 , &HE8 , &HF4 , &H23 , &H01 , &H08 , &H00 , &HEF
Data &H10 , &H1B , &HD0 , &H23 , &H01 , &H08 , &H00 , &H23
Data &H10 , &H78 , &H37 , &H39 , &H01 , &H08 , &H00 , &H11
Data &H10 , &HC0 , &H46 , &H19 , &H01 , &H08 , &H00 , &H67