;Функция ресета :
Код: Выделить всё
ds18b20_reset:
cbi PortB,0 ; подготовим порт перед изменением направления - будем передавать землю
sbi DDRB,0 ; меняем порт термометра на ВЫХОД
ldi tmp,248
rcall delay ; делает задержку макс.250 мкс. В tmp пишем нужное количество мкс.-2
ldi tmp,248
rcall delay
ldi tmp,98
rcall delay
; итого землю держали 600 мкс. Нам достаточно! (нужно не менее 480 мкс)
cbi PortB,0
cbi DDRB,0 ; меняем порт термометра на ВХОД
ldi tmp,68 ; даем 70 мкс. порту на формирование PRESENCE (формирует макс. 60 мкс. - т.е. с запасом)
rcall delay
sez ; PRESENCE (флаг установлен)
sbis PinB,0 ; если есть PRESENCE - следующую пропускаем
clz ; ошибка (флаг сброшен)
ret Вызываю так :
Код: Выделить всё
rcall ds18b20_reset
ldi command,0b00010100 ; пишем 10 - если НЕТ СИГНАЛА ОТ ДАТЧИКА (на самом деле это 10, просто в формате термометра (далее
; в BinToDig нулевой бит сдвигается)
brne PC+2 ;brne label ; branch if not equal - переход если флаг нуля сброшен.
ldi command,0b00101000 ; пишем 20 - если ПРЕСЕНС ЕСТЬ! (на самом деле это 20, просто в формате термометра (далее
; в BinToDig нулевой бит сдвигается)
rcall BinToDig ; преобразовываем формат датчика в символы индикатора посимвольно (входящий параметр - command)
rcall displays ;отображаем посимвольноФункции отображения и конвертирование - проверенные - работают.
А в протеусе индикаторы выводят - 10. Т.е. НЕТ сигнала ПРЕСЕНС