/* * DEKLARACE GLOBAL PROMENNYCH */ uint64_t ROM_NO = 0; /* * FUNKCE */ void first (void) { uint8_t id_bit_number = 0; uint8_t id_bit = 0; uint8_t cmp_id_bit = 0; uint8_t LastDiscrepancy = 0; uint8_t LastDeviceFlag = 0; uint8_t last_zero = 0; uint8_t search_direction; if(therm_reset()) { id_bit_number = 1; LastDiscrepancy = 0; last_zero = 0; therm_write_byte(THERM_CMD_SEARCHROM); for(uint8_t i=0; i<64; i++ ) { id_bit = therm_read_bit(); if(therm_read_bit()) { if(id_bit) return; // Error no device on bus else search_direction = 0; // 01 } else { if(id_bit)search_direction = 1; // 10 else // Discrepancy { if(id_bit_number > LastDiscrepancy) {last_zero = id_bit_number; search_direction = 0;} else if (id_bit_number == LastDiscrepancy) search_direction = 1; else search_direction = ROM_NO & ((uint64_t)1 << id_bit_number); } }//konec if(therm_read_bit()) if(search_direction) ROM_NO |= ((uint64_t)1 << i); else ROM_NO &= ~((uint64_t)1 << i); therm_write_bit(search_direction); id_bit_number++; }//konec foru LastDiscrepancy = last_zero; }