Forum: Mikrocontroller und Digitale Elektronik Portansteuerung über Variable


von Christian (Gast)


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.

von Falk B. (falk)


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.

1
voaltile uint8_t *Mypointer;
2
3
Mypointer = &PORTD;  // ohne Gewähr

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

MFG
Falk

von Christian (Gast)


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 ;)

von Karl H. (kbuchegg)


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

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
Noch kein Account? Hier anmelden.