mikrocontroller.net

Forum: Compiler & IDEs toggle PORT durch schreiben von PIN


Autor: Fritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich hab unlängst in meinem ATTINY2313 Datenblatt gelesen, dass das 
togglen der PORTx Register ganz einfach durch schreiben der zugehörigen 
PINx Registers möglich ist. (S. 51 ganz oben)

Weiß jemand mehr darüber? Warum wird das nicht häufiger verwendet 
sondern immer nur die XOR Methode?

Das könnte man doch auch ins AVR-GCC-Tutorial aufnehmen, was meint ihr?

mfg Fritz

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fritz schrieb:

> Weiß jemand mehr darüber?

Welche Information fehlt dir denn noch darüber?

> Warum wird das nicht häufiger verwendet
> sondern immer nur die XOR Methode?

Weil es nur bei neueren AVRs funktioniert.

Autor: Fritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also zb. fehlte mir bis vor 5min die Information, dass man nicht 
PINx|=... schreiben soll, sondern PINx=... wenn man togglen will. Warum 
weiß ich aber immer noch nicht so ganz.

mfg Fritz

Autor: Thomas Pircher (tpircher) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fritz schrieb:
> Weiß jemand mehr darüber?

Nein. Der von dir gefundene Absatz beinhaltet alles was man wissen muss:

| Writing a logic one to PINxn toggles the value of PORTxn,
| independent on the value of DDRxn. Note that the SBI instruction
| can be used to toggle one single bit in a port.

> Warum wird das nicht häufiger verwendet sondern immer nur die XOR Methode?

Ich nehme an weil mit der XOR-Methode direkt aus dem Code hervorgeht was 
gemacht wird.
Mit der Methode PINxn zu beschrieben benoetigt es implizites Wissen zu 
der Plattform fuer die der Code geschrieben ist; ohne zusaetzlichen 
erklaerenden Kommentar ist dieser Code dann nur mehr schwer 
verstaendlich.

Sollte der Code einmal auf eine andere Prozessorfamilie portiert werden, 
dann ist das eine Stelle die sehr leicht bei der Portierung uebersehen 
wird und dann unnoetiges Debugging verursacht.

Kurz: wenn man weiss was man tut und unbedingt 2 Takte oder 4 Bytes 
einsparen muss, dann kann man getrost die PINxn-Methode verwenden. 
Meiner Erfahrung nach sind diese Bedingungen aber aeusserst selten 
gegeben.

IMHO der einzige Grund diese Methode zu verwenden ist wenn man ein 
atomares Toggeln eines Bits braucht.

> Das könnte man doch auch ins AVR-GCC-Tutorial aufnehmen, was meint ihr?

Hmm, ich denke gerade Anfaenger sollten die XOR-Methode verwenden, wo 
explizit da steht was getan werden soll.

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Fritz schrieb:
> Also zb. fehlte mir bis vor 5min die Information, dass man nicht
> PINx|=... schreiben soll, sondern PINx=... wenn man togglen will. Warum
> weiß ich aber immer noch nicht so ganz.
>
> mfg Fritz

weil du sonst erst PINx ausliest...

Autor: Fritz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hmm, ich denke gerade Anfaenger sollten die XOR-Methode verwenden, wo
> explizit da steht was getan werden soll.

Ich denke es würde auch schon genügen, wenn man hineinschreiben würde, 
dass es die Methode gibt, aber dass man sie aus oben genannten Gründen, 
die mir jetzt sehr verständlich erscheinen, nur selten verwenden sollte.

> weil du sonst erst PINx ausliest...

Hmm, ja stimmt natürlich, daran hatte ich gar nicht gedacht, PIN hat ja 
dann beim lesen eine völlig andere Bedeutung als beim schreiben.

Vielen Dank an alle.

mfg Fritz

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der entscheidene Punkt dabei ist m.E. nicht so sehr die Möglichkeit, 
Pins toggeln zu können. Vielmehr ist man nur so in der Lage, mehrere 
Pins eines Ports atomar und gleichzeitig auf einen bestimmten Wert zu 
setzen, ohne die Interrupts abschalten zu müssen.

http://www.mikrocontroller.net/articles/Interrupt#...

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.