Low_Value=Ds18b20_Read_Byte();//读SCRATCHPAD中Byte0;High_Value=Ds18b20_Read_Byte();//读SCRATCHPAD中Byte0; 但是如果按照上述的这种步骤去编程,读出来的温度值是+85度。为什么呢? 请看这段话的翻译:开机时的默认分辨率是12位。DS18B20在低功耗空闲状态下启动。要开始温度测量和a - d转换,主服务器必须...
DS18B20_Check(); DS18B20_Write_Byte(0xcc);//对总线上所有设备进行寻址 DS18B20_Write_Byte(0xbe);// 读取数据命令 dataL=DS18B20_Read_Byte(); //LSB dataH=DS18B20_Read_Byte(); //MSB temp=(dataH<<8)+dataL;//整合数据 if(dataH&0X80)//高位为1,说明是负温度 { temp=(~temp)+1; value=...
a=read_byte();\x05 //读取温度低八位的数据\x05 b=read_byte();\x05 //读取温度高八位的数据t =(b*256+a)*25;\x05\x05return(t>>2);很多人是这样写的,那后面的转换过程到底是什么意思,为什么高八位数据要乘256,最后乘25是什么意思,还有返回t>>2?不懂,而且不是说还要判断正负吗,为什么也...
从低位到高位读出*/staticunsignedchards18b20_Readbyte(void){ unsignedchari=0; unsignedcharBitVal=0; unsignedchardata=0;for(i=0;i<8;i++) { BitVal=ds18b20_Readbit(); data|= (BitVal<<i); }returndata; }/*@brief: step1:拉低1us step2:写BitVal step3:持续60us 从低位到高位写入*/static...
*/u16DS18B20_ReadTemp(void){u16 temp=0;u8 temp_H,temp_L;DS18B20_CheckDevice();//发送复位脉冲、检测存在脉冲DS18B20_WriteByte(0xCC);//跳过ROM序列检测DS18B20_WriteByte(0x44);//启动一次温度转换//等待温度转换完成while(DS18B20_ReadByte()!=0xFF){}DS18B20_CheckDevice();//发送复位脉冲、检测存在...
();//设置总线为输入模式delay_us(12);if(DS18B20_DQ_IN)data=1;elsedata=0;delay_us(50);returndata;}//从DS18B20读取一个字节//返回值:读到的数据u8DS18B20_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);}...
unsigned char DS18B20ReadByte(void) { unsigned char i,Dat; SetDQ(); Delay_us(5); for(i=8;i>0;i--) { Dat >>= 1; ResetDQ(); //从读时序开始到采样信号线必须在15u内,且采样尽量安排在15u的最后 Delay_us(5); //5us SetDQ(); ...
High_Value=Ds18b20_Read_Byte(); 再看下图,在发送功能指令之前前面要有2步,第一步,初始化。第二步,ROM指令。 DS18b20的功能指令有: CONVERT T [44h] WRITE SCRATCHPAD [4Eh] READ SCRATCHPAD [BEh](目前使用的功能指令) COPY SCRATCHPAD [48h]
*函 数名 : Ds18b20ReadByte* 函数功能 : 读取一个字节 *输 入 : 无* 输 出 : dat***/ uchar Ds18b20ReadByte() { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DSPORT = 0; // 给脉冲信号 dat>>=1; DSPORT = 1; //...
TL = OneWire_ReadByte(&pDS18B20->DQ);//读取温度高位 TM = OneWire_ReadByte(&pDS18B20->DQ);//读取温度低位 if ((TM & 0xF8) == 0)//正数 { *temperature = ((int16_t)((TM << 8) | TL)) * 0.0625f; } else//负数 {