'************************************************************************** '******************** DS18B20 ILE DIJITAL TERMOMETRE *********************** '************************************************************************** DEVICE 16F84 DECLARE XTAL 4 DECLARE LCD_TYPE 0 DECLARE LCD_DTPIN PORTA.0 DECLARE LCD_ENPIN PORTB.1 DECLARE LCD_RSPIN PORTB.0 DECLARE LCD_INTERFACE 4 DECLARE LCD_LINES 2 PRINT $FE ,1 SYMBOL DQ = PORTB.2 'iletisimin yapilacagi port DIM KUSUR AS WORD 'sicakligin virguden sonraki kismi DIM TEMP AS WORD 'sicakligi tutan degisken DIM TEMP2 AS WORD 'sicakligi karsilastiran degisken DIM C AS BYTE 'genel amacli degisken DONGU: OWRITE DQ, 1, [$CC, $44] 'sicakligi hesaplamasi icin komut gonderiyor REPEAT DELAYMS 25 ' islem bitene kadar bekleniyor OREAD DQ, 4, [C] ' islem suresince portb.2=0 oluyor UNTIL C <> 0 ' islem tamam OWRITE DQ, 1, [$CC, $BE] 'sicaklik degerini RAM dan okumasi icin komut gönderiyor TEMP2=TEMP OREAD DQ, 2,[TEMP.LOWBYTE,TEMP.HIGHBYTE] 'sicaklik degeri sensörden okunuyor IF TEMP.15=1 THEN 'sicaklik sifirin altinda ise uyari geliyor PRINT $FE,1 PRINT "SIFIRIN ALTINDA" PAUSE 100 GOTO DONGU ENDIF KUSUR=5000*TEMP.3 + 2500*TEMP.2 + 1250*TEMP.1 +625*TEMP.0 'virgulden sonraki kisim hesaplaniyor PRINT $FE,$1 PRINT "+" IF KUSUR=0 THEN PRINT DEC TEMP/16,".000",DEC KUSUR," ","C" ELSEIF KUSUR<1250 THEN PRINT DEC TEMP/16,".0",DEC KUSUR," ","C" ELSE PRINT DEC TEMP/16,".",DEC KUSUR," ","C" ENDIF PRINT $FE,$14 PRINT $FE,$14 IF TEMP>TEMP2 THEN PRINT 43 'ARTIS ELSEIF TEMP