logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak w asemblerze dokonać pomiaru wilgotności czujnikiem DS1923?

22 Maj 2006 00:09 1335 2
REKLAMA
  • #1 2650647
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #2 2650720
    vedy1
    Poziom 15  
    Posty: 117
    Pomógł: 11
    Ocena: 41
    Witam!!
    Na jaki mikroprocesor?? ('51,avr,itp.)???
    POZDRAWIAM

    Przecież to zwykła magistrala 1-WIRE, przesyłam moją implementację dla 1-wire do '51 (w asmie), kwarc 12Mhz, są to poszczególne bloki do sprawdzania ds-a czy jest na linii, wysyłania komend, sprawdzania zajętości, odczytywanie poszczególnych bitów i w końcu bajtów :

    Dq equ p1.0

    ;--------------------------------------------------------------Command Presence pulse
    Presence_pulse:

    clr dq

    mov r7,#250
    djnz r7,$

    setb dq

    mov r7,#30
    djnz r7,$
    jnb dq,ds_ok
    ;setb 36h

    ds_ok:
    jnb dq,ds_no
    setb 39h
    ds_no:
    mov r7,#250
    djnz r7,$
    ret
    ;--------------------------------------------------------------End of Command Presence pulse
    ;--------------------------------------------------------------Command Write byte
    write_byte:

    mov r6,#8

    write_bit:

    jb acc.0,write_1
    jnb acc.0,write_0

    write_0:
    clr dq
    mov r7,#50
    djnz r7,$
    setb dq
    mov r7,#50
    djnz r7,$
    rr a
    djnz r6,write_bit
    ret
    write_1:
    clr dq
    mov r7,#4
    djnz r7,$
    setb dq
    mov r7,#95
    djnz r7,$
    rr a
    djnz r6,write_bit
    ret
    ;--------------------------------------------------------------End of Command Write byte

    ;--------------------------------------------------------------Command Read Status
    read_status:
    clr dq
    mov r7,#3
    djnz r7,$
    setb dq
    mov r7,#5
    djnz r7,$
    nop
    jnb dq,nxt
    clr 28h
    ret
    nxt:
    mov a,#1
    lcall delaym
    setb 28h
    ret

    ;--------------------------------------------------------------End Command Read Status

    ;--------------------------------------------------------------Command Read 9 bites
    read:
    mov a,#0cch
    lcall write_byte
    mov a,#0beh
    lcall write_byte
    mov r7,#30
    djnz r7,$
    mov r5,#9
    mov r0,#10h

    czytaj_9bajtow:
    lcall read_byte
    mov @r0,A
    inc r0
    djnz r5,czytaj_9bajtow
    ret
    ;--------------------------------------------------------------End of Command Read 9 bites

    ;--------------------------------------------------------------Command Read byte
    Read_byte:
    mov r6,#8
    clr a
    Read_bit:
    clr dq
    mov r7,#5
    djnz r7,$
    setb dq
    mov r7,#5
    djnz r7,$
    jb dq,read_1
    jnb dq,read_0
    Read_0:
    clr acc.0
    rr a
    mov r7,#30
    djnz r7,$
    djnz r6,read_bit
    ret
    Read_1:
    setb acc.0
    rr a
    mov r7,#30
    djnz r7,$
    djnz r6,read_bit
    ret
    ;--------------------------------------------------------------End of Command Read byte

    Od razu zaznaczam że program jest mojego autorstwa, na 100% działa z magistralą 1-WIRE (sprawdzany był z pastylkami ds18xx). Resztę kodu można bez problemu dopisać... a te które tu są to wywołujesz poleceniem lcall a program zwraca odpowiednie bity lub bajty pod odpowiednie adresy.
  • #3 2651122
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA