④ 读时序
单总线器件仅在主机发出读时序时,才向主机传输数据,所以,在主机发出读数据命令后,必须马上产生读时序,以便从机能够传输数据。 所有读时序至少需要60us,且在2次独立的读时序之间至少需要1us的恢复时间。每个读时序都由主机发起,至少拉低总线1us。主机在读时序期间必须释放总线,并且在时序起始后的15us之内采样总线状态。
典型的读时序过程为:主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取单总线当前的电平,然后延时50us。
典型的读时序过程为:主机输出低电平延时2us,然后主机转入输入模式延时12us,然后读取单总线当前的电平,然后延时50us。
//从DS18B20读取一个位 //返回值:1/0
u8 DS18B20_Read_Bit(void) // read one bit
{undefined
u8 data;
DS18B20_IO_OUT();//设置为输出
DS18B20_DQ_OUT=0; //输出低电平2us
delay_us(2);
DS18B20_DQ_OUT=1; //拉高释放总线
DS18B20_IO_IN();//设置为输入
delay_us(12);//延时12us
if(DS18B20_DQ_IN)data=1;//读取总线数据
else data=0;
delay_us(50); //延时50us
return data;
}
读取一个字节数据
//从DS18B20读取一个字节 //返回值:读到的数据
u8 DS18B20_Read_Byte(void) // read one byte
{
u8 i,j,dat;
dat=0;
for (i=1;i<=8;i++)
{
j=DS18B20_Read_Bit();
dat=(j<<7)|(dat>>1);
}
return dat;
}
|