示例#1
0
文件: ds18b20.c 项目: 198401/pid
static BYTE Init_DS18B20(void)
{
    BYTE errTime=0;

    DS18B20_OUT;
    DS18B20_H;   
    DS18B20_L;        
    delay_5us(90);      
    DS18B20_H;
    DS18B20_IN;
    delay_5us(16);

    while (DS18B20_STU)
    {
        delay_5us(1);    
        errTime++;
        if (errTime>20)
            return 0;
    }
    errTime=0;
    while (!(DS18B20_STU))
    {
        delay_5us(1);   
        errTime++;
        if (errTime>50)
            return 0;
    }
    return 0xff;
}
示例#2
0
void delay_us(uint16_t delay) {
  uint16_t i;
  uint16_t maxcount = (delay / 5);

  for (i = 0; i < maxcount; i++) {
    delay_5us();
  }
}
示例#3
0
文件: ds18b20.c 项目: 198401/pid
static void DS18B20_WriteByte(BYTE Data)
{
    BYTE i;
    BYTE temp;
    DS18B20_IN;
    for (i=0;i<8;i++)
    {
        DS18B20_OUT;
        DS18B20_L;
        delay_5us(1);
        temp = Data >> i;
        temp &= 0x01;               
        if (temp)
            DS18B20_H;
        else
            DS18B20_L;
        delay_5us(11);
        DS18B20_IN;
        delay_5us(1);
    }
}
示例#4
0
文件: ds18b20.c 项目: 198401/pid
static BYTE DS18B20_ReadByte(void)
{
    BYTE i;
    BYTE temp = 0;

    DS18B20_IN;
    for (i=0;i<8;i++)
    {
        temp >>= 1;      
        DS18B20_OUT;
        DS18B20_L;
        delay_5us(1);
        DS18B20_H;
        DS18B20_IN;       
        delay_5us(2);
        if (DS18B20_STU)
            temp |= 0x80;
        delay_5us(10);
        DS18B20_OUT;
        DS18B20_H;
    }
    delay_5us(1);
    return(temp);
}