Problem s DS18B20 a 51

Michal Grunt michal.grunt@volny.cz
Pátek Prosinec 30 23:31:40 CET 2005


Zdravim, poradil by mi nekdo kde bych mohl mit chybu z programu? Cele
se to chova tak ze mi cidlo vyhodi dve hodnoty po 0xffh. Uz se s tim
peru tri dny a uz nevim co s tim, zkousel jsem menit casove konstanty,
ale je to porad to same... R6 a R7 si nechavam vypisovat na LCD (kod
jsem zkratil jenom na ovladani cidla).

Diky moc za rady, s 51 zacinam, takze je mozne ze tam budu mit nejakou
botu. P89V51RD2, 24Mhz

dallas  equ     p2.0

        org 0
        jmp start
;------------ INIT ----------------
init:
        push psw
        clr dallas              ; stahni sbernici na 0

        mov   R2,#2             ; cekej 480us
        mov   R1,#221
TT1:
        djnz  R1,TT1
        djnz  R2,TT1

        setb dallas             ; uvolni sbernici
init1:
        mov   c,dallas          ; precti sbernici       1=zarizeni neni pripojeno, 0=zarizeni je pripojeno
        jc   init1
        mov   R2,#2             ; cekej 480us
        mov   R1,#221
TT3:
        djnz  R1,TT3
        djnz  R2,TT3
        pop psw
        ret

;--------------- ZAPIS ----------------
zapis:
        mov r3,#8               ; orotuje 8x'a'
zapis3:
        rrc     a
        jnc zapis1              ; kdyz je c=0 zapis log 0, jinak zapis log 1
        clr dallas              ; zapis log 1
        mov   R1,#0eh           ; cekej 15us
TT4:
        djnz  R1,TT4
        setb dallas

        mov   R1,#37h           ; cekej 55us
TT5:
        djnz  R1,TT5
        ajmp  zapis2
zapis1:                         ; zapis log 0
        clr dallas
        mov   R1,#96            ; cekej 100us
TT6:
        djnz  R1,TT6
        setb dallas
zapis2:
        nop                     ; cekej 1us
        nop
        nop
        nop
        djnz r3,zapis3
        ret
    
;-------------- CTENI -------------
cti:
        mov     R5,#8
cti1:
        mov r3,#0eh             ; cekej 15us
        clr dallas              ; stahne sbernici na 0
cti2:
        djnz r3,cti2
        setb dallas             ; uvolni sbernici
        nop
        nop
        mov c,dallas
        rrc a
        nop
        nop
        djnz R5,cti1
        ret


;-------------- start ----------------
start:
        acall init
        mov     a,#0cch         ; skip ROM = jedno zarizeni
        acall zapis             ; zapise 'a'
        mov     a,#044h         ; mereni teploty
        acall zapis             ; zapise 'a'

        mov   r3,#4             ; cekej 200ms na mereni
        mov   r2,#14
        mov   r1,#42
TT11:
        djnz  r1,TT11
        djnz  r2,TT11
        djnz  r3,TT11

        acall init              ; cteni teploty
        mov     a,#0cch         ; skip ROM = jedno zarizeni
        acall zapis             ; zapise 'a'
        mov     a,#0beh         ; precte hodnoty
        acall zapis             ; zapise 'a'
        acall cti
        mov   r7,a              ; nizsi byte
        acall cti
        mov   r6,a              ; vyssi byte

        end

-- 
Michal Grunt




Další informace o konferenci Hw-list