DS18B20

在上电复位的时候,温度寄存器中的值为0x0550,即+85摄氏度。如果在板子上显示的一直是85.5摄氏度,就说明DS18B20根本没有进行温度转换,你读到的是上电复位的初始值

#define uchar unsigned char
#define uint unsigned int 


uint SMG_temp=0;
uchar temp=0;

void DS18B20_Get_Tempreature()
{
    uchar LSB,MSB;
    init_ds18b20(); //复位
    Write_DS18B20(0xCC);    //跳过ROM指令
    Write_DS18B20(0x44);    //开始温度转换
    Delay_OneWire(800); //延时700-900ms

    init_ds18b20(); //复位
    Write_DS18B20(0xCC);    //跳过ROM指令
    Write_DS18B20(800); 

    LSB=Read_DS18B20();//读取暂存器的低八位
	MSB=Read_DS18B20();//读取暂存器的高八位

    temp=MSB;
    temp=temp<<8|LSB;

    /*
    我们可知,LSB这个第八位数据的第四位是小数位,MSB这个高八位数据的高五位是符号表示
    如果需要读取的数据是整数数据
    SMG_temp>>=4; 可以直接获得数据
    temp=SMG_temp;
    */
   //如果需要读取小数点一位
   if(SMG_temp&0xf800==0x0000) //如果高五位都是0,则是正数
   {
     temp>>=4;
     temp=temp+(LSB&0x0f)*0.0625;//将LSB与上0x0f,LSB高4位清零,获得小数位
     SMG_temp=temp*10;
     //读出数据为负温度时,则需要将LSB和MSB整合成的16位整数,取反加1后,再乘以0.0625,因为温度数据是以补码形式表示的。
   }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值