关于LPC1768 连接DS18B20测温的搜索算法问题

使用LPC1768做测温,在已知DS118B20的ID序列号情况下,可以使用匹配ROM指令进行温度读取,但是使用Search ROM指令时,读两位只有第一次读上01,之后一直读上来是11,DS18B20器件没有问题,微秒延时也没有问题,读时隙的时序也对着手册看了没有问题,此前在STM32上实现没有问题,但是怎么到1768上就出问题了
算法是借鉴的网路上的代码


uint8_t DS18B20_Read_2Bit(void)
{
  unsigned char ch;
  unsigned char q ;
  for(q=2;q>0;q--)
  {
      ch=ch<<1;
      Ds18b20_DQ_Output();
      DQ(0);                     
      Delay1us(2);               
      DQ(1);                       
      //Delay1us(10);               
      Ds18b20_DQ_input();          
      Delay1us(12);
      if(DQ_r)                    
      {
        ch = ch|0x01 ;
      }
      Delay1us(50);
  }
  return (ch);                 
}
void DS18B20_Search_Rom(void)  
{
    uint8_t k, l, chongtuwei=0, m, n, num;
    uint8_t zhan[5]={0};
    uint8_t ss[64];
    l = 0;
    num = 0;
    do
    {
        Init18B20(); 
        DS18B20_Write_byte(0xF0); //    search ROM        
        for (m = 0; m < 8; m++)  
        {
            uint8_t s = 0;  
            for (n = 0; n < 8; n++)  
            {
                            k = DS18B20_Read_2Bit();
                            k = k & 0x03;
                            s >>= 1;
                            if (k == 0x01)
                            {
                                DS18B20_Write_Bit(0);
                                ss[(m*8 + n)] = 0;
                            }
                            else if (k == 0x02)
                            {
                                s = s | 0x80;
                                DS18B20_Write_Bit(1);
                                ss[(m * 8 + n)] = 1;
                            }
                            else if (k == 0x00)
                            {  
                                chongtuwei = m * 8 + n + 1;  
                                if (chongtuwei > zhan[l])  
                                {  
                                        DS18B20_Write_Bit(0);  
                                        ss[(m * 8 + n)] = 0;  
                                        zhan[++l] = chongtuwei;  
                                }  
                                else if (chongtuwei < zhan[l])  
                                {  
                                        s = s | ((ss[(m * 8 + n)] & 0x01) << 7);  
                                        DS18B20_Write_Bit(ss[(m * 8 + n)]);  
                                }  
                                else if (chongtuwei == zhan[l])  
                                {  
                                        s = s | 0x80;  
                                        DS18B20_Write_Bit(1);  
                                        ss[(m * 8 + n)] = 1;  
                                        l = l - 1;  
                                }  
                            }  
                            else  
                            {
                            }
            }  
            DS18B20_ID[num][m] = s;
        } 
        num = num + 1;
    }
    while (zhan[l] != 0 && (num < MaxSensorNum));  
    DS18B20_SensorNum = num;  
}

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。