Temperatur & Feuchtigkeitssensor DHT11: digital vs. analog PIN

Danke Mario für den Link & Infos. Habe ich jetzt nachgelesen.

Wie oben gesagt,ich hab ein IBOARD und das hat nur analoge Inputs (so habe ich es zumindest im DS und im Forum verstanden).
IBoard Ethernet http://iteadstudio.com/store/images/produce/Platform/ArduinoCom/IBoard/iBoard_DS.pdf

Hier im Nachbar-Thread Arduino Forum wird/wurde auch diskutiert, daß der DHT11 kein analoges Interface hat.
Um so mehr bin ich ja erstaunt, daß der Sketch unten sehr wohl läuft und explizit auf analogen PIN eingeht.
Ich würd gern den Lösungsansatz wissen / verstehen. Allein diese Zeile versteh ich nicht.
while(!(PINC & _BV(DHT11_PIN)))
Okay..gerade gegoogelt..PINC "bedeutet" bedeutet "direct port reading". Und hier würde mir der Hintergrund bzgl. PINC evtl. weiterhelfen, um diese Thematik digital vs. analog zu verstehen.

#define DHT11_PIN 0      // define anlog  port 0 
  
byte read_dht11_dat() 
{ 
  byte i = 0; 
  byte result=0; 
  for(i=0; i< 8; i++) 
  { 
    while(!(PINC & _BV(DHT11_PIN))) 
    {};  // wait  forever until anlog input port 0 is '1'   (NOTICE: PINC reads all the analog input ports  
    //and  _BV(X) is the macro operation which pull up positon 'X'to '1' and the rest positions to '0'. it is equivalent to 1<<X.)  
    delayMicroseconds(30); 
    if(PINC & _BV(DHT11_PIN))  //if analog input port 0 is still '1' after 30 us 
      result |=(1<<(7-i));     //this position is 1 
    while((PINC & _BV(DHT11_PIN)));  // wait '1' finish 
    } 
    return result; 
} 
  
  
void setup() 
{ 
  DDRC |= _BV(DHT11_PIN);   //let analog port 0 be output port  
  PORTC |= _BV(DHT11_PIN);  //let the initial value of this port be '1' 
  Serial.begin(9600); 
  Serial.println("Ready"); 
} 
      
void loop()      
{ 
  byte dht11_dat[5];     
  byte dht11_in; 
  byte i;// start condition 
       
  PORTC &= ~_BV(DHT11_PIN);    // 1. pull-down i/o pin for 18ms 
  delay(18); 
  PORTC |= _BV(DHT11_PIN);     // 2. pull-up i/o pin for 40us 
  delayMicroseconds(1); 
  DDRC &= ~_BV(DHT11_PIN);     //let analog port 0 be input port  
  delayMicroseconds(40);       
    
  dht11_in = PINC & _BV(DHT11_PIN);  // read only the input port 0 
  if(dht11_in) 
  { 
    Serial.println("dht11 start condition 1 not met"); // wait for DHT response signal: LOW 
    delay(1000); 
    return; 
  } 
  delayMicroseconds(80); 
  dht11_in = PINC & _BV(DHT11_PIN); //   
  if(!dht11_in) 
  { 
    Serial.println("dht11 start condition 2 not met");  //wair for second response signal:HIGH 
    return; 
  } 
    
  delayMicroseconds(80);// now ready for data reception 
  for (i=0; i<5; i++) 
  {  dht11_dat[i] = read_dht11_dat();}  //recieved 40 bits data. Details are described in datasheet 
    
  DDRC |= _BV(DHT11_PIN);      //let analog port 0 be output port after all the data have been received 
  PORTC |= _BV(DHT11_PIN);     //let the  value of this port be '1' after all the data have been received 
  byte dht11_check_sum = dht11_dat[0]+dht11_dat[1]+dht11_dat[2]+dht11_dat[3];// check check_sum 
  if(dht11_dat[4]!= dht11_check_sum) 
  { 
    Serial.println("DHT11 checksum error"); 
  } 
  Serial.print("Current humdity = "); 
  Serial.print(dht11_dat[0], DEC); 
  Serial.print("."); 
  Serial.print(dht11_dat[1], DEC); 
  Serial.print("%  "); 
  Serial.print("temperature = "); 
  Serial.print(dht11_dat[2], DEC); 
  Serial.print("."); 
  Serial.print(dht11_dat[3], DEC); 
  Serial.println("C  "); 
  delay(2000);  //fresh time 
}