|
10黑幣
假設(shè):串聯(lián)4個18b20
1.單片機上電后逐個給18b20供電讀取rom序列號存入4個數(shù)組
2.通過匹配rom序列號來讀取溫度。
讀取rom序列號代碼:
void rom() //讀取序列號
{
uchar i;
int j;
initionds18b20(); //復(fù)位
delay1(1); //延時
writeds18b20(0x33); //發(fā)送讀序列號子程序
for (j=0;j<9;j++)
{
ds_rom1[j]=readds18b20(); //讀取序列號存入數(shù)組
}
}
匹配代碼:
void Match_rom(uchar a) //匹配ROM
{
uchar j;
writeds18b20(0x55); //發(fā)送匹配ROM命令
if(a==1)
{
for(j=0;j<8;j++)
writeds18b20(ds_rom1[j]); //發(fā)送18B20的序列號,先發(fā)送低字節(jié)
}
}
問題:數(shù)組內(nèi)的數(shù)據(jù)處理,獲取rom序列號后數(shù)組內(nèi)可能是{28,b0,96,45,92,03,02,dd}通過匹配肯定不成功。
{0x28,0xb0,0x96,0x45,0x92,0x03,0x02,0xdd}匹配成功
關(guān)于18b20使用疑惑:
1網(wǎng)上教程大部分是將rom序列號寫入程序中,如果更換18b20還要從新編寫,我覺得不方便
2還有一種是用18b20搜索,多個18b20搜索后讀取溫度值。問題是有的需要固定位置,這一起讀取確定不了位置。
關(guān)于多點測溫想法:
1.一個18b20連接一個端口
2.利用鎖存器切換多個18b20供電.
|
|