Aktyw Forum

Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.

Sprawdź punkty Zarejestruj się

pamiec w avr

JacekR
-
-
Posty:52
Rejestracja:2 kwie 2004, o 18:43
Lokalizacja:PL
pamiec w avr

Postautor: JacekR » 19 gru 2004, o 10:15

witam
Mam maly problem z ASM w AVR
Potrzebuje w pamieci RAM umiescic ciag bajtow (okolo 100).
i odczytac pokoleji (z tym nie ma problemu)
jak i wybrane tylko np od 3 do 7 bajtu(i tu jest problem :( )
Czy moglby ktos mnie naprowadzic jak to zrobic ?

Arrek
-
-
Posty:117
Rejestracja:18 wrz 2003, o 20:41
Lokalizacja:wawa

Postautor: Arrek » 19 gru 2004, o 11:51

Wydaje mi sie, ze tak:
gdy czytasz wszystkie bajty (powiedzmy 100: 0...99) to zaczynasz od zerowego i w warunku zakonczenia petli masz 100 - pierwszy bajt ktory nia ma byc czytany. Gdy chcesz od 3 do 7 to zaczynasz od 3. a w warunku zakonczenia petli wpisujesz 8. Mozesz to zrobic modyfikujac lekko to co juz masz. Czy problem tkwi w czyms innym?

Grzechu80
-
-
Posty:59
Rejestracja:12 gru 2004, o 15:57
Lokalizacja:W-wa

Postautor: Grzechu80 » 19 gru 2004, o 17:13

Mi też jest trudno wyczuć problem. Skoro udaje Ci się wpisać, zapewne rozkazem ST, to analogicznie odczytujemy rozkazem LD. Przedtem trzeba nastawić wymagany adres w rejestrze X, Y albo Z (który tu używasz...).
Nie wiem, może zapominasz o adresie początku SRAM, wynoszącym $60?

Awatar użytkownika
gawel
-
-
Posty:683
Rejestracja:24 lis 2003, o 11:19
Lokalizacja:Białystok

Postautor: gawel » 19 gru 2004, o 21:57

Istotny fragment:

.dseg
table: .byte 100

kompilator przydzieli w pamięci obszar 100 bajtów pamięci RAM na zmienną. Jeżeli zmienna ma być umieszczona w pamięci zewnętrznej RAM po dyrektywie .dseg należy dać dyrektywę .org z określeniem podstawy adresowej pamięci RAM.

Dane z pamięci można pobrać na kilka sposobów:
lds r16,table ; jako table[0]
lds r16,table+56 ; jako table[56]

lub
ldi zl,low(table)
ldi zh,high(table) ; po tych instrukcja rejestr z zawiera adres zmiennej table
ld r16,z ; pobranie table[0]
ewentualnie
ld r16,z+

odczytanie kolejnych bajtów od indeksu x /x-jako konkretna liczba/ mażna zrobić następująco:
ld zl,low(table+x)
ld zh,high(table+x)
ld r16,z+
ld r16,z+
ld r16,z+
ld r16,z+
ld r16,z+
oczywiście te instrukcje można zrobić w pętli zliczając ilość wykonanych cylki.

JacekR
-
-
Posty:52
Rejestracja:2 kwie 2004, o 18:43
Lokalizacja:PL

Postautor: JacekR » 20 gru 2004, o 17:39

Wlasnie wrocilem z podrozy sluzbowej ;(
Dziekuje za odpowiedzi lada dzien przeanalizuje wszystko i napisze jakby cos mi nie wychodzilo

p.s.
Do Gawła
Czy jest juz ksiazka ??

Wróć do „AVR/AVR32”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości