ADMUX direkt an RS232 ausgeben

Gast #531963
Lesenswert?
• ▲
▼
Hallo,

wenn ich folgendes verwende:

    ldi   temp1, 0x40
    rcall transmit

gibt es mir ein @ aus, wenn ich jedoch

    ldi   temp1, ADMUX
    rcall transmit

verwende so gibt der mir nichts gescheits wieder.
ADMUX enthaellt 0x40


bekomme ich das irgendwie hin das der mir ein @ sendet wenn ADMUX 0x40 
ist?
Gast #532010
Lesenswert?
• ▲
▼
ldi   temp1, 0x40
rcall transmit

logisch geht das nicht, weil:
LDI ist load immediate.
Du lädst hier eine Konstante (hier 0x40) in temp1.
und gibst die aus.

ldi   temp1, ADMUX
rcall transmit

Hier dasselbe. Du lädst eine Konstante, gespeichert unter dem Namen 
ADMUX ins temp1. Also hier die Adresse von ADMUX (siehe irgendeine 
h-datei.)
Du musst aber den inhalt von ADMUX auslesen, also:

LDS temp1, ADMUX
oder
IN temp1, ADMUX

(eines von beiden geht nur, welches da müsste ich in der h-datei 
nachsehen)
Gast #532379
Lesenswert?
• ▲
▼
>> Sirko Pöhlmann (poehli):
>> LDS lädt vom SRAM, das passt also auch nicht

ld und st (und somit auch lds, ldd, sts, std) können auf alle 
Daten-adressen zugreifen: Register, I/O interner und ggf. externer RAM !
Gast #532391
Lesenswert?
• ▲
▼
> ld und st (und somit auch lds, ldd, sts, std) können auf _alle_
> Daten-adressen zugreifen

Genau. Die I/O-Register liegen schließlich im SRAM. Für den Zugriff auf 
die unteren 64 I/O-Register gibts eben alternativ die (schnelleren) 
Befehle "in" und "out". Bei vielen AVRs gibt es weniger als 64 
I/O-Register, weshalb man bei denen alle I/O-Register mit "in" und "out" 
ansprechen kann, während bei einigen größeren AVRs einige der 
I/O-Register im extended I/O Space liegen und nur über "lds" und "sts" 
ansprechbar sind.
Gast #532396
Lesenswert?
• ▲
▼
Ach ja, der Zugriff über "in" und "out" verwendet die "Nummer" des 
betreffenden I/O-Registers (die Adresse im I/O Space), während "lds" und 
"sts" mit der absoluten RAM-Adresse gefüttert werden wollen. Deshalb 
funktioniert der Zugriff über "ldi" und "sts" auch nicht mit den in der 
Headerdatei definierten Makros. Da muss zur Adresse noch 0x20 addiert 
werden. Deshalb hat Matthias nicht ganz unrecht...

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.