Forum: Mikrocontroller und Digitale Elektronik Adressen verstehen im Datenblatt


von Denis (Gast)


Lesenswert?

Guten Tag Miteinander

ich versuche mich zur Zeit mit avr assembler (avra) und einem Simulator 
ein Zeichen über die serielle Schnittstelle zu schicken.
Beim Debuggen fällt mir auf, dass das Register UDR in der atmega8 
definition auf .equ UDR = 0x0c steht.
Im Simulator wird jedoch UDR an Stelle 0x2c dargestellt.
Im Datenblatt.. und jetzt zur Frage... steht UDR 0x0c (0x2c) ....

Was bedeutet das, wenn im Datenblatt von atmega8 in der 
Registerübersicht UDR 0x0c(0x2c) steht? Ist die Adresse nun die, die 
ohne Klammer da steht, oder die in der Klammer?

Danke und Grüße
Denis

von (prx) A. K. (prx)


Lesenswert?

UDR hat die Adresse 0x2C, wird aber in den IN/OUT Befehlen mit 0x0C 
adressiert, da der I/O-Bereich bei 0x20 beginnt.

Besonders gelungen ist diese auf den Assembler durchgreifende Methode 
von Atmel nicht, da IN/OUT nur 64 Bytes adressieren können und jenseits 
davon LDS/STS genutzt werden müssen. Mit IN/OUT adressiert man es also 
mit 0x0C, mit LDS/STS aber mit 0x2C.

: Bearbeitet durch User
von ... (Gast)


Lesenswert?

ATmega8 oder ATmega8L

von Hanno (Gast)


Lesenswert?

Denis schrieb:
> Ist die Adresse nun die, die
> ohne Klammer da steht, oder die in der Klammer?

... schrieb:
> ATmega8 oder ATmega8L

Tolle Antwort. Und so hilfreich... :-(

von spess53 (Gast)


Lesenswert?

Hi

>Was bedeutet das, wenn im Datenblatt von atmega8 in der
>Registerübersicht UDR 0x0c(0x2c) steht? Ist die Adresse nun die, die
>ohne Klammer da steht, oder die in der Klammer?

Das ein ist die Adresse (ohne Klammern) die für Befehle wie 
in/out/cbr/sbr, also Bafehle in IO-Adressraun verwendet werden. Ohne 
Klammer sind Adressen die in RAM verwentet werden, also z.B. sts /lds 
für diese Register.

MfG Spess

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Dafür nutze ich folgende Macros:
1
; Makros für AVR-Assemblerprogramme
2
; Dr. Michael Schramm Softwareentwicklung
3
; www.schramm-software.de
4
... weitere Makros ...
5
.macro out_ ;(I/O-Reg, reg)
6
.if (@0 < 64)
7
  out  @0,@1
8
.else
9
  sts  @0,@1
10
.endif
11
.endmacro
12
13
.macro in_ ;(reg, I/O-Reg)
14
.if (@1 < 64)
15
  in  @0,@1
16
.else
17
  lds  @0,@1
18
.endif
19
.endmacro
20
... weitere Makros ...
IN/OUT brauchen je einen Tick, STS/LDS je Zwei
Die Makros ersetzen den Befehl 1:1 mit dem nötigen Befehl.

MfG

von spess53 (Gast)


Lesenswert?

Hi

>Dafür nutze ich folgende Macros:

ATMEL-AppNotes lassen grüssen.

MfG Spess

von Denis (Gast)


Lesenswert?

Oha...


Könnte man dann anstatt out einfach nur sts nutzen um in die Register zu 
schreiben?
Ein paar Experimente diesbezüglich funktionierten, nur das UDR 
beschreibt sich in keiner Weise. Ich schätze, ich muss zuvor andere 
Dinge machen, bevor ich das Beschreiben darf....

Danke für die Antwort - schnelle Antwort.

von Denis (Gast)


Lesenswert?

Im Simulator, und im --device selector von avra wähle ich atmega8  ohne 
L

von spess53 (Gast)


Lesenswert?

Hi

>Könnte man dann anstatt out einfach nur sts nutzen um in die Register zu
>schreiben?

Dann passen aber die Adressen aus der .inc-Datei nicht.

MfG Spess

von Denis (Gast)


Lesenswert?

Ja, das ist richtig.
Ich gab für die Eperimente die Adressen direkt mit an.
Z.B.
1
  ldi temp, 0x33
2
  sts 0x2c, temp

Danke für alle Antworten... ich probier mal weiter...
 ;-)

von holger (Gast)


Lesenswert?

>Ein paar Experimente diesbezüglich funktionierten, nur das UDR
>beschreibt sich in keiner Weise.

Du versuchst doch hoffentlich nicht UDR zu lesen um
nachzusehen ob das drin steht was du geschrieben hast.
Das geht gar nicht!

von Denis (Gast)


Lesenswert?

oh mann... einmal mit Profis !!!

haja klar!
I mach mir da einen ab....

Danke Holger !!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.