Народ, неделю мучаю датчик - не сдаётся

, вернее не отвечает. Подскажите, может что не так делаю.
Датчик 18B20 в железной капсуле с метровым хвостом, подключение 3 проводное, подтяжка 4к7.
Пишу на pic16 asm. Приведу сначала все подпрограммы, что я написал. Подпрограммы задержек приводить не буду. Там все как часы

Кварц 4 МГц.
Спойлер
Код: Выделить всё
Wire1_Reset
bcf INTCON, GIE ; запрещаем прерывания
call Wire1_0
call pause_505us
call Wire1_Z
call pause_64us
btfss PORTC, RC2
bsf flags, slave_pres
btfsc PORTC, RC2
bcf flags, slave_pres
call pause_499us
bsf INTCON, GIE ; разрещаем прерывания
return
Wire1_Send_byte ; отправка байта
movlw .8 ; байт должен лежать в W1B
movwf count
bcf INTCON, GIE ; запрещаем прерывания
r1 call Wire1_0
btfsc W1B, 0
call Wire1_Z
rrf W1B
call pause_64us
call Wire1_Z
decfsz count
goto r1
bsf INTCON, GIE ; разрещаем прерывания
return
Wire1_Recieve_byte ; приём байта
movlw .8 ; байт будет лежать в W1B
movwf count
bcf INTCON, GIE ; запрещаем прерывания
r2 call Wire1_0
call Wire1_Z
btfss PORTC, RC2
bcf W1B, 7
btfsc PORTC, RC2
bsf W1B, 7
rrf W1B
call pause_64us
decfsz count
goto r2
bsf INTCON, GIE ; разрещаем прерывания
return
Wire1_0
banksel TRISC
bcf TRISC, RC2 ; в порт уже записан 0 при инициализации
banksel PORTC
return
Wire1_Z
banksel TRISC
bsf TRISC, RC2
banksel PORTC
return
Теперь собственно что я делаю.
Код: Выделить всё
call Wire1_Reset
btfss flags, slave_pres
call DS18B20_ERROR ; индикация; из этой подпрограммы не выходит
movlw 0xCC ; команда "skip rom"
movwf W1B ; так как датчик на шине всего один
call Wire1_Send_byte
movlw 0x44 ; команда "convert t"
movwf W1B
call Wire1_Send_byte
call pause_1s
movlw 0xBE ; команда "read scratchpad"
movwf W1B
call Wire1_Send_byte
call Wire1_Recieve_byte
movf W1B, W
movwf LSB
call Wire1_Recieve_byte
movf W1B, W
movwf MSB
call Wire1_Reset ; нужны только первые 2 байта, останавливаем передачу
В итоге импульс Presence я получаю, когда датчик подключен и получаю сообщение об ошибке, когда не подключен. Все нормально.
Далее пропускаю ром-код и шлю команду "начать преобразование". Жду секунду, считываю только первые 2 байта ОЗУ. Считывается число 127, т. е. все единицы. Очевидно, что команду он не распознал. Либо косяки в подпрограммах, но я уже много раз все перепроверил. Не могу понять в чем дело.