Ejemplo n.º 1
0
uint8_t w1_byte_wr(uint8_t b)
{
  uint8_t i = 8, j;
  do{
    j = w1_bit_io( b & 1 );
    b >>= 1;
    if( j )
      b |= 0x80;
  }while( --i );
  return b;
}
Ejemplo n.º 2
0
uint w1_byte_wr( uchar b )
{
    uchar i = 8, j;
    do {
        j = w1_bit_io( b & 1 );
        b >>= 1;
        if( j )
            b |= 0x80;
    } while( --i );
    return b;
}
Ejemplo n.º 3
0
uint8_t w1_rom_search(uint8_t diff, uint8_t* id)
{
  uint8_t i, j, next_diff;
  uint8_t b;

  if( w1_reset() )
    return PRESENCE_ERR;			// error, no device found
  w1_byte_wr( SEARCH_ROM );			// ROM search command
  next_diff = LAST_DEVICE;			// unchanged on last device
  i = 8 * 8;					// 8 bytes
  do{
    j = 8;					// 8 bits
    do{
      b = w1_bit_io( 1 );			// read bit
      if( w1_bit_io( 1 ) ){			// read complement bit
	if( b )					// 11
	  return DATA_ERR;			// data error
      }else{
	if( !b ){				// 00 = 2 devices
	  if( diff > i ||
	    ((*id & 1) && diff != i) ){
	    b = 1;				// now 1
	    next_diff = i;			// next pass 0
	  }
	}
      }
      w1_bit_io( b );     			// write bit
      *id >>= 1;
      if( b )					// store bit
	*id |= 0x80;
      i--;
    }while( --j );
    id++;					// next byte
  }while( i );
  return next_diff;				// to continue search
}