-NMi- написал(а):Как бы ты в такой ситуации "нарисовал" бы код?
Чтоб не изобретать на ходу, лучше объясню, как я реализую доступ к нужным 1-Wire устройствам в текущем проекте.
В создаваемой системе три линии 1-Wire, на каждой несколько устройств.
Каждое устройство имеет свое четкое расположение на объекте (датчик температуры на улице, датчик температуры в комнате, порт управления DS2408 в другой комнате...), поэтому считывание/управление "где-то там" исключается.
Каждой присвоен (условно) номер от 0 до 2 (по используемым пинам порта МК), например PORТA.0
Для обращения к нужной линии используется переменная num1w.
ID каждого устройства оформлены в виде блока DATA, для каждого устройства своя метка.
id01: линия 0, устройство 1
DATA &H28, .... строка из 8 байтов id
....
id25: линия 2, устройство 5
DATA &H28, .... строка из 8 байтов id
Для обращения к нужному устройству используется массив id1w(8).
Чтобы обратиться к нужному устройству, например к устройству 2 в линии 0, загружаем его id из блока DATA:
num1w = 0 линия 0
Restore id02 устройство 2
For a = 1 To 8
Read id1w(a)
Next a
После этого можно обращаться к конкретному устройству, например:
1WWRITE &H55
For a = 1 To 8
1WWRITE id1w(a) , PORTA , num1w
Next a
...
Дальше делаем, что требуется...
Разместить id в теле программы решил только потому, что так захотелось изначально... 
Для внесения изменений в адресах и количества/типов устройств, МК все равно надо переть к программатору:
- если просто заменить датчик, то переписать id в DATA.
- если меняется количество или типы устройств, то программа всяко будет корректироваться.
А в таком раскладе без разницы, в каком углу памяти МК буду храниться id... 
Подход, возможно, неидеален, но мне понятен и не вызывает блужданий по программе. 
Неидеальность - повторение указанных выше 4-5 строчек при каждой смене обращений к устройствам...
Если бы была возможность сформировать имя метки для Restore в виде переменной, то можно было бы их вынести в подпрограмму. С командой &H55 так и сделано.
Отредактировано Nord (2018-03-01 04:38:01)