Forum: Mikrocontroller und Digitale Elektronik [AVR-C] Port an Funktion übergeben


von tobi (Gast)


Lesenswert?

Hallo,

wie kann ich einen SFR (PORTX, DDRX, PINX) als Parameter an eine 
Funktion übergeben?

Programmiersprache: C
Mikrocontroller: ATMega32
Toolchain: AVR Studio/WinAVR

~tobi

von Rene H. (Gast)


Lesenswert?


von tobi (Gast)


Lesenswert?

Danke, genau das hab ich gesucht.

von Phillip H. (philharmony)


Lesenswert?

Funktioniert das auch in Gegenrichtung, wenn ich verschiedene Ports 
(also PinA, PinB etc) auslesen möchte?
1
#define get_pins_macro(port,pin) ((port << pin) | 0x80 )  //also bis zum gewünschten pin schieben, den rest maskieren
2
3
4
result = get_pins_macro(PinA, PA2)

von tobi (Gast)


Lesenswert?

Was genau hast du denn vor? Ich seh den Sinn deines Makros nicht und 
weiß auch nicht, was die Frage sein soll.

von Phillip H. (philharmony)


Lesenswert?

Ich möchte ab und an den Zustand einzelner Pins an verschiedenen Ports 
abfragen. Dazu EINE Funktion schreiben die ich dann jeweils mit den 
Parametern Port und Pin_nummer aufrufe und die mir als ergebnis "1" oder 
"0" zurückgibt.

von tobi (Gast)


Lesenswert?

Reicht da kein kleines Makro?

#define is_bit_set(port, pin) (_SFR_BYTE(port) & _BV(pin))

von Phillip H. (philharmony)


Lesenswert?

die beiden FUnktionen kannte ich noch nicht. Verweise ich mit SFR_BYTE 
direkt auf die einzelnen "Geräte" im Controller? _BV gibt mir dann das 
gewünschte Bit in dem vorangegangenen Byte aus?
Gibt das Makro dann eine 1 bzw 0 zurück?
Man je mehr ich versuche meine Idee zu verwirklichen um so mehr lerne 
cih was ich alles noch nicht weiß...*heul*

von tobi (Gast)


Lesenswert?


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.