Цитата(kovigor @ Jul 21 2014, 12:43)

Проблема может быть в том, что вы прерываете тайм-слот при обмене с датчиком. Например, стандартная библиотека, поставляемая с CodeVision, так и построена - ее функции можно прерывать, в результате данные от датчика (к датчику) могут приходить с ошибками. Нужно обязательно запрещать прерывания на время работы функций библиотеки, но это далеко не всегда приемлемо. Я для себя эту проблему решил, полностью отказавшись от библиотеки и написав свою реализацию получения температуры от датчика (кому надо, могу поделиться) ...
При работе с сетью у меня все прерывания запрещены. Для приёма и передачи использую 1 и тот же пин не UART (хотя возможно лучше использовать 2 пина и транзистор, один из пинов включает и выключает ключ, а другой работает на приём), причём этот пин всегда включен на выход.
Приём и передача бита в соответствии с datasheet.
Приём:
Код
PRIEM_BIT_CIKL:
rcall ZA60MKS
cbi PORTE,0
rcall ZA2MKS
sbi PORTE,0
rcall ZA2MKS
PROV_BIT:
sbic PINE,0;
rjmp BIT_1;ВЫПОЛНИТЬ КОМАНДУ ПЕРЕХОДА ЕСЛИ ПРИНИМАЕМЫЙ БИТ=1
rjmp BIT_0
Передача:
Код
UST1_BIT_CIKL:
dec vspom_reg
lsr bait
cbi PORTE,0
rcall ZA5MKS
sbi PORTE,0
rcall ZA60MKS
rjmp PEREDACHA_BIT_CIKL
UST0_BIT_CIKL:
dec vspom_reg
lsr bait
cbi PORTE,0
rcall ZA60MKS
sbi PORTE,0
rcall ZA5MKS
Пришёл к выводу , что влияют паразитные ёмкости да и кабель имеет значение. Заменил FTP кабель на телефонную лапшу так даже хуже стало.
Сообщение отредактировал Santy - Jul 22 2014, 16:16