测试ds18b20时,读取的温度为255,问题出在哪啦?

2019-07-15 11:47发布

#include "reg52.h"

sbit DQ = P1^4;

//单总线延时函数
#ifndef STC12  
void Delay_OneWire(unsigned int t)  //STC89C52RC
{
        while(t--);
}
#else
void Delay_OneWire(unsigned int t)  //STC12C5260S2
{
        unsigned char i;
        while(t--){
                for(i=0;i<12;i++);
        }
}
#endif

//通过单总线向DS18B20写一个字节
void Write_DS18B20(unsigned char dat)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                DQ = 0;
                DQ = dat&0x01;
                Delay_OneWire(5);
                DQ = 1;
                dat >>= 1;
        }
        Delay_OneWire(5);
}

//从DS18B20读取一个字节
unsigned char Read_DS18B20(void)
{
        unsigned char i;
        unsigned char dat;

        for(i=0;i<8;i++)
        {
                DQ = 0;
                dat >>= 1;
                DQ = 1;
                if(DQ)
                {
                        dat |= 0x80;
                }            
                Delay_OneWire(5);
        }
        return dat;
}

//DS18B20初始化
bit init_ds18b20(void)
{
          bit initflag = 0;
         
          DQ = 1;
          Delay_OneWire(12);
          DQ = 0;
          Delay_OneWire(80); // 延时大于480us
          DQ = 1;
          Delay_OneWire(10);  // 14
          initflag = DQ;     // initflag等于1初始化失败
          Delay_OneWire(5);

          return initflag;
}

//DS18B20温度采集程序:整数
unsigned char rd_temperature(void)
{
    unsigned char low,high;
    unsigned char temp;

          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0x44); //启动温度转换
          Delay_OneWire(200);

          init_ds18b20();
          Write_DS18B20(0xCC);
          Write_DS18B20(0xBE); //读取寄存器

          low = Read_DS18B20(); //低字节
          high = Read_DS18B20(); //高字节

          temp = high<<4;
          temp |= (low>>4);

          return temp;
}

这个程序问题吗

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
hobbye501
1楼-- · 2019-07-16 01:28
Qing_S 发表于 2017-3-9 16:07
嗯嗯,时序调整过来,就好了

对的  问题不难 转换下思路就好了
Qing_S
2楼-- · 2019-07-16 01:40
hobbye501 发表于 2017-3-9 16:16
对的  问题不难 转换下思路就好了

谢谢大神啦
陈健000
3楼-- · 2019-07-16 06:25
 精彩回答 2  元偷偷看……
OuSam
4楼-- · 2019-07-16 07:20
是哪个时序问题啊?楼主能分享一下修改后的代码吗?我的一直初始化失败
紫水晶宝宝
5楼-- · 2019-07-16 07:48
Qing_S 发表于 2017-3-9 16:07
嗯嗯,时序调整过来,就好了

  你时序是怎么调整的,我现在也是读取的温度 255

一周热门 更多>