Hello,

Here is my code to read temperature and humidity from a DHT11 sensor. It has also the SLEEP functionality.

I tried to make it as simple and clear as possible

Code:
' ====== PIC 16F690 FUSES ==========================================================================
' External oscillator 8MHz
@ __config _FCMEN_OFF &_IESO_OFF &_CPD_OFF &_WDT_OFF &_HS_OSC &_BOR_OFF &_CP_OFF &_PWRTE_OFF &_MCLRE_OFF
  
' ====== REGISTERS =================================================================================
' Registers   76543210
OPTION_REG = %10000000 ' PORT A&B Pull-Ups and Prescaler        (def.: %11111111)
OSCCON     = %00000000 ' External                               (def.: %01101000)
WDTCON     = %00001001 ' Enable WatchDog (the REGISTER, not the fuse) for SLEEP

' ====== DEFINES ===================================================================================
DEFINE OSC 8 ' don't forget the external oscillator

' ====== VARIABLES =================================================================================
DHT_Data    VAR BYTE [32] ' hold bitwise humidity and temperature data
HUMIDITY    VAR BYTE      ' holds humidity value
TEMPERATURE VAR BYTE      ' holds temperature value
x           VAR BYTE      ' a counter
SerialData  VAR PORTA.0   ' To display data through serial comm
DHT_Port    VAR PORTB.7   ' PIC's port to DHT11's "OUT" pin
DHT_PWR     VAR PORTC.7   ' power supply for DHT11's module - "+" pin (2mA)

' ====== INTIALIZE =================================================================================                                                                                                    
HIGH SerialData           'set port High to avoid sending serial "garbage"

' ====== PROGRAM START =============================================================================
MAIN:

    ' Power-up DHT11
    HIGH DHT_PWR          ' switch ON DHT11 sensor
    HIGH DHT_Port         ' make the PIC's port an Output
    PAUSE 1000            ' let DHT11 settle
    
    ' Send Start Signal to DHT11
    DHT_Port = 0 : PAUSE 20   ' set LOW at least 18ms to let DHT11 detect the signal
    DHT_Port = 1 : PAUSEUS 30 ' set 20-40µs HIGH and wait for DHT11's response

    ' DHT11 responds to MCU now in going 80µs LOW and 80µs HIGH before sending data
    WHILE DHT_Port = 0 : WEND  ' DHT11 goes LOW - just wait until (~80µs) it goes HIGH
    ' Once gone HIGH, DHT11 waits 80µs and then starts to send data

    ' Receive 32 data bits (out of 40 - last 8bits are checksum - not used)
    FOR x = 31 TO 0 STEP -1
        PULSIN DHT_Port, 1, DHT_Data[x]
    NEXT x
    
    ' Switch OFF DHT11 sensor (not mandatory but gives better RH results)
    LOW DHT_PWR
    
    ' Convert pulses length into binary values (26-28µs = "0", 70µs = "1")
    FOR x = 31 TO 0 STEP -1
        IF DHT_Data[x] > 10 THEN  ' 50µs (somewhere between 28 and 70µs)
            DHT_Data[x] = 1       ' is it greater than 50µs so it's a "1"
        ELSE
            DHT_Data[x] = 0       ' is it smaller than 50µs so it's a "0"
        ENDIF
    NEXT x
    
    ' Convert bits to variables
    HUMIDITY.7 = DHT_Data[31]
    HUMIDITY.6 = DHT_Data[30]
    HUMIDITY.5 = DHT_Data[29]
    HUMIDITY.4 = DHT_Data[28]
    HUMIDITY.3 = DHT_Data[27]
    HUMIDITY.2 = DHT_Data[26]
    HUMIDITY.1 = DHT_Data[25]
    HUMIDITY.0 = DHT_Data[24]
    
    TEMPERATURE.7 = DHT_Data[15]
    TEMPERATURE.6 = DHT_Data[14]
    TEMPERATURE.5 = DHT_Data[13]
    TEMPERATURE.4 = DHT_Data[12]
    TEMPERATURE.3 = DHT_Data[11]
    TEMPERATURE.2 = DHT_Data[10]
    TEMPERATURE.1 = DHT_Data[9]
    TEMPERATURE.0 = DHT_Data[8]    
    
    ' Display temperature and humidity
    SEROUT2 SerialData,84,["T: ", DEC TEMPERATURE, "C   RH: ", DEC HUMIDITY, "%", 13,10] '9600,8,N,1

    ' Now, goto low power for 1 minute    
    SLEEP 60 ' in seconds - wake-up every minute

    GOTO MAIN

'======= CIRCUITRY =================================================================================
'       [PIC]
'PORTA.0[19] ICSPDAT / Serial data out (PICkit2's UART tool RX pin)
'PORTA.1[18] ICSPCLK
'PORTA.2[17]
'PORTA.3[04] MCLR
'PORTA.4[03] OSC2 - 8Mhz Xtal
'PORTA.5[02] OSC1 - 8Mhz Xtal
'
'PORTB.4[13]
'PORTB.5[12]
'PORTB.6[11]
'PORTB.7[10] DHT11's "OUT" pin with 10k pull-up resistor
'
'PORTC.0[16]
'PORTC.1[15]
'PORTC.2[14]
'PORTC.3[07]
'PORTC.4[06]
'PORTC.5[05]
'PORTC.6[08]
'PORTC.7[09] DHT11's module power supply pin "+"