#define dht22 PIN_A0
#bit dht_io = 0xf85.0


byte dht22_dat[5];
byte leer_datos_dht22();


Void dht_init (void)
{
dht_io=0;
delay_ms(1);
output_high(dht22);
}

byte leer_datos_dht()
{
byte i = 0;
byte result=0;
for (i=0; i< 8; i++) 
   {
   while(input(dht22)==0);
   delay_us(30);
   if(input(dht22)==1)
      {
      result |=(1<<(7-i));
      }
   while(input(dht22)==1);
   }
return result;
}
Void leer_dht22(float &dhthum,float &dthtemp)
{
byte dht22_in, i, dht22_checksum;
int16 temperatura, humedad; 
float temp,hum;
dht_io=0;
output_high(dht22);
delay_us(20);
output_low(dht22);
delay_ms(18);
output_high(dht22);
delay_us(22);
dht_io=1;
delay_us(5);
dht22_in=input(dht22);
   if(dht22_in)
   {
   return;
   }
delay_us(80);                                   
dht22_in=input(dht22);
   if(!dht22_in)
   {
   return;
   }
delay_us(80);
for(i=0; i<5; i++)
   {
   dht22_dat[ i ] = leer_datos_dht();
   }
dht_io=0;
delay_us(10);
output_high(dht22);
dht22_checksum= dht22_dat[0]+dht22_dat[1]+dht22_dat[2]+dht22_dat[3];
if(dht22_dat[4]!=dht22_checksum){}
humedad = make16(dht22_dat[0],dht22_dat[1]);
temperatura = make16(dht22_dat[2],dht22_dat[3]);
hum=humedad;
temp=temperatura;
dhthum=(hum)/10;
dthtemp=(temp)/10;
}
