Начал заниматся 1-wire. Появляются наработки.(идея с каогото польского сайта, спасибо им) Решил поделится. Все на Баскоме. Один проект DS2405 в режиме ключа. Другой Ds2405 в режиме сухой контакт.
Реальные устройства лучше делать по схематике фирмы Эллин. Но для разработки устройств эти проекты должны помочь.
'Вывод серийника наоборот!
' Работает
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 8
$framesize = 50
' Для работы с двумя DS2405
Config 1wire = Portd.5 : Dim L As Byte
Config Portb.1 = Output
Config Portb.6 = Output
Dim G As Byte
Dim Adres(16) As Byte 'Выделяем 16 элементов для двух адресов
Adres(1) = 1wsearchfirst() 'первые 8 для первого ключа
Adres(9) = 1wsearchnext() 'остальные для второго
' начало цикла программы
1wreset
Adres(1) = 1wsearchfirst()
1wwrite &HCC
1wwrite &HEC
G = 1wread()
For L = 8 To 1 Step -1 'счетчик для первых восьми байтом
Print Hex(adres(l));
'For I = 1 To 1
Next
Print " " ; G
' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит)
If G = 85 Then
Portb.6 = 1
Else
Portb.6 = 0
End If
1wreset
Adres(9) = 1wsearchnext()
1wwrite &HCC
1wwrite &HEC
G = 1wread()
For L = 16 To 9 Step -1
Print Hex(adres(l));
Next
Print " " ; G
If G = 85 Then
Portb.1 = 1
Else
Portb.1 = 0
End If
Wait 1И ещё
'Вывод серийника наоборот!
' Работает
$regfile = "m32def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 32
$swstack = 8
$framesize = 50
' Для работы с двумя DS2405
Config 1wire = Portd.5 : Dim L As Byte
Config Pinc.0 = Input
Config Portb.1 = Output
Config Pinc.4 = Input
Config Portb.6 = Output
Dim G As Byte
Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim Adres(16) As Byte 'Выделяем 16 элементов для двух адресов
Adres(1) = 1wsearchfirst() 'первые 8 для первого ключа
Adres(9) = 1wsearchnext() 'остальные для второго
If Pinc.0 = 1 Then ' УСЛОВИЕ - если на 2-й ножке порта С низкий логический уровень то...
Portb.1 = 1
A = 1 ' устанавливаем на ножке 0 порта В высокий логический уровень (светодиод горит)
Else ' в противном случае...
Portb.1 = 0
A = 0 ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит)
End If 'конец условия
If Pinc.4 = 1 Then ' УСЛОВИЕ - если на 2-й ножке порта С низкий логический уровень то...
Portb.6 = 1
C = 1 ' устанавливаем на ножке 0 порта В высокий логический уровень (светодиод горит)
Else ' в противном случае...
Portb.6 = 0
C = 0 ' устанавливаем на ножке 0 порта В низкий логический уровень (светодиод не горит)
End If 'конец условия
1wreset
Adres(1) = 1wsearchfirst()
1wwrite &HCC
1wwrite &HEC
G = 1wread()
For L = 8 To 1 Step -1 'счетчик для первых восьми байтом
Print Hex(adres(l));
Next
Print " " ; G
If G = 85 Then
B = 1
Else
B = 0
End If
1wreset
Adres(9) = 1wsearchnext()
1wwrite &HCC
1wwrite &HEC
G = 1wread()
For L = 16 To 9 Step -1
Print Hex(adres(l));
Next
Print " " ; G
If G = 85 Then
D = 1
Else
D = 0
End If
Wait 1
1wreset
If A <> B Then
1wwrite &H55
1wwrite Adres(1) , 8
End If
Wait 2
1wreset
If C <> D Then
1wwrite &H55
1wwrite Adres(9) , 8
End If
Wait 2