多个DS18B20的温度测试有关问题

多个DS18B20的温度测试问题
由于DS18B20是单总线的器件,但是由于要省时,我把八个DS18B20接在p1口子上,然后把得到的数据进行分析,   但是我的程序哪里不对  哪个高手看看     


/*------------------------------------------------
                    
                   延时函数(1us)

------------------------------------------------*/
void Delay_1us(uint x)
  {
     while(x--);//时间大约是1us
   }

/*------------------------------------------------
                    
                  写1时序控制函数

------------------------------------------------*/

void DS18B20_Write_1(void)
{
P1 = 0x00;            //8个DQ 线全部设置为低电平
Delay_1us(10);       //延时10us左右
P1 = 0xff;           //8个DQ线全部输出高电平
Delay_1us(30);       //延时30us左右
}
/*------------------------------------------------
                    
                  写0时序控制函数

------------------------------------------------*/

void DS18B20_Write_0(void)
{
P1 = 0x00;         //8个DQ 线全部设置为低电平
Delay_1us(40);         //延时
P1 = 0xff;            //端口恢复高电平
Delay_1us(1);
}

 /*------------------------------------------------
               
                     18b20初始化

------------------------------------------------*/
void DS18B20_Reset(void)
{
uchar Error_Counter=0;
P1 = 0x00; //8个DQ 线全部设置为低电平
Delay_1us(500); //保持总线低电平500us
P1 = 0xff;
Delay_1us(100);
if(P1!=0x00) B20_Error = P1;//如检测到DS18B20总线响应了回复信号,则读取当前8条总线的状态
Delay_1us(50);
P1 = 0xff;
for(Error_Counter=0;Error_Counter<200;Error_Counter++)
{
if((P1&(~B20_Error))==(~B20_Error)) break; //如检测到总线的回复信号结束,则退出循环
Delay_1us(1);
}
P1 = 0xff; //恢复端口电平
Delay_1us(200); //延时 200us
}


/*------------------------------------------------
             
                总线读取一个数据位

------------------------------------------------*/
uchar DS18B20_ReadDQ(void)
{
uchar DQ_S=0;
P1 = 0x00; //8个DQ 线全部设置为低电平
Delay_1us(10);
P1 = 0xff; //端口置1,准备读取
Delay_1us(1); //延时待总线准备好数据
DQ_S = P1; //一次性读取8条DQ线的数据状态
P1 = 0xff; //恢复端口电平
Delay_1us(30); //延时
return DQ_S; //返回读取的值
}

/*------------------------------------------------