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
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
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... :-(
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
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
Hi
>Dafür nutze ich folgende Macros:
ATMEL-AppNotes lassen grüssen.
MfG Spess
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.
Im Simulator, und im --device selector von avra wähle ich atmega8 ohne L
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
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... ;-)
>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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.