Witam!
Piszę obsługę 1-wire w asemblerze od podstaw (takie jest zadanie).
Napisałem sobie obsługi timingowe 1-wire zgodnie z dokumentacją ds18b20 i mam problem z implementacją odczytu/zapisu bajtu na bazie procedur odczytu/zapisu bitu.
W załączniku jest kod całości, a poniżej problematyczne procedury:
Oczywiście nie mogę użyć sbrs w ten sposób:
Więc pojawia się pytanie jak sprawdzać kolejne bity w kolejnych przebiegach "pętli" (w przypadku procedury zapisu) oraz jak ustawiać logiczne 1 w kolejnych bitach przy kolejnych przebiegach "pętli" (w przypadku procedury odczytu).
A może jest jakiś inny sposób?
Pozdrawiam,
Adam Pyka
Piszę obsługę 1-wire w asemblerze od podstaw (takie jest zadanie).
Napisałem sobie obsługi timingowe 1-wire zgodnie z dokumentacją ds18b20 i mam problem z implementacją odczytu/zapisu bajtu na bazie procedur odczytu/zapisu bitu.
W załączniku jest kod całości, a poniżej problematyczne procedury:
;---------------------------------------
; Procedury komunikacyjne 1-wire
;
; Rejestr R20 - wartosc do wyslania / wartosc odczytana
; Rejestr R16 - tymczasowy licznik petli
; Rejestr R21 - flaga stanu linii 1-wire (odczytanego bitu)
;---------------------------------------
ow_write: ;wysyla bajt po magistrali 1-wire
ldi R16, 8
Petla_w8:
dec R16
sbrs R20, R16 ;sprawdza czy jest w stanie wysokim
rcall ow_write_l
sbrc R20, R16 ;sprawdza czy jest w stanie niskim
rcall ow_write_h
brne Petla_w8
ret
ow_read: ;odczytuje bajt z magistrali 1-wire
ldi R16, 8 ;laduje wartosc licznika do R16
clr R20 ;zeruje rejestr R20
Petla_r8:
dec R16 ;zaczynamy liczyc od 7
rcall ow_read_b ;odczytuje bit z magistali
sbrc R21, 0 ;sprawdza czy jest w stanie niskim (mozna ominac zerowanie bo zostalo to zrobione wczesniej)
sbr R20, R16 ;ustawia odpowiedni bit, jezeli na magistrali takowy jest w stanie wysokim
brne Petla_r8
retOczywiście nie mogę użyć sbrs w ten sposób:
sbrs R20, R16Więc pojawia się pytanie jak sprawdzać kolejne bity w kolejnych przebiegach "pętli" (w przypadku procedury zapisu) oraz jak ustawiać logiczne 1 w kolejnych bitach przy kolejnych przebiegach "pętli" (w przypadku procedury odczytu).
A może jest jakiś inny sposób?
Pozdrawiam,
Adam Pyka