标题: DS18B20读数据问题,单片机程序读不出来 [打印本页]

作者: 2023orsu    时间: 2023-3-6 11:35
标题: DS18B20读数据问题,单片机程序读不出来
已经在逻辑分析仪看到了正常的温度数据反馈,但是程序读不出来,附上读温度函数,读出高电平

单片机源程序如下:
  1. uint8_t B20_ReadByte(void)
  2. {
  3. uint8_t i,data=0;
  4. for(i=0;i < 8;i++)     //位计数值
  5. {
  6.   data>>=1;      //右移,准备接受新的数据位

  7.   GPIO_Init(DS18B20_PORT,DS18B20_PIN,GPO);

  8.   DS18B20_OUT = 0;//拉低,启动读数据位
  9.   DELAY_US(5);      //等待5微秒
  10.   DS18B20_OUT = 1;  //释放总线
  11.   
  12.   GPIO_Init(DS18B20_PORT,DS18B20_PIN,GPI);         //配置为输入,开始读取数据位
  13.   DELAY_US(12);      //等待5微秒
  14.   if(DS18B20_IN)//该位是否为高
  15.   {
  16.    data|=0x80;     //是就将此位置高
  17.   }
  18.   if(!DS18B20_IN)//该位是否为高
  19.   {
  20.    data&=~0x80;     //是就将此位置高
  21.   }
  22.   DELAY_US(48);     //等待50微秒
  23. }
  24. return data;     //将读到的一个字节返回
  25. }
复制代码


作者: 人中狼    时间: 2023-3-6 13:52
看代码,似乎对数据的时序有误解
作者: dj2001    时间: 2023-3-6 13:57
18b20可以读出从9位到12位的不同分辨率的值,需要的时间不一样,从93ms到750ms,你检查一下是否给器件读出数据留出足够的时间。
作者: univers    时间: 2023-3-10 09:37
网上有很多DS18B20的戏动程序呀,很多开发板也有这个代码,你可以找找。人家写的是成功的。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1