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 ;============================================================================ |