static int OneWireSession(unsigned char req, unsigned char res[])
{
unsigned Req;
unsigned *Res;
unsigned int i;
Req = (req << 24) | (crc8(req << 24, 8) << 16);
Res = (unsigned *)res;
set_pin_value(1);
set_pin_as_output();
StartTimer();
for (i = 0; i < 60; i++) {
WaitTimerTick();
}
set_pin_value(0);
for (i = 0; i < 2; i++) {
WaitTimerTick();
}
for (i = 0; i < 16; i++) {
int v = !!(Req & (1U << 31));
Req <<= 1;
set_pin_value(v);
WaitTimerTick();
}
WaitTimerTick();
set_pin_as_input();
WaitTimerTick();
for (i = 0; i < 32; i++) {
(*Res) <<= 1;
(*Res) |= get_pin_value();
WaitTimerTick();
}
StopTimer();
set_pin_value(1);
set_pin_as_output();
return crc8(*Res, 24) == res[0];
}
这里面的东西不明白,谁能跟我讲一讲?谢谢!