www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Portansteuerung über Variable


Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe folgendes Problem: Ich möchte bestimmte Pins eines ATMega169P aus 
verschiedenen Ports setzen. Die Entscheidung welche Pin/Port-Kombination 
verwendet werden soll, soll im Programm entschieden werden. Gibt es da 
in C einen Weg das über Variable oder im besten Fall Arrays zu machen? 
Wie würde man das im Assambler machen? Ich denke da nicht an 
irgendwelche If oder Switch Konstrukte sondern eher an indirekte 
Adressierung.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Christian (Gast)

>habe folgendes Problem: Ich möchte bestimmte Pins eines ATMega169P aus
>verschiedenen Ports setzen. Die Entscheidung welche Pin/Port-Kombination
>verwendet werden soll, soll im Programm entschieden werden.

Dazu brauchst du Poiner auf volatile Adressen.

voaltile uint8_t *Mypointer;

Mypointer = &PORTD;  // ohne Gewähr

Die Dekodierung des Bits muss dan per Case oder Schiebeoperation 
erfolgen.

MFG
Falk

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo danke für die schnelle Antwort.
Also ich deklariere mir einen Pointer. Lade dann im Programm die Adresse 
des Portregisters in den Pointer. Wie kann ich nun den Inhalt dieses 
adressierten
Registers verändern ? Sorry falls das eigentlich selbsterklärend sein 
müsste stehe aber im Moment auf dem Schlauch ;)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian wrote:
> Hallo danke für die schnelle Antwort.
> Also ich deklariere mir einen Pointer. Lade dann im Programm die Adresse
> des Portregisters in den Pointer. Wie kann ich nun den Inhalt dieses
> adressierten
> Registers verändern ? Sorry falls das eigentlich selbsterklärend sein
> müsste stehe aber im Moment auf dem Schlauch ;)


Genauso wie mit jedem anderen Pointer auch:
Du dereferenzierst den Pointer:


  int   i;
  int  *pA;     // pa Ist ein Pointer

  pA = &i;      // jetzt zeigt der Pointer auf i

  *pA = 5;      // und jetzt wird der Speicherzelle auf die pA zeigt
                // der Wert i zugewiesen

  j = *pA;      // hole den Wert von der Speicherstelle auf die pA zeigt

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.