The code now disables preemption before the very first output change in
order to get more accurate timing.
Then, instead of converting sbintime_t to microseconds the code now does the
opposite. It's easier -- just a multiplication -- and sufficiently
accurate -- 0.03%. Also, there is no risk of an overflow for the periods
defined by the protocol.
Finally, the read time slot was not followed by t_rec recovery time.
I actually used 2 * t_rec for that. I do not have a clear justification for
that, but without t_rec my DS18B20 consistently failed to get detected, with
t_rec it was fifty-fifty, and with 2 * t_rec it is reliable.