Forum: Mikrocontroller und Digitale Elektronik Adressen verstehen im Datenblatt


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Denis (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
ATmega8 oder ATmega8L

von Hanno (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Hi

>Dafür nutze ich folgende Macros:

ATMEL-AppNotes lassen grüssen.

MfG Spess

von Denis (Gast)


Bewertung
0 lesenswert
nicht 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)


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

von spess53 (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
-1 lesenswert
nicht lesenswert
oh mann... einmal mit Profis !!!

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

Danke Holger !!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.