关于DS18B20的读数问题,为啥一直是高电平?

wjhx wjhx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
硬件上加了一个10K上拉电阻,已经试过4.7K及两个4.7K并联,供电3.3V,不加上拉电阻是不能读出数据的。

读取代码:
unsigned char Ds18b20Read(void)
{
unsigned char Value = 0x00;
unsigned int i;
// ds18b20IO_1();
// Ds18b20Delay(3);
for(i=0;i<8;i++)
{
Value >>= 1;
//拉低
Ds18b20OutputInitial();
ds18b20IO_0();
Ds18b20Delay(3);
//释放
ds18b20IO_1();
Ds18b20Delay(3);
if(P2IN & BIT2)
Value |= 0x80;

Ds18b20Delay(60);
}
return Value;
}

读取:
Ds18b20Initial();
Ds18b20Write(0xcc); // 跳过读序号列号的操作
Ds18b20Write(0x44); // 启动温度转换
Ds18b20Delay(2000);

Ds18b20Initial();
Ds18b20Write(0xcc); //跳过读序号列号的操作
Ds18b20Write(0xbe); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
V1 = Ds18b20Read(); //低位
V2 = Ds18b20Read(); //高位

中间加了2000us的延时,试过800ms及200us各试验数据,波形:





从复位后的应答看,设备是可以正常回应的,而且这个设备替换过,应该不是设备问题,为啥这个回复的信息都是高电平,是哪里接错了致使18B20不能接低,还是延时问题时序不对?求指点
...全文
评论 7
收藏 已收藏
分享
返回顶部
wjhx
单片机/工控 27,522 成员 28,796 内容