www.elektronik.si
DHT11

www.elektronik.si -> Osnove programiranja PIC-a v Assembler-ju

Avtor: TIBETKraj: Metlika PrispevekObjavljeno: Čet Nov 24, 2016 10:30 pm    Naslov sporočila:  DHT11
----------------------------------------------------------------------------
Mi lahko gdo pomaga pri oživljanju omenjenega senzorja.
Koda:
pBeriDHT  ; podatki iz dht senzorja
 ;decfsz stevecDHT, f
; return ; ni še 0, zato leti ven brez branja senzorja
 ;movlw .X;  (X * pavze) mora biti več kot 2 sekundi.
; movwf stevecDHT;
 ;nop
    mDHTout ;BANKSEL     TRISC
    BCF         DHTpin ;TRISC,0                 ;RC6 as output
   ; BANKSEL     PORTC
    BCF         DHTpin ;PORTC,0                 ;RC6 low
    CALL        Delay_20ms              ;RC6 low for 20ms
    BSF         DHTpin ;PORTC,0                 ;RC6 high
    CALL        Delay_30us              ;RC6 high for 30us
    mDHTin;BANKSEL     TRISC
    BSF         DHTpin ;TRISC,0                 ;RC6 as input
  ;  BANKSEL     PORTC
    CALL        Delay_160us             ;Wait for DHT11 response signal


Read_Integer_RH
    CALL        Read_BYTE
    MOVF        BYTE,W
    MOVWF       Integer_RH              ;Move BYTE to Integer_RH

Read_Decimal_RH
    CALL        Read_BYTE
    MOVF        BYTE,W
    MOVWF       Decimal_RH              ;Move BYTE to Decimal_RH

Read_Integer_T
    CALL        Read_BYTE
    MOVF        BYTE,W
    MOVWF       Integer_T              ;Move BYTE to Integer_T

Read_Decimal_T
    CALL        Read_BYTE
    MOVF        BYTE,W
    MOVWF       Decimal_T              ;Move BYTE to Decimal_T

Read_Checksum
    CALL        Read_BYTE
    MOVF        BYTE,W
    MOVWF       Checksum              ;Move BYTE to Checksum
 ; return
;============================================================
; ======================= PREVERI VELJAVNOST
;; prebranih je bilo 5 spremenljivk
 ;movf Integer_RH,W ; prvo v W
; addwf Decimal_RH,W ; doda drugo v W
 ;addwf Integer_T,W ; doda tretjo v W
; addwf Decimal_T,W ; doda četrto v W
; subwf Checksum,W ; odšteje peto
; btfss STATUS,Z ; je 0 ?
; return ; NE, vrne se brez osvežitve
; ======================= PREVERI VELJAVNOST
; JA, osveži za izpis
 movf  Integer_RH,W ; prvo v W
 movwf vlagaZG;
 movf  Decimal_RH, W ;
 movwf vlagaSP ;
 movf  Integer_T,W ;
 movwf temperaturaZG;
 movf  Decimal_T, W
 movwf temperaturaSP ;
 return ; vrne se s svežimi veljavnimi spremenljivkami
;============================================================
Read_BYTE
    CLRF        BYTE                    ;BYTE=00000000
    MOVLW       d'7'                    ;Check_bit 8 times, each time rotating left and updating the LSB
    MOVWF       Counter
    RLF         BYTE,f
    CALL        Check_bit
    DECFSZ      Counter,f
    GOTO        $-3
    RETURN

Check_bit
    CLRF        TMR2
    BTFSS       DHTpin ;PORTC,0                 ;Tests until RC0 is pulled high
    GOTO        $-1
    BSF         T2CON,2                 ;Starts TMR2
    BTFSC       DHTpin ;PORTC,0                 ;Tests until RC0 is pulled low
    GOTO        $-1
    BCF         T2CON,2                 ;Stops TMR2

    MOVF        TMR2,W                  ;if TMR2>40, bit=1
    SUBLW       d'40'
    BTFSC       STATUS,C                ;if TMR2>40, STATUS,C will be set
    BSF         BYTE,0                  ;sets BYTE,0 to 1 if STATUS,C=1
    BCF         STATUS,C                ;clears STATUS,C
    RETURN
;============================================================================

Stran 1 od 1

Powered by phpBB © 2001,2002 phpBB Group