mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage zu AT90CAN128 Port- und Speicheradresse


Autor: Darius Zohurian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe schon einige ähnliche Fragen im Forum gefunden, aber es war
leider keine dabei, die mich "befriedigen" konnte, ist aber wohl
keine Profi Frage.

Folgendes...

Ich weiß, dass es eine Speicheradresse und eine Port Adresse für z.B.
den PINB (0x23, 0x03) gibt.

Wenn ich jetzt den PINB abfragen möchte, z.B. mit
if(PINB & _BV(PB5))

wo wird der Wert abgefragt, bzw. welche Adresse wird genommen, die Port
Adresse oder die Speicheradresse?

Genauso stelle ich mir die frage, wenn ich

PORTA = 0x01; (PA1 ist ein Ausgang), setze, wo wird der Wert
hingeschrieben, dort wo die Speicheradresse ist oder bei der Port
Adresse?

Den Unterschied der beiden Adresse verstehe ich nicht (im Bezug auf das
schreiben und lesen von Ports,Pins,oder DDR Register), wann wird etwas
in die Portadresse und wann in die Speicheradresse geschrieben?

Für eine Klare Antwort wäre ich sehr dankbar,

Mit freundlichen Grüßen
Darius

Autor: Wolfgang Weinmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich hoffe, daß ich aus dem Kopf alles richtig zusammenbekomme. Außerdem
benutze ich nen ATMEGA8, aber ich denke es kommt aufs gleiche raus.

Sprechen wir mal von Speieradressen:
Die untersten 32(dez.) Speicheradressen (0-31) werden von Registern
belegt.
Dann fangen die Special Funktion Register (SFR)an: Ab Speicheradresse
32 (dez.)Diese SFRs sind über Speicherbefehle (lds, sts) und über
IO-Befehle (In, OUT) ansprechbar. Also auf zwei verschiedene Art und
Weisen.

Nehmen wir das SFR mit der niedrigsten Adresse: Das SFR an
Speicheradresse 32 (dez.). Dieses ist genauso über die IO-Adresse 0
anzusprechen.

Das SFR an Speicheradresse 33 (dez.)kann mit den Speicherbefehlen LDS,
STS angesprochen werden und  ist genauso über die IO-Befehle IN, OUT an
IO-Adresse 1 anzusprechen.

Das geht so fort bis zur Seicheradresse $5F (jetzt hex.), das mit der
IO-Adresse 3F über in/Out ansprechbar ist.


Da sieht man schon mal folgendes: Es gibt einen Offset von dez. 32:
Den kleineren Wert für die IO-Adressierung, den größeren für die
Speicheradressierung.

Ab Speicheradresse $60 steht dann nur noch der Speicherbefehl zur
Verfügung.

Aber das erledigt beim Einsatz eines Compilers dieser für Dich.
Die IO-Adressierung ist halt etwas schneller(1 Takt statt 2 Takten bei
Speicheradressierung).

So - hoffe das hat weitergeholfen.

Gruß

Wolfgang Weinmann

--
www.ibweinmann.de
Mikrocontrollersysteme

Autor: Darius Zohurian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also wenn ich ehrlich bin, habe ich es nicht verstanden, wo die
Register liegen weiss ich.
Ich möchte nur wissen, wann ich auf die Speicheradresse zugreife und
wann auf die Portadresse?

Vielleicht kann mir ja jemand zwei befehle zeigen, wo jeweils eine
Adresse verwendet wird.

Gruß
Darius

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.