Code:
' #############################################################################
' Zweck         :  Lesen der Alarm ID Nummern der DS1820 Sensoren am 1-Draht Bus
'               :  mit AVR Mega 32 auf STK 500 Bord
'
' Programm Name :  C:\CMH\Eigene Dateien\AVRs\AVR_Bascom\...
' noch Progname :  ...\Test_Progs\DS1820_Alarm_Sens_suchen.bas
' Stand         :  28.10.2005
'
'
' Beschreibung  :  Den mittl. Pin des Temperatursensors mit PortD.0 verbinden.
'                  Pull Up Widerstand 4,7 kOhm zwischen PortA.0 und + 5 Volt
'                  nicht vergessen!
' ____________________________________________________________________________

$regfile = "m32def.dat"
' Crystal = Taktfrequenz in Hz

$crystal = 3686400
$baud = 9600
Config 1wire = Porta.0                  ' config  PORTD.0 as 1-Wire Bus pin

' Definition der Konstanten zum Aufruf der DS1820 Befehle
Const Read_rom = &H33                   'Read Rom
Const Skip_rom = &HCC                   'Skip Rom
Const Convert_t = &H44                  'Convert T
Const Read_ram = &HBE                   'Read Sratchpad
Const Write_ram = &H4E                  'Write Scratchpad
Const Copy_ram = &H48                   'Copy Scratchpad
Const Recall_ee = &HB8                  'Recall E²
Const Read_power = &HB4                 'Read Power Supply
Const Match_rom = &H55                  'Match Rom
Const Alarm_search = &HEC               'Alarm Search
Const Search_rom = &HF0                 'Search Rom
'
Dim I As Byte                           ' Index für Zählschleife
Dim Anz_dev As Byte                     ' Anzahl der angeschlossenen Sensoren
Dim Busy As Byte                        ' Warte-Variable
Dim Sens_id_1(8) As Byte                ' Sensor No 1 ID
Dim Sens_id_2(8) As Byte                ' Sensor No 2 ID
Dim Sens_id_3(8) As Byte                ' Sensor No 3 ID
Dim Alarm_id_1(8) As Byte                ' Sensor No 1 Alarm ID
Dim Alarm_id_2(8) As Byte                ' Sensor No 2 Alarm ID
Dim Alarm_id_3(8) As Byte               ' Sensor No 3 Alarm ID
Dim Scrp1(9) As Byte                    ' Sceatchpad Sensor 1
Dim Scrp2(9) As Byte                    ' Sceatchpad Sensor 2
Dim Scrp3(9) As Byte                    ' Sceatchpad Sensor 3


' --- P r o g r a m m   A n f a n g --- lesen der ID Nrn. am Bus ---

Anz_dev = 1wirecount()
Print                                   ' nur Zeilenvorschub
Print                                   ' nur Zeilenvorschub
Print " Folgende - " ; Anz_dev ; " - Sensoren sind am Bus: "
Print
Print " Sens ID von Temperatur Sensor 1 =  ";
Sens_id_1(1) = 1wsearchfirst()          ' 64 Bit-ID des ersten Sensors ermitteln
For I = 1 To 8
   Print Hex(sens_id_1(i)) ;            ' Print Id Nr. von Sensor 1
Next
Print
Print " Sens ID von Temperatur Sensor 2 =  ";
Sens_id_2(1) = 1wsearchnext()           ' 64 Bit-ID d. weiteren Sens. ermitteln
For I = 1 To 8
   Print Hex(sens_id_2(i));             ' Print Id Nr. von Sensor 2
Next
Print
Print " Sens ID von Temperatur Sensor 3 =  ";
Sens_id_3(1) = 1wsearchnext()
For I = 1 To 8
   Print Hex(sens_id_3(i));             ' Print Id Nr. von Sensor 3
Next
Print

'----- Setzen von drei Alarm Werten --------------------------------------
'----- die Werte sollen so gewählt sein, dass mind. ein Alarm ansteht ----
1wreset                                 ' 1-Wire Bus zurücksetzen (Reset)
1wverify Sens_id_1(1)                   ' gezieltes ansprechen von Sensor 1
1wwrite Write_ram                       ' Befehl &H33 = Write_Ram (Scratchpad)
1wwrite 27                              ' Alarm wenn Temp höher als 27
1wwrite 23                              ' Alarm wenn Temp tiefer als 23

1wreset                                 ' 1-Wire Bus zurücksetzen (Reset)
1wverify Sens_id_2(1)                   ' gezieltes ansprechen von Sensor 2
1wwrite Write_ram                       ' Befehl &H33 = Write_Ram (Scratchpad)
1wwrite 52                              ' Alarm wenn Temp höher als 52
1wwrite 50                              ' Alarm wenn Temp tiefer als 50

1wreset                                 ' 1-Wire Bus zurücksetzen (Reset)
1wverify Sens_id_3(1)                   ' gezieltes ansprechen von Sensor 3
1wwrite Write_ram                       ' Befehl &H33 = Write_Ram (Scratchpad)
1wwrite 11                              ' Alarm wenn Temp höher als 11
1wwrite 44                              ' Alarm wenn Temp tiefer als 44
1wreset
1wwrite Skip_rom
1wwrite Convert_t
   Do                                   ' Warteschleife um Temp. Wandlung im DS1820 abzuwarten
      Busy = 1wread()                   ' Solange Busy ungleich &HFF; Wandlung läuft noch
   Loop Until Busy = &HFF               ' Temperaturwandlung fertig wenn Busy = &HFF
1wreset


'----- Suchen der Sensoren mit gesetztem Alarmflag ------------------

'----- A b -- h i e r -- k l a p p t -- e s -- n i c h t !!! --------
'--------------------------------------------------------------------
1wreset                                 ' 1-Wire Bus zurücksetzen (Reset)
1wwrite Alarm_search                    ' Alarm ID's feststellen
Alarm_id_1(1) = 1wread(8)               ' speichern der Alarm ID's 8 Bytes
Alarm_id_2(1) = 1wread(8)               ' von evtl. allen Sensoren
Alarm_id_3(1) = 1wread(8)               '  --- " ---"
1wreset

'----- Printen der ID-Nummern mit gesetztem Alarmflag ---------------
'----- Es kommt nur FF FF FF FF FF FF FF FF heraus ------------------
For I = 1 To 8
Print Hex(Alarm_id_1(i)) ; " ";          ' Print ID's der Sensoren mit Alarn
Next
Print
For I = 1 To 8
Print Hex(Alarm_id_2(i)) ; " ";
Next
Print
For I = 1 To 8
Print Hex(Alarm_id_3(i)) ; " ";
Next
Print

End