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; }
void delay_us(uint16_t delay) { uint16_t i; uint16_t maxcount = (delay / 5); for (i = 0; i < maxcount; i++) { delay_5us(); } }
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); } }
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); }