硬件上加了一个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不能接低,还是延时问题时序不对?求指点