这段时间都在研究51机上的DS18B20温度传感器。好像它并没有严格按照时序上的时间来安排,比如下面这个读时序,这个DS是温控主线,DS把值传递给dat后按时序图上说要维持一段时间45us左右,但我测了一下这里的delay(3)就延迟了0.0031684秒(316.84us)。但我把这段程序放入程序中它确可以成功读出温度。我也曾把这个程序的时序按时序图里的时间改过,但改完后发现不能正确读温度了。这是怎么回事呢?
bit tmpreadbit(void) //read a bit
{
uint i;
bit dat;
DS=0;
//i++; //i++ for delay
DS=1;
//i++;
dat=DS;
delay(3);
return dat;
}
void tmpchange(void) //DS18B20 begin change
{
init();
delay482();
write(0xcc); // address all drivers on bus
write(0x44); // initiates a single temperature conversion
}