Marcin Korus
Guest
Thu Nov 18, 2004 10:03 pm
witam
od niedawna przesiadlem sie z '51 na AVRy i mam takie pytanko na ktore nie
umie znalezc odpowiedzi
w '51 mialem obszar pamieci (np 2051 adresy 20h - 7Fh) z ktorego moglem
sobie rezerwowac rejestry do dalszych operacji np:
czynnik_1 equ 31h
w AVR 2313 mam tez obszar (adresy 60h - DFh) tylko nie bardzo wiem jak tam w
asemblerze zadeklarowac jakas nazwe dla danego bajtu zeby moc korzystac z
nazwy a nie adresu rejestru w pamieci
w przykladowych programach dla AVR w obszarze SRAM jest umiejscowienie
stosu:
ldi r16,low(RAMEND) ;dla 2313 RAMEND = DFh
out SPL,r16
czyli cala pamiec SRAM przeznaczona na stos a moglbym zamiast RAMEND dac
adres np DDh i wtedy dwa najstarsze bajty moge swobodnie uzywac (po
wczesniejszej deklaracji)
i jeszcze jedno czy mozliwa jest w AVR deklaracja pojedynczych bitow z
obszaru SRAM (w '51 byl pewien obszar (20h - 2Fh) w ktorym mozna bylo
deklarowac pojedyncze bity
tylko nie piszcie mi zebym sie przesiadl na C bo wiem o tym i dzialam w tym
kierunku jednak od zawsze pisalem w asemblerze i pewnych nawykow ciezko sie
wyzbyc :)
z gory dziekuje za odpowiedz
marcin korus
T.M.F.
Guest
Thu Nov 18, 2004 11:17 pm
Quote:
od niedawna przesiadlem sie z '51 na AVRy i mam takie pytanko na ktore nie
umie znalezc odpowiedzi
w '51 mialem obszar pamieci (np 2051 adresy 20h - 7Fh) z ktorego moglem
sobie rezerwowac rejestry do dalszych operacji np:
czynnik_1 equ 31h
w AVR 2313 mam tez obszar (adresy 60h - DFh) tylko nie bardzo wiem jak tam w
asemblerze zadeklarowac jakas nazwe dla danego bajtu zeby moc korzystac z
nazwy a nie adresu rejestru w pamieci
nazwa: .DB 1 - nazwa wskazuje na bajt w pamieci
nazwa: .DB 2 - teraz wskazuje na obszad dwubajtowy
Natomiast equ przyporzadkowywuje etykiecie jakas liczbe, ale nic nie
rezerwuje w pamieci.
Quote:
i jeszcze jedno czy mozliwa jest w AVR deklaracja pojedynczych bitow z
obszaru SRAM (w '51 byl pewien obszar (20h - 2Fh) w ktorym mozna bylo
deklarowac pojedyncze bity
A jak zamierzalbys sie do nich odwolywac?
Mozesz zadeklarowac pewne bity w bajcie i stosownie nim operowac
operatorami |, & i ^ oraz << i >>
--
Inteligentny dom -
http://idom.wizzard.one.pl
Teraz takze forum dyskusyjne
Zobacz, wyslij uwagi, dolacz sie do projektu.
Adam Dybkowski
Guest
Thu Nov 18, 2004 11:23 pm
Marcin Korus wrote:
Quote:
w '51 mialem obszar pamieci (np 2051 adresy 20h - 7Fh) z ktorego moglem
sobie rezerwowac rejestry do dalszych operacji np:
czynnik_1 equ 31h
w AVR 2313 mam tez obszar (adresy 60h - DFh) tylko nie bardzo wiem jak tam w
asemblerze zadeklarowac jakas nazwe dla danego bajtu zeby moc korzystac z
nazwy a nie adresu rejestru w pamieci
Aby zmienna umiescic w rejestrze (czyli po prostu zdefiniowac inna nazwe
dla rejestru) piszesz np. w ten sposob:
..def licznik =r21
Adresy zmiennych lezacych w RAMie deklarujesz tak samo jak inne stale:
..equ InputBufferBegin =RAMEND-127
Ale znacznie lepiej powierzyc przypisywanie konkretnych adresow
asemblerowi i skorzystac z dobrodziejstw sekcji danych:
..dseg
var1: .byte 1 ; rezerwacja 1 bajtu na zmienną
..cseg
lds r16, var1 ; załadowanie zawartości var1
; do rejestru r16
Polecam lekturę "AVR Assembler User Guide":
http://www.atmel.com/dyn/resources/prod_documents/doc1022.pdf
Quote:
i jeszcze jedno czy mozliwa jest w AVR deklaracja pojedynczych bitow z
obszaru SRAM (w '51 byl pewien obszar (20h - 2Fh) w ktorym mozna bylo
deklarowac pojedyncze bity
Nie jest mozliwa. Mozesz natomiast napisac definicje numerow bitow w
komorkach pamieci, ktore normalnie zadeklarowales jako bajty. Wtedy
robisz operacje np. ustawienia n-tego bitu w komorce o adresie x. Gdy
sie to zalatwi odpowiednimi makrami to nawet moze byc wygodnie. Jezeli
mozesz to jak najwiecej danych trzymaj w rejestrach (w AVRach jest ich
32) - dostepy do nich sa duzo szybsze niz do reszty RAMu.
--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/
Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.
Q
Guest
Fri Nov 19, 2004 12:10 am
Quote:
sobie rezerwowac rejestry do dalszych operacji np:
czynnik_1 equ 31h
hm...
a nie def?
np.:
..def temp1=r01
Quote:
tylko nie piszcie mi zebym sie przesiadl na C
nie przesiadaj sie na C
AlexY
Guest
Fri Nov 19, 2004 5:29 pm
Użytkownik T.M.F. napisał:
[..]
Quote:
nazwa: .DB 1 - nazwa wskazuje na bajt w pamieci
nazwa: .DB 2 - teraz wskazuje na obszad dwubajtowy
Natomiast equ przyporzadkowywuje etykiecie jakas liczbe, ale nic nie
rezerwuje w pamieci.
przy czym wykozystuje sie to rowniez do etykietowania pamieci i chyba o
ten kontekst inicjatorowi watku chodzilo
niemniej masz racje, nic to nie rezerwuje