Forum: Compiler & IDEs Ports an Funktionen übergeben


von David (Gast)


Lesenswert?

Hallo,

ich möchte eine Funktion erstellen, die eine Tasterbetätigung 
detektiert. Dazu wollte ich der Funktion getKeyPressed() den 
entsprechenden PortPin der abgefragt werden soll, übergeben.

Ich weiß allerdings nicht wie. Der folgende Link hat mir nicht wirklich 
weitergeholfen.

http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_port_pass

von Karl H. (kbuchegg)


Lesenswert?

> Der folgende Link hat mir nicht wirklich
weitergeholfen.

und was daran ist jetzt unklar?

> Dazu wollte ich der Funktion getKeyPressed()

Diese Funktion kennt hier keiner.
Daher ist es auch ein wenig schwierig zu entscheiden, welche Technik 
angebracht ist.

von Martin T. (mthomas) (Moderator) Benutzerseite


Lesenswert?

Lässt dieser Abschnitt des hiesigen AVR GCC-Tutorials Fragen offen?:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#IO-Register_als_Parameter_und_Variablen

von Alexander L. (lippi2000)


Lesenswert?

Die Funktion würde wie folgt aussehen:
1
unsigned char getKeyPressed( volatile unsigned char *pPort, unsigned char pin)
2
{
3
     return (*pPort & (1<<pin)); // return TRUE if set otherwise FALSE
4
}
5
6
//Abfrage von PINC7
7
unsigned char test;
8
test = getKeyPressed( &PORTC, 7);

Ist aber reichlich ineffizient. Sollen nur wenige Pins eingelesen werden 
würde sich ein Makro besser eignen.
1
#define Is_PINC7_Set()     (PORTC & (1<<PINC7))
2
3
//Abfrage im Programm
4
unsigned char test;
5
test = Is_PINC7_Set();

Die ganzen Definitionen kann man in einem Header anlegen und sinnvoll 
benennen z.B. Is_Up_Key_Pressed(), dann ist das Programm auch gut 
nachvollziehbar.

von Felix P. (fixxl)


Lesenswert?

Zur Abfrage eines Eingangs sollte man nicht PORTC sondern PINC 
verwenden. Ansonsten fragt man nur ab, ob der interne Pullup-Widerstand 
aktiviert ist oder nicht.

von Peter D. (peda)


Lesenswert?

Alexander Liebhold schrieb:
> Ist aber reichlich ineffizient.

Das kannst aber laut sagen.

Da braucht ja eine komplette 4-fach Entprellung von 8 Tasten deutlich 
weniger Code.

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.