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
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
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
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.