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.