Доброго времени суток!
Я от только попал на вас сайт, поэтому прошу не судить строго, если что-то не в ту степь пишу.
Прошу помощи разобрать код. Решил я поработать с извесным всем датчиком ds18b20, я когда-то собирал на нем термометр, но брал готовое ришение, а сейчас хочу сам его освоить. чтоб долго не говорить, вот мой код:
$regfile = "attiny2313.dat" 'соответственно работаю с аttiny2313
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0 'конфигурирую дисплей
Config Lcd = 16 * 2
Config 1wire = Portb.7 'на эту ногу сажу DQ микросхемы
$hwstack = 40 'настройки стека и фрейма, кстати также интересует нужны ли они здесь
$swstack = 16
$framesize = 32
$sim
Initlcd
Cursor Off
Dim B0 As Byte 'задаю переменные
Dim B1 As Byte
Dim T As Byte
Dim T1 As Byte
Dim Z As Byte
Do 'и так поехали руководясь даташитом
1wreset 'делаю сброс шины 1wire
1wwrite &HCC 'обращаюсь к нашему датчику
1wwrite &H44 'начинаем измерять т-ру
Waitms 750 'ждем пока он меряет
1wreset 'снова сброс
1wwrite &HCC 'снова обращение
1wwrite &HBE 'считывае с его памьяти
B0 = 1wread() 'считываю нулевой байт в переменную В0
B1 = 1wread() 'считываю первый байт в переменную B1
'а вот далее пошла математика, которую я не очень понимаю... это сделано по аналогии тех исходников которые я видел
If B1 > 248 Then 'проверка значение первого байта на отрицательную т-ру
B0 = &HFF - B0 'не очень понятное для меня вычисление (но все так делают=)
B1 = &HFF - B1
Z = 2
Else
Z = 1
End If
T = B0 / 16 'сдвигаем В0 байт вправо на 4-и бита
T1 = B1 * 16 'сдвигаем В1 байт влево на 4-и бита
T = T + T1
If Z = 2 Then
T = T + 1
End If
If Z = 1 And T = 0 Then
Z = 0
End If
'дальше все понятно=)
Cls
Lcd "t= "
If Z = 0 Then
Lcd " " ; T ; "'C"
End If
If Z = 1 Then
Lcd "+" ; T ; "'C"
End If
If Z = 2 Then
Lcd "-" ; T ; "'C"
End If
Loop
End
помогите разобрать саму математику, а то народ постоянно "недорасказывает" что там происходит.
ах да, и забыл. Где еще могут быть проблемы... проверяю в протеусе(7.10), баском(2.0.5.0). И фьюзам ничего не делал, так-как не понимаю еще их, а более того как их использовать в протеусе.
Спасибо за внимание.



