Цитата(Леонид Иванович @ Feb 5 2016, 04:09)

Прерывания надо запрещать только в промежутке от окончания импульса сброса до момента поллинга "presence pulse" (это 75 мкс), а также от начала тайм-слота до считывания бита (это примерно 60 мкс). Остальное время прерывания могут как угодно растягивать процесс обмена - ни на что это не повлияет.
За 75 или 60 мкс у Вас успеет потеряться к примеру один байт в UART-е работающем без FIFO на скорости 230400.
Прерывания
вообще запрещать не нужно. Вся работа идёт в ISR. Процесс приёма бита:
1.Мастер включает pull down шины; программирует таймер на выдержку 15 мкс; выходит из ISR.
2.Получив прерывание таймера: выключает pull down шины; программирует таймер в режим capture с прерыванием/защёлкиванием значения таймера от фронта сигнала на шине; также программируется таймер на отслеживание таймаута
(на случай если удалённая сторона померла или линия залипла в "pull down"); выходит из ISR.
3.Получив прерывание таймера (таймаут): детектирует состояние ошибки обмена с датчиком - завершает процедуру обмена; выходит из ISR.
4.Получив прерывание таймера (обнаружен фронт на шине): считывает защёлкнутое значение таймера, вычисляет прошедшее время - определяет значение бита, сохраняет его; декрементирует счётчик оставшихся бит, если не 0 - программирует таймер на выдержку интервала времени до начала след. бита согласно требуемой и допустимой скорости обмена по шине; выходит из ISR.
5.Переход к п.1.
Всё! Ни одного запрета прерывания! Тем более на огромные интервалы порядка десятков мкс.
Можно немного упростить алгоритм, если не использовать режим capture таймера, а работать на обычных выдержках с принятием решений по границам состояний бит '0' и '1'. Но правильнее будет с capture.
Алгоритм передачи ещё проще, даже описывать смысла нет.