Hallo, wie kann ich einen SFR (PORTX, DDRX, PINX) als Parameter an eine Funktion übergeben? Programmiersprache: C Mikrocontroller: ATMega32 Toolchain: AVR Studio/WinAVR ~tobi
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) |
Was genau hast du denn vor? Ich seh den Sinn deines Makros nicht und weiß auch nicht, was die Frage sein soll.
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.
Reicht da kein kleines Makro? #define is_bit_set(port, pin) (_SFR_BYTE(port) & _BV(pin))
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*
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.