Forum: Mikrocontroller und Digitale Elektronik AVR: Zu manipulierende Register wärend der Laufzeit bestimmen


von Simon S. (-schumi-)


Lesenswert?

Hallo Zusammen,

bei AVRs (Atmega32 etc) kann man ja z.B. folgendes machen:
1
void setbits (char mask)
2
{
3
  PORTA |= mask;
4
}

Jetzt möchte ich aber nicht nur das Bit/die Maske frei wählen können, 
sondern auch das Register:
1
void setbits (??? register, char mask)
2
{
3
  ???
4
}

Weis jemand wie man das hinbekommen könnte? (Am besten ohne ein 
meterlanges "select case" :D )


Viele Grüße und vielen Dank schonmal
Simon

von header (Gast)


Lesenswert?

Schau mal in den Header wo PORTA etc. definiert wird.

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Wenn du ein wenig Assembler beherrschst, kannst du auf alle I/O-Register 
mit den Load- und Store-Befehlen (LD/ST) zugreifen.


Gruß
Jonathan

von Hmm (Gast)


Lesenswert?

Zu diesem Thema gibt es hier gefühlte Tausend Einträge. Suche bitte 
selbst danach.

von Horst (Gast)


Lesenswert?

ich denke irgendwie so:

void test( volatile uint8_t *reg )
{
 *reg = ...;
}

test( &PORTA );
test( &PORTB );
test( &PORTC );

von M92 (Gast)


Lesenswert?

Das geht in C mit Zeigern.
Steht auch in der offiziellen AVR-Libc Doku was drin: 
http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass

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.