void ds18b20_search_ROM()
{
unsigned char id_bit_number;
unsigned char id_byte_number;
unsigned char id_bit, cmp_id_bit;
unsigned char value;
unsigned i=0;
unsigned j; //冲突次数
unsigned m=0; //搜索完成一个器件
unsigned ROM_bit=0;
unsigned ROM_bit_number=0;
// 搜索变量初始化
id_bit_number = 0; //ID 位数
id_byte_number=0;
id_bit=0;cmp_id_bit=0;
for(j=0;j<2;j++)
{
while(ds18b20_init());
ds18b20_write_date(0xF0);
while(!((id_bit)&(cmp_id_bit)))
{
id_bit = ds18b20_read_bit(); //原码
cmp_id_bit = ds18b20_read_bit(); //反码
value=((id_bit<<1)|(cmp_id_bit));
switch(value)
{
case 0x01 : //同为0
{
ROM_bit=0;
} break;
case 0x10 : //同为1
{
ROM_bit=1;
} break;
case 0x00 : //不同位
{
if(j==1) //
{
ROM_bit=1;
}
else
{
ROM_bit=0 ;
}
} break;
case 0x11 : ROM_bit=2; break;
}
if(ROM_bit==0)
{
ROM_LOT_ID[j][id_bit_number]&=(~(1<<i)); //置0
ds18b20_write_bit(ROM_bit);
}
if(ROM_bit==1)
{
ROM_LOT_ID[j][id_bit_number]|=(1<<i);
ds18b20_write_bit(ROM_bit);
}
if(ROM_bit==2)
{
id_bit=0;
cmp_id_bit=0;
}
i++;
ROM_bit_number++;
if(i==8)
{
i=0;
id_bit_number++;
if((id_bit_number==8)&&(ROM_bit_number==65))
{
ROM_bit_number=0;
id_bit_number=0;//搜索完一遍
id_bit=0;cmp_id_bit=0;
break;
}
}
}
}
}
|