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.
@ 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
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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.