假设:串联4个18b20
1.单片机上电后逐个给18b20供电读取rom序列号存入4个数组
2.通过匹配rom序列号来读取温度。
读取rom序列号代码:
void rom() //读取序列号
{
uchar i;
int j;
initionds18b20(); //复位
delay1(1); //延时
writeds18b20(0x33); //发送读序列号子程序
for (j=0;j<9;j++)
{
ds_rom1[j]=readds18b20(); //读取序列号存入数组
}
}
匹配代码:
void Match_rom(uchar a) //匹配ROM
{
uchar j;
writeds18b20(0x55); //发送匹配ROM命令
if(a==1)
{
for(j=0;j<8;j++)
writeds18b20(ds_rom1[j]); //发送18B20的序列号,先发送低字节
}
}
问题:数组内的数据处理,获取rom序列号后数组内可能是{28,b0,96,45,92,03,02,dd}通过匹配肯定不成功。
{0x28,0xb0,0x96,0x45,0x92,0x03,0x02,0xdd}匹配成功
关于18b20使用疑惑:
1网上教程大部分是将rom序列号写入程序中,如果更换18b20还要从新编写,我觉得不方便
2还有一种是用18b20搜索,多个18b20搜索后读取温度值。问题是有的需要固定位置,这一起读取确定不了位置。
关于多点测温想法:
1.一个18b20连接一个端口
2.利用锁存器切换多个18b20供电.
|