还是这个问题未解决。STC90C52RC,单总线四根,12864显示,之前温度显示正常,其中一根18b20到49.2度后就四个都停止不动了,重启全部是85,降温显示正常。测试只有一根时也是到58度左右停止。菜鸟不清楚是什么原因拜求各位大神解答,谢谢了。附ds18b20部分程序:
//——————ds18b20延时——————//
void delay(uint t)
{
while(t--);
}
//——————初始化——————//
void init_ds18b20(void)
{
uchar n;
dq = 1;
delay(8);
dq = 0;
delay(80);
dq = 1;
delay(8);
n = dq;
delay(4);
}
//——————写数据——————// 低位在前
void write_byte(uchar dat)
{
uchar i;
for(i=0; i<8; i++)
{
dq = 0;
dq =dat&0x01;
delay(4);
dq = 1;
dat>>=1;//右移一位
}
delay(4);
}
//——————读字节——————//
uchar read_byte(void)
{
uchar i, value;
for(i=0; i<8; i++)
{
dq = 0;
value>>=1;
dq = 1;//释放完采样
if(dq)
value|=0x80;
delay(4);
}
return value;
}
//——————读取温度——————//
uint readtemperature(uchar *ID)
{
uchar a;
uint b;
init_ds18b20();
write_byte(0x55);//匹配rom
for(a=0; a<8; a++)
{
write_byte(ID[a]);
}
delay_50us(10);
write_byte(0x44);//启动温度测量
delay_50us(10);
init_ds18b20();
delay_50us(10);
// write_byte(0xcc);
write_byte(0x55);//匹配rom
for(a=0; a<8; a++)
{
write_byte(ID[a]);
}
delay_50us(10);
write_byte(0xbe);//读取
a = read_byte(); //低八
b = read_byte(); //高八
b = ((b*256)+a)*0.0625*10;
return b;
} |