Haberler:

Forum kuralları güncellendi LÜTFEN  okuyunuz:  https://bit.ly/2IjR3ME

Ana Menü

DS18B20

Başlatan ido2323, 30 Kasım 2014, 12:24:47

ido2323

herkese iyi günler DS18B20 ile sıcaklık ölçümü yapıp bunu karakter lcd'de göstermeyi planlıyorum. DS18B20 den gelen 2 bytelık veri sırası ile MSBx ve LSBx adındaki değişkenlere kaydedildi. İki bytlık verinin yorumlanmasında sıkıntımız yok fakat bu noktadan sonra bu değişkenlerdeki bitlerle ve ya bytlarla nasıl bir oynama yapmalıyım, ya da ASCII karakterleri ile nasıl eşleştirmeliyim ki Lcd'de işleyebilecek duruma gelsin.

Kabil ATICI

http://neutrino.phys.ksu.edu/~gahs/doublechooz/DC_SlowMRS/DS/DS18B20.pdf

sayfa 4.

Baytları ayırabilirsin. Bildiğini and, or ve swap komutları ile baytları alır ve konumlarını değiştir ve LCD ekrana 0x30 ile toplayarak gönder.
ambar7

ido2323

LCD ekrana 0x30 ile toplayarak gönder.
Bunu biraz açarmısınız?

Kabil ATICI

#3
ASCII 0 (sıfır) değerine bak. Ve 1,2,3... değerlerine. LCD'ye  bir şey yazdırmak için veri olarak ASCII formatıyla gönderiliyor..
ambar7

ido2323

gözüm korkmaya başladı -55 ile 125 arası toplam 180 tane işlem yapar, başka alternatif yok mu?

Kabil ATICI

Onluk sayı sistemine çevirirsen zaten doğrudan sıcaklığı verecek. Bunu yapabilirsen herhalde...
Negatif sayılar için negatifini alıp eksi işareti ekleyeceksin ve yine onluk sayı sistemine çevireceksin.
Bununla ilgili örnekler var...
ambar7

ido2323

onlarla ilgili sıkıntım yok şöyle sormam lazımdı aslında kusuruma bakmayın

movlw .30 (00011110)
movwf asd

şimdi öyle bir işlem yapalım ki asd değişkeni 30 olduğunda bize "3" ve "0" sayılarını içeren iki değişken olacak şekilde versin, aynı tekrar 31,32,... içinde

movlw .30 (00011110)
movwf asd
işlem
.
.
.
.

asd1 =3 (00000011)
asd0 = 0 (00000000)


Kabil ATICI

hex sayıyı 10'luk sisteme çevirme hikayesi diyorsun.
basitçe böl. çarp çıkar. Veya hazır kodu kullan.
xxx şeklinde sayıyı nasıl ayırırsın.
xxx/100=s100( içindeki yüz sayısı)
(xxx-(s100*100))/10=s10 (içindeki 10 sayısı)
xxx-(s100*100+s10*10)=s kalan birleri verir.

bunları asm ile yapabilir misin?

hex olarak 0x0a= onluk taban (10)
hex olarak 0x64= onluk tabanda (100)

bu arada bölme çoklu çıkarma işlemini, çarpma çoklu toplama işleminden oluşur, veya binary olarak işlem yapasın...
ambar7

RaMu

Asm ile yazılmış HEX to BCD algoritması ve açıklaması
mesaj 8 de paylaşmıştım;
https://www.picproje.org/index.php/topic,54453.msg416026.html#msg416026

mesaj13 de ccsc için c ye çevirdiğim hali var,
daha sonra lcd de görebilmek için 0x30 ekleyeceksin.

Aşağıda ds18b20 16f877a 2x16 lcd termometre
uygulamasının asm açıklamalı kodları var;
bu kodda CEVIR altprogramında
@ambar hocamın anlattığı yöntemle hex i onluğa çevirme yapmıştım,
CEVIR altprogramı aynı zamanda yuvarlamada yapıyor ve
lcd de gösterilebilmesi için decimal basamaklara 0x30 ekliyor:

INCLUDE "P16F877A.INC"
LIST P=16F877A
__CONFIG _CP_OFF&_WDT_OFF&_XT_OSC &_PWRTE_ON&_BODEN_OFF&_DEBUG_OFF &_LVP_OFF

E   EQU  7
RW  EQU  6
RS  EQU  5
SAYACA    EQU  34H        ;LCD İÇİN
SAYACB    EQU  35H        ;LCD İÇİN
SAYACC    EQU  36H        ;LCD İÇİN
SAYACKOMUT EQU  37H
KOMUTDEGER EQU  38H
SAYACVERI EQU  39H
VERIDEGER EQU  40H

DQ        EQU  0                 ;SICAKLIK EKİİİİİİİİİİİİİİİİİİİ 
SYCRST    EQU  21H
SYCYAZ    EQU  22H
VERI      EQU  24H
LWORD     EQU  25H
HWORD     EQU  26H
SICAKLIKL EQU  27H
SICAKLIKH EQU  28H
SAYAC1    EQU  29H
SAYAC2    EQU  30H
SAYAC3    EQU  31H
SAYAC4    EQU  32H
SAYAC5    EQU  33H            ;EK SONNNNNNNNNNNNNNNNNNNNNNNNNN

YUZLER    EQU  41H            ;ÇEVİRME İÇİN
ONLAR     EQU   42H
BIRLER    EQU  43H
SICAKLIK  EQU 44H
ONDALIK   EQU  45H
YUVARLA   EQU  46H
;İŞLEM SIRASI RESET>SKIPROM>CONVERTT>RESET>SKIPROMREAD>READ SCRATCHPAD

ORG  0000H
CLRF  VERI
CLRF  PORTB
CLRF  PORTC
CLRF  PORTD
BSF  STATUS,5
CLRF  TRISB             ; PORTB   DS18B20  SICAKLIK ENTEGRESİ DQ HATTI İÇİN KULLANILACAK
CLRF  TRISC             ;ENABLE  R/S  R/W  İÇİN
CLRF  TRISD             ;DATA İÇİN
BCF  STATUS,5

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ANA PROGRAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
   SON  CALL    RESETT 
        MOVLW   0CCH           ;SKIPROM KOMUTU
        MOVWF   VERI           ;YAZMAK İÇİN W DEKİ VERİYİ ALIR VERI DEĞİŞKENİNE AKTARIR
        CALL    YAZ            ;KOMUT ALTYORDAM İLE DS18B20 YE İŞLENİR
        MOVLW   44H            ;CONVERTT KOMUTU
        MOVWF   VERI           ;YAZMAK İÇİN W DEKİ VERİYİ ALIR VERI DEĞİŞKENİNE AKTARIR
        CALL    YAZ
CNTKNT  BTFSS   PORTB,0        ;CONVERTT KONTROL İLE ISI ÇEVRİMİNİN BİTİP BİTMEDİĞİ KONTROL EDİLİR
        GOTO    CNTKNT         ;ISI ÇEVRİMİ BİTMEDİ
CALL    RESETT                 ;ISI ÇEVRİMİ BİTTİ DEĞERİ OKUMAYA GEÇMEK İÇİN RESET ATILIR
MOVLW   0CCH                   ;SKIPROM KOMUTU
MOVWF   VERI                   ;YAZMAK İÇİN W DEKİ VERİYİ ALIR VERI DEĞİŞKENİNE AKTARIR
CALL    YAZ                    ;KOMUT ALTYORDAM İLE DS18B20 YE İŞLENİR
MOVLW   0BEH                   ;READ SCRATCHPAD KOMUTU İLE DEĞER OKUMAYA GEÇİLİR
MOVWF   VERI
CALL    YAZ                    ; SCRATCHPAD KOMUTU İŞLENİR
CALL    OKU                    ;VERİ READ TİME SLOTS PROTOKOLÜ İLE OKUNUR DEĞER SICAKLIKH VE SICAKLIKL DEĞİŞKENLERİNE KAYDEDİLİR
CALL    CEVIR                  ;OKUNAN DEĞERİ LCD DE GÖSTERMEK İÇİN HUNS TENS ONES DECI YE ÇEVİREN ALT PROGRAM 
CALL    LCD
 GOTO  SON                     ;İŞLEMİ TEKRARLAMAYA GİDER

;ALTPROGRAMLAR

RESETT CALL      DQOUTPUT               ;DQ HATTINI
       BCF       PORTB,DQ               ; 0'A ÇEK
       CALL      BEKLE500MIKSN
       CALL      DQINPUT                ;DQ HATTINI 1'E ÇEK
       CALL      BEKLE60MIKSN
       BTFSC     PORTB,DQ
       GOTO      RESETT
       CALL      BEKLE500MIKSN
RETURN

YAZ      MOVLW   08H           ;YAZILACAK BİT SAYISI
         MOVWF   SYCYAZ
YAZDEVAM RRF    VERI,F        ;YAZILACAK BİT CARRY YE AKTARILIR
         BTFSS  STATUS,C      ;CARYY NİN NE OLDUĞUNA BAKILARAK YAZDIRILACAK VERİYE KARAR VERİLİR
         GOTO   WRITE0        ;WRITE0 IN SONUNDA GOTO YAZKNT OLMALI
         CALL   WRITE1 
 YAZKNT  DECFSZ   SYCYAZ      ;8 BİT VERİ YAZILDIMI KONTROL EDİLİR
         GOTO     YAZDEVAM    ;YAZMA İŞLEMİ BİTMEDİ
   RETURN                     ;YAZMA İŞLEMİ BİTTİ


WRITE0   CALL    DQOUTPUT      ;0 VERİSİNİ YAZDIRAN ALT PROGRAM
         BCF     PORTB,DQ
         CALL    BEKLE60MIKSN  ;
         CALL    DQINPUT
         GOTO    YAZKNT

WRITE1   CALL    DQOUTPUT
         BCF     PORTB,DQ
         NOP
         NOP
         NOP
         NOP
         CALL    DQINPUT
         CALL    BEKLE60MIKSN   ;
     RETURN


OKU      MOVLW   08H              ;OKUNACAK BİT SAYISI (KAYDEDİLECEK DEĞİŞKENDEKİ BİT SAYISI KADAR)
         MOVWF   LWORD
         MOVWF   HWORD
LWORDOKU CALL    OKUDEVAM
         RRF     SICAKLIKL        ;CARRY DEKİ VERİYİ SICAKLIKL YE YAZ  RLLLLLLF  İDİ??????
         DECFSZ  LWORD            ;SICAKLIKL YAZIMI BİTTİ Mİ?
         GOTO    LWORDOKU         ;HAYIR
HWORDOKU CALL    OKUDEVAM
         RRF     SICAKLIKH        ;CARRY DEKİ VERİYİ SICAKLIKH A YAZ   RLLLLLLLF     İDİİ,????
         DECFSZ  HWORD            ;SICAKLIKH YAZIMI BİTTİ Mİ?
         GOTO    HWORDOKU         ;HAYIR
         CALL    RESETT           ;EVET SICAKLIK OKUNUP   SICAKLIKH VE SICAKLIKL A YAZILDI
         RETURN                   ;RESETT İLE OKUMA SONLANDIRILDI

OKUDEVAM CALL    DQOUTPUT         ;READ TIME SLOTS PROTOKOLÜ İLE 1 BİT OKUYAN ALT PROGRAM
         BCF     PORTB,DQ
         NOP
         CALL    DQINPUT
         BSF     STATUS,C
         BTFSS   PORTB,DQ
         BCF     STATUS,C
         CALL    BEKLE60MIKSN
     RETURN 

DQINPUT  BSF   STATUS,5               ;DQ  HATTINI YÜKSEK (HIGH) ÇEKMEYE YARAYAN ALT PROGRAM
         BSF   TRISB,DQ
         BCF   STATUS,5
  RETURN

DQOUTPUT BCF   PORTB,DQ               ;DQ HATTINI DÜŞÜK (LOW=0) A ÇEKMEYE YARAYAN ALT PROGRAM
         BSF   STATUS,5
         BCF   TRISB,DQ
         BCF   STATUS,5
  RETURN

BEKLE500MIKSN  MOVLW   8CH        ;501 MİKROSANİYE DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
               MOVWF   SAYAC1
               DONGU1  NOP        ;SAYAC*4 + 1  MİKROSANİYE  (+BAŞTAKİ YÜKLEMEDEN +4 GELİR)
               DECFSZ   SAYAC1
               GOTO     DONGU1
               RETURN
BEKLE175MIKSN  MOVLW   2AH        ;1111111111    222222 OLACAKKKKKKKKKKKKKKKKKKKKKKKK
               MOVWF   SAYAC2     ;173 MİKROSANİYE
               DONGU2  NOP        ;SAYAC*4 + 1  MİKROSANİYE  (+BAŞTAKİ YÜKLEMEDEN +4 GELİR)
               DECFSZ   SAYAC2
               GOTO     DONGU2
               RETURN
BEKLE90MIKSN   MOVLW   17H        ;89 MİKROSANİYE
               MOVWF   SAYAC3
               DONGU3  NOP        ;SAYAC*4 + 1  MİKROSANİYE  (+BAŞTAKİ YÜKLEMEDEN +4 GELİR)
               DECFSZ   SAYAC3
               GOTO     DONGU3
               RETURN
BEKLE60MIKSN   MOVLW   0EH        ;61 MİKROSANİYE
               MOVWF   SAYAC4
               DONGU4  NOP        ;SAYAC*4 + 1  MİKROSANİYE  (+BAŞTAKİ YÜKLEMEDEN +4 GELİR)
               DECFSZ   SAYAC4
               GOTO     DONGU4
               RETURN
BEKLE30MIKSN   MOVLW   06H
               MOVWF   SAYAC5
               DONGU5  NOP        ;SAYAC*4 + 1  MİKROSANİYE  (+BAŞTAKİ YÜKLEMEDEN +4 GELİR)
               DECFSZ   SAYAC5
               GOTO     DONGU5
               RETURN

;;;;;;;;;;;;;;;;;;;;LCD  ALT PROGRAMI BAŞLANGIÇ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

LCD   NOP
;CALL  BEKLE50MS       ;LCD  RESET İÇİN BEKLEME EN AZ 40ms
CALL  KOMUTISLEME     ;KOMUT TABLOSUNDAKİ KOMUTLARI SIRASI İLE İŞLER
CALL  VERIISLEME      ;VERİ TABLOSUNDAKİ VERİLERİ SIRASIYLA İŞLER
RETURN

KOMUTISLEME  MOVLW    0FFH              ;KOMUT İŞLEME DÖNGÜSÜ  ///////////////////
             MOVWF    SAYACKOMUT
KOMUTISLEME2 CALL     BEKLE1MS
             BSF      PORTC,E
             BCF      PORTC,RW
             BCF      PORTC,RS
             INCF     SAYACKOMUT,F
             MOVF     SAYACKOMUT,W
             CALL     TABLOKOMUT
             MOVWF    KOMUTDEGER
             SUBLW    0FFH
             BTFSC    STATUS,Z
             GOTO     KOMUTBITTI
             MOVF     KOMUTDEGER,W
             MOVWF    PORTD
             CALL     BEKLE1MS
             BCF      PORTC,E
             CALL     BEKLE1MS
             BSF      PORTC,E
             SWAPF    KOMUTDEGER,W
             MOVWF    PORTD
             CALL     BEKLE1MS
             BCF      PORTC,E
             GOTO     KOMUTISLEME2
KOMUTBITTI   RETURN                  ;//////////////////////////////////////

VERIISLEME   MOVLW    0FFH               ;VERİ İŞLEME DÖNGÜSÜ   //////////////////
             MOVWF    SAYACVERI
VERIISLEME2  CALL     BEKLE1MS
             BSF      PORTC,E
             BCF      PORTC,RW
             BSF      PORTC,RS
             INCF     SAYACVERI,F
             INCF     SAYACVERI,F
             MOVF     SAYACVERI,W
             CALL     TABLOVERI
             MOVWF    VERIDEGER
             SUBLW    0FDH
             BTFSC    STATUS,Z
             GOTO     VERIBITTI
             MOVF     VERIDEGER,W
             MOVWF    PORTD
             CALL     BEKLE1MS
             BCF      PORTC,E
             CALL     BEKLE1MS
             BSF      PORTC,E
             SWAPF    VERIDEGER,W
             MOVWF    PORTD
             CALL     BEKLE1MS
             BCF      PORTC,E
             GOTO     VERIISLEME2
VERIBITTI    RETURN                          ;/////////////////////////////////////

TABLOKOMUT    ADDWF   PCL,F
              RETLW   20H    ;RESET
              RETLW   20H    ;RESET
              RETLW   20H    ;RESET
              RETLW   01H    ;DISPLAY TEMİZLE
              RETLW   02H    ;KURSOR Ü BAŞA AL
              RETLW   28H    ;2 SATIR, 5*7 KARAKTER,  4BİT MOD
              RETLW   0FH    ;DISPLAY AÇIK  KURSOR AÇIK KURSOR YAN-SÖN
              RETLW   06H    ;HER KARAKTER YAMADA KURSÖR SAĞA KAYACAK EKRAN SABİT
             RETLW   0FFH    ;KOMUT SONLANDIRMA VERİSİ

TABLOVERI     ADDWF   PCL,F   ;HER SEFERİNDE ADDWF KOMUTUNDAN SONRAKİ 2. 4. 6. ... SATIR İŞLENİR
              NOP
              RETLW   53H    ;S
              NOP
              RETLW   49H    ;I
              NOP
              RETLW   43H    ;C
              NOP
              RETLW   41H    ;A
              NOP
              RETLW   4BH    ;K
              NOP
              RETLW   4CH    ;L
              NOP
              RETLW   49H    ;I
              NOP
              RETLW   4BH    ;K
              NOP
              RETLW   20H    ;BOŞLUK                
              NOP
              MOVF   YUZLER,W
              RETURN
              MOVF   ONLAR,W
              RETURN
              MOVF   BIRLER,W
              RETURN
              RETLW   2CH    ;VİRGÜL
              NOP    
              MOVF  ONDALIK,W
              RETURN
              RETLW   20H    ;BOŞLUK
              NOP
              RETLW   43H    ;C
              NOP
              RETLW   27H    ;DERECE
              NOP             
             RETLW     0FDH     ;VERİSONLANDIRMA DEĞERİ

BEKLE1MS      MOVLW   01H
              MOVWF   SAYACA
              MOVWF   SAYACB
             GOTO  DONGUB

BEKLE50MS     MOVLW   01H
              MOVWF   SAYACA   ;SAYACA*SAYACB* 1MİLİSANİYE
  DONGUA      MOVLW   32H         ;=DECIMAL 50
              MOVWF   SAYACB      ;SAYACB* 1 MİLİSANİYE
  DONGUB      MOVLW   0FFH
              MOVWF   SAYACC      ;1MİLİSANİYE
  DONGUC      NOP
              DECFSZ  SAYACC,F
              GOTO    DONGUC
              DECFSZ  SAYACB,F 
              GOTO    DONGUB
              DECFSZ  SAYACA,F
              GOTO    DONGUA
             RETURN

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;LCD  ALT PROGRAMI  SON ;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ÇEVİRME ALT PROGRAMI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CEVIR    MOVF    SICAKLIKL,W     ;VİRGÜLDEN SONRAKİ DEĞER YUVARLAMA ALT PROGRAMI İÇİN
         MOVWF   YUVARLA         ;YUVARLA DEĞİŞKENİNE ALINDI
         SWAPF   SICAKLIKH,F     ;SICAKLIKH VE SICAKLIKL DEN BCD YE 
         MOVLW   0F0H            ;DÖNÜŞTÜRÜLECEK SICAKLIK DEĞİŞKENİNİ OLUŞTURMA
         ANDWF   SICAKLIKH,F

         SWAPF   SICAKLIKL,F
         MOVLW   0FH
         ANDWF   SICAKLIKL,W
         
         IORWF   SICAKLIKH,W
         MOVWF   SICAKLIK

CLRF   BIRLER                     ;SICAKLIK DEĞİŞKENİNDEN YUZLER ONLAR BİRLER
CLRF   ONLAR                      ;ŞEKLİNDE 0-9 ARASI SAYI BİÇİMDE DEĞİŞKEN ELDE ETME
CLRF   YUZLER
BASLA  MOVLW  00H
       SUBWF  SICAKLIK,F
       BTFSC  STATUS,Z
       GOTO   ONDALIKYUVARLA
       DECF   SICAKLIK,F
       INCF   BIRLER,F
       MOVLW  0AH
       SUBWF  BIRLER,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   BIRLER
       INCF   ONLAR,F
       MOVLW  0AH
       SUBWF  ONLAR,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   ONLAR
       INCF   YUZLER,F
       GOTO   BASLA
         
ONDALIKYUVARLA  ; This routine rounds the fraction portion of the Temperature data to the nearest .1
; Provided by & used with his permission from 'Pommy'. Contact via Electro-Tech-Online.com
 ;Examples
; TENTHS = Fraction                           * 10 / 16
; TENTHS = 00000100 ( D'4' * 0.0625 = 0.2500 Degrees C) * 10 / 16 = 3
; TENTHS = 00001001 ( D'9' * 0.0625 = 0.5625 Degrees C) * 10 / 16 = 6
; TENTHS = 00001101 (D'13' * 0.0625 = 0.8125 Degrees C) * 10 / 16 = 8
       
        MOVLW   B'00001111'            ;
        ANDWF   YUVARLA, F             ;
        MOVF    YUVARLA, W             ;
        ADDWF   YUVARLA, F             ; *2, C=0
        RLF     YUVARLA, F             ; *4, C=0
        ADDWF   YUVARLA, F             ; *5, C=0
        RLF     YUVARLA, F             ; *10
        MOVLW   B'00001000'            ; 
        ADDWF   YUVARLA, F             ; Rounding
        SWAPF   YUVARLA, W             ; Pseudo divide by 16
        ANDLW   B'00001111'            ; 
        MOVWF   ONDALIK                ;YUVARLADAKİ DEĞER 0.1 LİK YUVARLANARAK ONDALIK DEĞİŞKENİNE ALINDI 

CEVRIMSON MOVLW   30H          ;YUZLER ONLAR BIRLER DEĞİŞKENLERİNİ LCD YE DİREK
          ADDWF  YUZLER,F      ; YAZILABİLECEK FORMA ÇEVİRME
          ADDWF  ONLAR,F
          ADDWF   BIRLER,F
          ADDWF  ONDALIK,F


RETURN
end
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ido2323

Ramu hocam penisilinin diğer adısın çok işime yaradı teşekkürler.

CEVIR    MOVF    SICAKLIKL,W     ;VİRGÜLDEN SONRAKİ DEĞER YUVARLAMA ALT PROGRAMI İÇİN
         MOVWF   YUVARLA         ;YUVARLA DEĞİŞKENİNE ALINDI
         SWAPF   SICAKLIKH,F     ;SICAKLIKH VE SICAKLIKL DEN BCD YE 
         MOVLW   0F0H            ;DÖNÜŞTÜRÜLECEK SICAKLIK DEĞİŞKENİNİ OLUŞTURMA
         ANDWF   SICAKLIKH,F

         SWAPF   SICAKLIKL,F
         MOVLW   0FH
         ANDWF   SICAKLIKL,W
         
         IORWF   SICAKLIKH,W
         MOVWF   SICAKLIK

CLRF   BIRLER                     ;SICAKLIK DEĞİŞKENİNDEN YUZLER ONLAR BİRLER
CLRF   ONLAR                      ;ŞEKLİNDE 0-9 ARASI SAYI BİÇİMDE DEĞİŞKEN ELDE ETME
CLRF   YUZLER
BASLA  MOVLW  00H
       SUBWF  SICAKLIK,F
       BTFSC  STATUS,Z
       GOTO   ONDALIKYUVARLA
       DECF   SICAKLIK,F
       INCF   BIRLER,F
       MOVLW  0AH
       SUBWF  BIRLER,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   BIRLER
       INCF   ONLAR,F
       MOVLW  0AH
       SUBWF  ONLAR,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   ONLAR
       INCF   YUZLER,F
       GOTO   BASLA
         
ONDALIKYUVARLA  ; This routine rounds the fraction portion of the Temperature data to the nearest .1
; Provided by & used with his permission from 'Pommy'. Contact via Electro-Tech-Online.com
 ;Examples
; TENTHS = Fraction                           * 10 / 16
; TENTHS = 00000100 ( D'4' * 0.0625 = 0.2500 Degrees C) * 10 / 16 = 3
; TENTHS = 00001001 ( D'9' * 0.0625 = 0.5625 Degrees C) * 10 / 16 = 6
; TENTHS = 00001101 (D'13' * 0.0625 = 0.8125 Degrees C) * 10 / 16 = 8
       
        MOVLW   B'00001111'            ;
        ANDWF   YUVARLA, F             ;
        MOVF    YUVARLA, W             ;
        ADDWF   YUVARLA, F             ; *2, C=0
        RLF     YUVARLA, F             ; *4, C=0
        ADDWF   YUVARLA, F             ; *5, C=0
        RLF     YUVARLA, F             ; *10
        MOVLW   B'00001000'            ; 
        ADDWF   YUVARLA, F             ; Rounding
        SWAPF   YUVARLA, W             ; Pseudo divide by 16
        ANDLW   B'00001111'            ; 
        MOVWF   ONDALIK                ;YUVARLADAKİ DEĞER 0.1 LİK YUVARLANARAK ONDALIK DEĞİŞKENİNE ALINDI 

CEVRIMSON MOVLW   30H          ;YUZLER ONLAR BIRLER DEĞİŞKENLERİNİ LCD YE DİREK
          ADDWF  YUZLER,F      ; YAZILABİLECEK FORMA ÇEVİRME
          ADDWF  ONLAR,F
          ADDWF   BIRLER,F
          ADDWF  ONDALIK,F


RETURN

ido2323

Hocam okuma işi tamam fakat hep 255.9 okuyor, pic18f4550 ile çalışıyorum, internal 8 mhz gecikmeleri de bu frekansa göre düzenledim fakat bir yerde ufak bi hata var ama nerede bulamadım.  İşte kod ;



list   p=18f4550            ; kullan?lan pic tan?t
#include "p18F4550.inc"

; CONFIG1L
  CONFIG  PLLDIV = 1            ; PLL Prescaler Selection bits (No prescale (4 MHz oscillator input drives PLL directly))
  CONFIG  CPUDIV = OSC1_PLL2    ; System Clock Postscaler Selection bits ([Primary Oscillator Src: /1][96 MHz PLL Src: /2])
  CONFIG  USBDIV = 1            ; USB Clock Selection bit (used in Full-Speed USB mode only; UCFG:FSEN = 1) (USB clock source comes directly from the primary oscillator block with no postscale)

; CONFIG1H
  CONFIG  FOSC =INTOSC_HS             ; Oscillator Selection bits (HS oscillator (HS))
  CONFIG  FCMEN = OFF           ; Fail-Safe Clock Monitor Enable bit (Fail-Safe Clock Monitor disabled)
  CONFIG  IESO = OFF            ; Internal/External Oscillator Switchover bit (Oscillator Switchover mode disabled)

; CONFIG2L
  CONFIG  PWRT = OFF            ; Power-up Timer Enable bit (PWRT enabled)
  CONFIG  BOR = ON              ; Brown-out Reset Enable bits (Brown-out Reset enabled in hardware only (SBOREN is disabled))
  CONFIG  BORV = 3              ; Brown-out Reset Voltage bits (Minimum setting)
  CONFIG  VREGEN = OFF          ; USB Voltage Regulator Enable bit (USB voltage regulator disabled)

; CONFIG2H
  CONFIG  WDT = OFF             ; Watchdog Timer Enable bit (WDT disabled (control is placed on the SWDTEN bit))
  CONFIG  WDTPS = 32768         ; Watchdog Timer Postscale Select bits (1:32768)

; CONFIG3H
  CONFIG  CCP2MX = ON           ; CCP2 MUX bit (CCP2 input/output is multiplexed with RC1)
  CONFIG  PBADEN = OFF           ; PORTB A/D Enable bit (PORTB<4:0> pins are configured as analog input channels on Reset)
  CONFIG  LPT1OSC = OFF         ; Low-Power Timer 1 Oscillator Enable bit (Timer1 configured for higher power operation)
  CONFIG  MCLRE = ON            ; MCLR Pin Enable bit (MCLR pin enabled; RE3 input pin disabled)

; CONFIG4L
  CONFIG  STVREN = ON           ; Stack Full/Underflow Reset Enable bit (Stack full/underflow will cause Reset)
  CONFIG  LVP = OFF              ; Single-Supply ICSP Enable bit (Single-Supply ICSP enabled)
  CONFIG  ICPRT = OFF           ; Dedicated In-Circuit Debug/Programming Port (ICPORT) Enable bit (ICPORT disabled)
  CONFIG  XINST = ON           ; Extended Instruction Set Enable bit (Instruction set extension and Indexed Addressing mode disabled (Legacy mode))

; CONFIG5L
  CONFIG  CP0 = OFF             ; Code Protection bit (Block 0 (000800-001FFFh) is not code-protected)
  CONFIG  CP1 = OFF             ; Code Protection bit (Block 1 (002000-003FFFh) is not code-protected)
  CONFIG  CP2 = OFF             ; Code Protection bit (Block 2 (004000-005FFFh) is not code-protected)
  CONFIG  CP3 = OFF             ; Code Protection bit (Block 3 (006000-007FFFh) is not code-protected)

; CONFIG5H
  CONFIG  CPB = OFF             ; Boot Block Code Protection bit (Boot block (000000-0007FFh) is not code-protected)
  CONFIG  CPD = OFF             ; Data EEPROM Code Protection bit (Data EEPROM is not code-protected)

; CONFIG6L
  CONFIG  WRT0 = OFF            ; Write Protection bit (Block 0 (000800-001FFFh) is not write-protected)
  CONFIG  WRT1 = OFF            ; Write Protection bit (Block 1 (002000-003FFFh) is not write-protected)
  CONFIG  WRT2 = OFF            ; Write Protection bit (Block 2 (004000-005FFFh) is not write-protected)
  CONFIG  WRT3 = OFF            ; Write Protection bit (Block 3 (006000-007FFFh) is not write-protected)

; CONFIG6H
  CONFIG  WRTC = OFF            ; Configuration Register Write Protection bit (Configuration registers (300000-3000FFh) are not write-protected)
  CONFIG  WRTB = OFF            ; Boot Block Write Protection bit (Boot block (000000-0007FFh) is not write-protected)
  CONFIG  WRTD = OFF            ; Data EEPROM Write Protection bit (Data EEPROM is not write-protected)

; CONFIG7L
  CONFIG  EBTR0 = OFF           ; Table Read Protection bit (Block 0 (000800-001FFFh) is not protected from table reads executed in other blocks)
  CONFIG  EBTR1 = OFF           ; Table Read Protection bit (Block 1 (002000-003FFFh) is not protected from table reads executed in other blocks)
  CONFIG  EBTR2 = OFF           ; Table Read Protection bit (Block 2 (004000-005FFFh) is not protected from table reads executed in other blocks)
  CONFIG  EBTR3 = OFF           ; Table Read Protection bit (Block 3 (006000-007FFFh) is not protected from table reads executed in other blocks)

; CONFIG7H
  CONFIG  EBTRB = OFF           ; Boot Block Table Read Protection bit (Boot block (000000-0007FFh) is not protected from table reads executed in other blocks)

;============================================================

;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
    #define LCD_D7   LATD,0      ;
    #define LCD_D6   LATD,6      ;
    #define LCD_D5   LATD,2      ;
    #define LCD_D4   LATD,3      ;
    #define LCD_RS   LATD,5      ;
    #define LCD_E    LATD,4      ;
    #define PORTBB    PORTB,0      ;
;============================================================

kolon_ind	equ	20h;
tablo_ind	equ	21h;
sayac1      equ 22h
sayac2      equ 23h
LCD_CS		equ	25h;
LCDTmp   	equ	26h;
LCDINIT		equ	27h;
LCD_DATA	equ	28h;
COUNTER1	equ 29h;
COUNTER2	equ	2Ah;
COUNTER3	equ	2Bh;
TEMP		equ	2Ch;
satir		equ	0x22
DALLAN equ 30h

SAYACA    EQU  49H        ;LCD ?Ç?N
SAYACB    EQU  50H        ;LCD ?Ç?N
SAYACC    EQU  51H        ;LCD ?Ç?N
SAYACKOMUT EQU  52H
KOMUTDEGER EQU  53H
SAYACVERI EQU  54H
VERIDEGER EQU  55H

DQ        EQU  56H                ;SICAKLIK EK???????????????????
SYCRST    EQU  57H
SYCYAZ    EQU  58H
VERI      EQU  59H
LWORD     EQU  60H
HWORD     EQU  61H
SICAKLIKL EQU  62H
SICAKLIKH EQU  63H
SAYAC1    EQU  64H
SAYAC2    EQU  65H
SAYAC3    EQU  66H
SAYAC4    EQU  67H
SAYAC5    EQU  68H            ;EK SONNNNNNNNNNNNNNNNNNNNNNNNNN

YUZLER    EQU  69H            ;ÇEV?RME ?Ç?N
ONLAR     EQU   70H
BIRLER    EQU  71H
SICAKLIK  EQU 72H
ONDALIK   EQU  73H
YUVARLA   EQU  74H
SAYAC12    EQU   75H


	        ORG     0X0000            ; ba?lang?ç vektörü
		clrf    PCLATH            ; pc sayac?n?n ;yüksek bitini s?f?rla
  		goto    main              ; ana programa ;dallan

ORG     0X0020
main
;port tan?mlamalar? yap?l?yor.
movlw b'11111111'
movwf OSCCON

MOVLW 07h ; Turn off
MOVWF CMCON ; comparator
MOVLW 0Fh ; Configure A/D
MOVWF ADCON1 ; for digital inputs



CLRF LATD
MOVLW 0X00
MOVWF TRISD
movlw 0x00
movwf TRISA



;######### -ANA PROGRAM- -ANA PROGRAM- -ANA PROGRAM- -ANA PROGRAM-

call Start
ASb
;call delay1sn
call Clear_display
call System_write
call delay1sn
;call Clear_display
;call delay1sn
;call ?ntilazing_write
;call delay1sn
;call Clear_display
;call delay1sn

CALL    RESETT
        MOVLW   0xCC           ;SKIPROM KOMUTU
        MOVWF   VERI           ;YAZMAK ?Ç?N W DEK? VER?Y? ALIR VERI DE???KEN?NE AKTARIR
        CALL    YAZ            ;KOMUT ALTYORDAM ?LE DS18B20 YE ??LEN?R
        MOVLW   0x44            ;CONVERTT KOMUTU
        MOVWF   VERI           ;YAZMAK ?Ç?N W DEK? VER?Y? ALIR VERI DE???KEN?NE AKTARIR
        CALL    YAZ
CNTKNT  BTFSS   PORTB,0       ;CONVERTT KONTROL ?LE ISI ÇEVR?M?N?N B?T?P B?TMED??? KONTROL ED?L?R
        GOTO    CNTKNT         ;ISI ÇEVR?M? B?TMED?
CALL    RESETT                 ;ISI ÇEVR?M? B?TT? DE?ER? OKUMAYA GEÇMEK ?Ç?N RESET ATILIR
MOVLW   0xCC                   ;SKIPROM KOMUTU
MOVWF   VERI                   ;YAZMAK ?Ç?N W DEK? VER?Y? ALIR VERI DE???KEN?NE AKTARIR
CALL    YAZ                    ;KOMUT ALTYORDAM ?LE DS18B20 YE ??LEN?R
MOVLW   0xBE                   ;READ SCRATCHPAD KOMUTU ?LE DE?ER OKUMAYA GEÇ?L?R
MOVWF   VERI
CALL    YAZ                ; SCRATCHPAD KOMUTU ??LEN?R
CALL    OKU                    ;VER? READ T?ME SLOTS PROTOKOLÜ ?LE OKUNUR DE?ER SICAKLIKH VE SICAKLIKL DE???KENLER?NE KAYDED?L?R
CALL    CEVIR                  ;OKUNAN DE?ER? LCD DE GÖSTERMEK ?Ç?N HUNS TENS ONES DECI YE ÇEV?REN ALT PROGRAM


GOTO ASb


Start ;===============================================

    call	LCDOPEN		; Initialize LCD
    call	Pause
    call	LCDADD


    RETURN

System_write ;===============================================

    movlw	'S'
    call	LCDSEND
    movlw   'I'
    call	LCDSEND
    movlw	'C'
    call	LCDSEND
    movlw	'A'
    call	LCDSEND
    movlw	'K'
    call	LCDSEND
    movlw	'L'
    call	LCDSEND
    movlw	'I'
    call	LCDSEND
    movlw	'K'
    call	LCDSEND
    movlw	' '
    call	LCDSEND
    movlw	'='
    call	LCDSEND
       movf YUZLER,W
    call	LCDSEND
    movf ONLAR,W
    call	LCDSEND
    movf BIRLER,W
    call	LCDSEND
    movlw	','
    call	LCDSEND
    movf	ONDALIK,W
    call	LCDSEND
    movf	SICAKLIK,W
    call	LCDSEND
    RETURN

?ntilazing_write ;================================================

    movf YUZLER,W
    call	LCDSEND
    movf ONLAR,W
    call	LCDSEND
    movf BIRLER,W
    call	LCDSEND
    movlw	','
    call	LCDSEND
    movf	ONDALIK,W
    call	LCDSEND



    RETURN


LCDOPEN ;================================================

    bcf	LCD_RS			; Set command mode
        bcf	LCD_E
        bsf	LCD_D4
        bsf	LCD_D5
        bcf	LCD_D6
        bcf	LCD_D7
        call	PULSE12
        bcf	LCD_D4
        call	PULSE12

    ; Function set
        ; Format: xxxDNFxx		  D: 1= 8-bit, 0= 4-bit (use 4-bit!)
    movlw	b'00101000'		; N: 1= 2 lines, 0= 1 line
        call	LCDSEND1		; F: 1= 5x10 font, 0= 5x8 font

        ; Display control
        ; Format: xxxxxDCB		  D: Display on(1)/0ff(0)
    movlw	b'00001100'		; C: Cursor on(1)/0ff(0)
        call	LCDSEND1		; B: Blink on(1)/0ff(0)

        ; Entry mode set
        ; Format: xxxxxxIS		  I: 1= Increment counter, 0= Decrement counter
    movlw	b'00000110'		; S: 1= "Accompanies display shift"
        call	LCDSEND1

        ; Cursor or display shift
        ; Format: xxxxSRxx		  S: 1= Display shift, 0= Cursor move
    movlw	b'00010000'		; R: 1= Shift right, 0= Shift left
        call	LCDSEND1


        movlw	b'00000001'		; Clear screen
        call	LCDSEND1


        RETURN

    LCDADD
        ;bcf	LCD_RS			; Command mode
        ;movlw	b'1000'			; Goto DDRAM adress
        ;call	LCDSEND
        bsf	LCD_RS			; Data mode
        call	Pause1 ; Takes a couple of ms

	RETURN



        ;======================================================
LCDSEND	; Sends character in W to lcd. Does not alter RS line!
	movwf	LCDTmp
	bcf	LCD_D4
	bcf	LCD_D5
	bcf	LCD_D6
	bcf	LCD_D7


	btfsc	LCDTmp, 7
		bsf	LCD_D7
	btfsc	LCDTmp, 6
		bsf	LCD_D6
	btfsc	LCDTmp, 5
		bsf	LCD_D5
	btfsc	LCDTmp, 4
		bsf	LCD_D4
	call	PULSE



	bcf	LCD_D4
	bcf	LCD_D5
	bcf	LCD_D6
	bcf	LCD_D7


	btfsc	LCDTmp, 3
		bsf	LCD_D7
	btfsc	LCDTmp, 2
		bsf	LCD_D6
	btfsc	LCDTmp, 1
		bsf	LCD_D5
	btfsc	LCDTmp, 0
		bsf	LCD_D4
	call	PULSE


	return
;-------------------------------------------------

PULSE ; Pulse Enable.
	bsf	LCD_E
call	Pause
				; 1 instruction @10MHz = 400ns
	bcf	LCD_E
	return

;++++++++++++++++++++++++++++++++++++++++++++++++

PULSE12 ; Pulse Enable.
	bsf	LCD_E
call	Pause1
				; 1 instruction @10MHz = 400ns
	bcf	LCD_E
	return


LCDSEND1	; Sends character in W to lcd. Does not alter RS line!
	movwf	LCDTmp
	bcf	LCD_D4
	bcf	LCD_D5
	bcf	LCD_D6
	bcf	LCD_D7


	btfsc	LCDTmp, 7
		bsf	LCD_D7
	btfsc	LCDTmp, 6
		bsf	LCD_D6
	btfsc	LCDTmp, 5
		bsf	LCD_D5
	btfsc	LCDTmp, 4
		bsf	LCD_D4
	call	PULSE1



	bcf	LCD_D4
	bcf	LCD_D5
	bcf	LCD_D6
	bcf	LCD_D7


	btfsc	LCDTmp, 3
		bsf	LCD_D7
	btfsc	LCDTmp, 2
		bsf	LCD_D6
	btfsc	LCDTmp, 1
		bsf	LCD_D5
	btfsc	LCDTmp, 0
		bsf	LCD_D4
	call	PULSE1


	return
;-------------------------------------------------

PULSE1 ; Pulse Enable.
	bsf	LCD_E
    call	Pause1			; 1 instruction @10MHz = 400ns
	bcf	LCD_E
	return





Pause ;=====================================================
    movlw h'28'
       MOVWF sayac1

    DONGU42
       DECFSZ sayac1,F ;sayac2'nin de?erini 1 azalt s?f?r olursa "DECFSZ sayac1,F" komutuna atla
       GOTO DONGU42
    return

Pause1 ;==================================================
    movlw h'14'
       MOVWF sayac1

    DONGU11
       movlw h'ff'
       MOVWF sayac2

    DONGU12
       DECFSZ sayac2,F ;sayac2'nin de?erini 1 azalt s?f?r olursa "DECFSZ sayac1,F" komutuna atla
       GOTO DONGU12
       DECFSZ sayac1,F ;sayac1'nin de?erini 1 azalt s?f?r olursa "DECFSZ sayac1,F" döngüden ç?k
       GOTO DONGU11
    RETURN

Pause2 ;==================================================
    movlw h'ff'
       MOVWF sayac1

    DONGU31
       movlw h'ff'
       MOVWF sayac2

    DONGU32
       DECFSZ sayac2,F ;sayac2'nin de?erini 1 azalt s?f?r olursa "DECFSZ sayac1,F" komutuna atla
       GOTO DONGU32
       DECFSZ sayac1,F ;sayac1'nin de?erini 1 azalt s?f?r olursa "DECFSZ sayac1,F" döngüden ç?k
       GOTO DONGU31
    RETURN


delay1sn;=========================================

    call Pause2
    call Pause2
    call Pause2
    call Pause2
    call Pause2
    call Pause2
    call Pause2
    call Pause2




    return


Clear_display ;============================================

        bcf	LCD_RS
        movlw	b'00000001'		; Clear screen
        call	LCDSEND1
        movlw	b'00000010'		;Cursor left
        call	LCDSEND1
        bsf LCD_RS
call Pause2

    return

;//////////////////////////////////////////////////////////////////
;/////////////////////////////////////////////////////////////////
;///////////////////////////////////////////////////////////////////


RESETT CALL      DQOUTPUT            ;DQ HATTINI
       BCF       PORTBB              ; 0'A ÇEK
       CALL      BEKLE500MIKSN
       CALL      DQINPUT                ;DQ HATTINI 1'E ÇEK
       CALL      BEKLE60MIKSN
       BTFSC     PORTBB
       GOTO      RESETT
       CALL      BEKLE500MIKSN


RETURN

YAZ      MOVLW   8h           ;YAZILACAK B?T SAYISI
         MOVWF   SYCYAZ
YAZDEVAM RRCF    VERI,F        ;YAZILACAK B?T CARRY YE AKTARILIR
         BTFSS  STATUS,C      ;CARYY N?N NE OLDU?UNA BAKILARAK YAZDIRILACAK VER?YE KARAR VER?L?R
         GOTO   WRITE0        ;WRITE0 IN SONUNDA GOTO YAZKNT OLMALI
         CALL   WRITE1
 YAZKNT  DECFSZ   SYCYAZ      ;8 B?T VER? YAZILDIMI KONTROL ED?L?R
         GOTO     YAZDEVAM    ;YAZMA ??LEM? B?TMED?
   RETURN                     ;YAZMA ??LEM? B?TT?


WRITE0   CALL    DQOUTPUT
         BCF     PORTBB
         CALL    BEKLE60MIKSN
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         NOP
         CALL    DQINPUT
         CALL    BEKLE60MIKSN
         GOTO    YAZKNT

WRITE1   CALL    DQOUTPUT
         BCF     PORTBB
         CALL    BEKLE30MIKSN
         CALL    DQINPUT
         CALL    BEKLE60MIKSN

     RETURN


OKU      MOVLW   8h              ;OKUNACAK B?T SAYISI (KAYDED?LECEK DE???KENDEK? B?T SAYISI KADAR)
         MOVWF   LWORD
         MOVWF   HWORD
LWORDOKU CALL    OKUDEVAM
         RRCF     SICAKLIKL        ;CARRY DEK? VER?Y? SICAKLIKL YE YAZ  RLLLLLLF  ?D???????
         DECFSZ  LWORD            ;SICAKLIKL YAZIMI B?TT? M??
         GOTO    LWORDOKU         ;HAYIR
HWORDOKU CALL    OKUDEVAM
         RRCF     SICAKLIKH        ;CARRY DEK? VER?Y? SICAKLIKH A YAZ   RLLLLLLLF     ?D??,????
         DECFSZ  HWORD            ;SICAKLIKH YAZIMI B?TT? M??
         GOTO    HWORDOKU         ;HAYIR
         CALL    RESETT  ;EVET SICAKLIK OKUNUP   SICAKLIKH VE SICAKLIKL A YAZILDI
         RETURN                   ;RESETT ?LE OKUMA SONLANDIRILDI

OKUDEVAM CALL    DQOUTPUT         ;READ TIME SLOTS PROTOKOLÜ ?LE 1 B?T OKUYAN ALT PROGRAM
         BCF     PORTBB
         NOP
         NOP
         NOP
         NOP
         CALL    DQINPUT
         BSF     STATUS,C
         call BEKLE30MIKSN
         BTFSS   PORTBB
         BCF     STATUS,C
         CALL    BEKLE60MIKSN
     RETURN

DQINPUT                 ;DQ  HATTINI YÜKSEK (HIGH) ÇEKMEYE YARAYAN ALT PROGRAM
         MOVLW 0XFF
         MOVWF TRISB,0
  RETURN

DQOUTPUT BCF   PORTBB               ;DQ HATTINI DÜ?ÜK (LOW=0) A ÇEKMEYE YARAYAN ALT PROGRAM
         MOVLW 0X00
         MOVWF TRISB,0

  RETURN

BEKLE500MIKSN  MOVLW   0xA8        ;501 M?KROSAN?YE DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
               MOVWF   SAYAC1
               DONGU1         ;SAYAC*4 + 1  M?KROSAN?YE  (+BA?TAK? YÜKLEMEDEN +4 GEL?R)
               DECFSZ   SAYAC1
               GOTO     DONGU1
               NOP
               MOVLW   0xA8         ;501 M?KROSAN?YE DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD
               MOVWF   SAYAC12
               DONGU18         ;SAYAC*4 + 1  M?KROSAN?YE  (+BA?TAK? YÜKLEMEDEN +4 GEL?R)
               DECFSZ   SAYAC12
               GOTO     DONGU18

               RETURN
BEKLE175MIKSN  MOVLW   0x75       ;1111111111    222222 OLACAKKKKKKKKKKKKKKKKKKKKKKKK
               MOVWF   SAYAC2     ;173 M?KROSAN?YE
               DONGU2          ;SAYAC*4 + 1  M?KROSAN?YE  (+BA?TAK? YÜKLEMEDEN +4 GEL?R)
               DECFSZ   SAYAC2
               GOTO     DONGU2
               RETURN
BEKLE90MIKSN   MOVLW   0x3c       ;89 M?KROSAN?YE
               MOVWF   SAYAC3
               DONGU3          ;SAYAC*4 + 1  M?KROSAN?YE  (+BA?TAK? YÜKLEMEDEN +4 GEL?R)
               DECFSZ   SAYAC3
               GOTO     DONGU3
               RETURN
BEKLE60MIKSN   MOVLW   0x28        ;61 M?KROSAN?YE
               MOVWF   SAYAC4
               DONGU4          ;SAYAC*4 + 1  M?KROSAN?YE  (+BA?TAK? YÜKLEMEDEN +4 GEL?R)
               DECFSZ   SAYAC4
               GOTO     DONGU4
               RETURN
BEKLE30MIKSN   MOVLW   0x14
               MOVWF   SAYAC5
               DONGU5         ;SAYAC*4 + 1  M?KROSAN?YE  (+BA?TAK? YÜKLEMEDEN +4 GEL?R)
               DECFSZ   SAYAC5
               GOTO     DONGU5
               RETURN

CEVIR    MOVF    SICAKLIKL,W     ;V?RGÜLDEN SONRAK? DE?ER YUVARLAMA ALT PROGRAMI ?Ç?N
         MOVWF   YUVARLA         ;YUVARLA DE???KEN?NE ALINDI
         SWAPF   SICAKLIKH,F     ;SICAKLIKH VE SICAKLIKL DEN BCD YE
         MOVLW   0F0H            ;DÖNÜ?TÜRÜLECEK SICAKLIK DE???KEN?N? OLU?TURMA
         ANDWF   SICAKLIKH,F

         SWAPF   SICAKLIKL,F
         MOVLW   0FH
         ANDWF   SICAKLIKL,W

         IORWF   SICAKLIKH,W
         MOVWF   SICAKLIK

CLRF   BIRLER                     ;SICAKLIK DE???KEN?NDEN YUZLER ONLAR B?RLER
CLRF   ONLAR                      ;?EKL?NDE 0-9 ARASI SAYI B?Ç?MDE DE???KEN ELDE ETME
CLRF   YUZLER
BASLA  MOVLW  0x00
       SUBWF  SICAKLIK,F
       BTFSC  STATUS,Z
       GOTO   ONDALIKYUVARLA
       DECF   SICAKLIK,F
       INCF   BIRLER,F
       MOVLW  0x0A
       SUBWF  BIRLER,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   BIRLER
       INCF   ONLAR,F
       MOVLW  0x0A
       SUBWF  ONLAR,W
       BTFSS  STATUS,Z
       GOTO   BASLA
       CLRF   ONLAR
       INCF   YUZLER,F
       GOTO   BASLA

ONDALIKYUVARLA  ; This routine rounds the fraction portion of the Temperature data to the nearest .1
; Provided by & used with his permission from 'Pommy'. Contact via Electro-Tech-Online.com
 ;Examples
; TENTHS = Fraction                           * 10 / 16
; TENTHS = 00000100 ( D'4' * 0.0625 = 0.2500 Degrees C) * 10 / 16 = 3
; TENTHS = 00001001 ( D'9' * 0.0625 = 0.5625 Degrees C) * 10 / 16 = 6
; TENTHS = 00001101 (D'13' * 0.0625 = 0.8125 Degrees C) * 10 / 16 = 8

        MOVLW   B'00001111'            ;
        ANDWF   YUVARLA, F             ;
        MOVF    YUVARLA, W             ;
        ADDWF   YUVARLA, F             ; *2, C=0
        RLCF     YUVARLA,F             ; *4, C=0
        ADDWF   YUVARLA, F             ; *5, C=0
        RLCF     YUVARLA, F             ; *10
        MOVLW   B'00001000'            ;
        ADDWF   YUVARLA, F             ; Rounding
        SWAPF   YUVARLA, W             ; Pseudo divide by 16
        ANDLW   B'00001111'            ;
        MOVWF   ONDALIK                ;YUVARLADAK? DE?ER 0.1 L?K YUVARLANARAK ONDALIK DE???KEN?NE ALINDI

CEVRIMSON MOVLW   0x030          ;YUZLER ONLAR BIRLER DE???KENLER?N? LCD YE D?REK
         ADDWF  YUZLER,F      ; YAZILAB?LECEK FORMA ÇEV?RME
         ADDWF  ONLAR,F
         ADDWF   BIRLER,F
         ADDWF  ONDALIK,F
         ADDWF  SICAKLIK,F

RETURN





end


RaMu

8 nolu mesajda verdiğim programı ben yazdım,
devresinide kurup çalıştırdığım bir program,
sorun yok programda,
18f e çevirirken hata yapmış olabilirsin,
18f için yaptığın değişikliklere odaklanman faydalı olur.

Ayrıca devre kuruyorsan
ds18b20 ye pull up bağlamayı ihmal etme.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

ido2323

RAmu hocam sayende ds18b20 ile uğraşırken bi ton tecrübe kazandım sağolasın sana zahmet ADC ile yapılmış örnek uygulaman var mı? Potansiyometre olur LM35 olur, bunları çalıştırmak için ne olursa fark etmez. Bu DS18b20 çok zamanımı aldı bunla uğraşırsam arpa boyu yol alamam en azından "SICAKLIKH ve SICAKLIKL" değerlerini doğru okuyor sadece çevirirken hata yapıyor olsun bu da bana yeter, arada düzeltmek için bakarım.

RaMu

Asm ile hiç adc uygulaması yapmadım,
ds18b20 için verdiğim kodun
dspic30F2010 için yazdığım versiyonu var,
buna yine dspicde birde saat eklediğim versiyonu var.

Neden asm çalışıyorsun?
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html