DS18B20低位与高位读出问题
时间:10-02
整理:3721RD
点击:
ReadOneChar(void)//读一个字节
{
unsigned char i=0;
unsigned char dat=0;
for (i=8;i>0;i--)
{ DQ=1;
DS18_delay(1);
DQ=0;
dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值)
DQ=1;
if(DQ)
dat|=0x80;
DS18_delay(4); }
return(dat);}
unsigned int ReadTemperature(void)//返回读取的温度.
{ Init_DS18B20(); //初始化,调用初始化函数
WriteOneChar(0xcc); //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号)
WriteOneChar(0x44); //启动温度转换,调用写函数,写0x44指令码(启动温度转换)
DS18_delay(125); //转换需要一点时间,延时
Init_DS18B20(); //初始化,调用初始化函数
WriteOneChar(0xcc); //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号?
WriteOneChar(0xbe); //调用写函数,写0xbe指令码,读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB
tempa=((tempH*256)+tempL)*6.25; //温度转换,扩大100返回 //
DS18_delay(10); //
tempa=tempL+tempH;
return(tempa);//运算结果返回到函数 }
对于 tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB 这两句话是怎样读出低位与高位的值?
求大神解读
{
unsigned char i=0;
unsigned char dat=0;
for (i=8;i>0;i--)
{ DQ=1;
DS18_delay(1);
DQ=0;
dat>>=1;//复合赋值运算,等效dat=dat>>1(dat=dat右移一位后的值)
DQ=1;
if(DQ)
dat|=0x80;
DS18_delay(4); }
return(dat);}
unsigned int ReadTemperature(void)//返回读取的温度.
{ Init_DS18B20(); //初始化,调用初始化函数
WriteOneChar(0xcc); //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号)
WriteOneChar(0x44); //启动温度转换,调用写函数,写0x44指令码(启动温度转换)
DS18_delay(125); //转换需要一点时间,延时
Init_DS18B20(); //初始化,调用初始化函数
WriteOneChar(0xcc); //跳过读序列号的操作,调用写函数,写0xcc指令码(跳过读序列号?
WriteOneChar(0xbe); //调用写函数,写0xbe指令码,读温度寄存器(头两个值分别为温度的低位和高位)
tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB
tempa=((tempH*256)+tempL)*6.25; //温度转换,扩大100返回 //
DS18_delay(10); //
tempa=tempL+tempH;
return(tempa);//运算结果返回到函数 }
对于 tempL=ReadOneChar(); //读出温度的低位LSB
tempH=ReadOneChar(); //读出温度的高位MSB 这两句话是怎样读出低位与高位的值?
求大神解读
先读的就是低位值,后读的就是高位值