打印
[测量]

多路DS18B20读取温度

[复制链接]
66|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
icefox225|  楼主 | 2025-1-14 16:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
目前多个DS18B20的ROM读取,我发现2个的时候可以读,焊了8个就读不到了,不知道是什么原因。
uint8 DS18B201_Read_Byte(void)
{
    uint8 i,i_u8Data=0;
    DS18B20_BIT_DIR(1);
    General_Wait(30);
    for(i=0;i<8;i++)
    {     
                DS18B20_BIT_CLR;
                i_u8Data >>= 1;
                General_Wait(30);
                DS18B20_BIT_SET;
        DS18B20_BIT_DIR(0);
                General_Wait(50);
                if(DS18B20_BIT_DATA)
                {
                    i_u8Data = i_u8Data | 0x80;
                }
                General_Wait(150);   
                DS18B20_BIT_DIR(1);
    }
    return i_u8Data;
}
// 从ds18b20得到温度值,精度:0.1C,返回温度值(-550~1250),Temperature1返回浮点实际温度
float DS18B20_Get_Temp(uint8 i)
{
        //u8 flag;
        uint8 j;//匹配的字节
        uint8 TL, TH;
        int16 Temperature;
        float Temperature1;
        DS18B20_Reset();
        j = DS18B20_Read_DQ();
        DS18B201_Write_Byte(0xcc);// skip rom
        DS18B201_Write_Byte(0x44);// convert
    General_Wait(100);
        DS18B20_Reset();
        j =DS18B20_Read_DQ();

        // DS18B20_Write_Byte(0xcc);// skip rom
        //匹配ID,i为形参
        DS18B201_Write_Byte(0x55);
        for (j = 0; j < 8; j++)
        {
                DS18B201_Write_Byte(DS18B20_ID[i][j]);
        }
    DS18B201_Write_Byte(0xbe);
        TL = DS18B201_Read_Byte(); // LSB   
        TH = DS18B201_Read_Byte(); // MSB  
    Temperature = (TH << 8) | TL;
    Temperature1 = (float)Temperature;
    Temperature1*=0.0625;
        return Temperature1;
}
大家帮忙看看我的读取温度有问题吗?读到全是FFFF。ROM地址确定是对的

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

223

主题

353

帖子

1

粉丝