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