PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abfragen aller 8 Taster am STK500, wie mach ich das?



Edi
09.11.2006, 10:42
Hallo,
versuche gerade ein Programm zu schreiben, dass eine Übertragung zum PC startet, wenn eine der 8 Taster am STK500 gedrückt wurde. Bis jetzt habe ich immer nur einzelne Taster abgefragt, z.B. if(!bit_is_set(PINA,PINA0)), wie mach ich das elegant für den ganzen PORTA?

Gibt es eigentlich irgendwo eine gute Beschreibung der ganzen Befehle, von WinAVR, wie z.B. bit_is_set usw?

askazo
09.11.2006, 12:46
Ganz einfach:
if (PINA != 0xFF) oder noch eleganter
if (~PINA)

Eine Beschreibung der Befehle der libc findest Du in Deinem WinAVR-Verzeichnis unter \doc\avr-libc\avr-libc-user-manual-1.4.4.pdf

Gruß,
askazo

SprinterSB
09.11.2006, 14:47
"if (~PINA)" ist zwar elegant, wird aber nicht funktionieren, denn
-- das liest PINA
-- expandiert PINA zu 16 bit (PINA ist unsigned char)
-- mach das 1-er komplement darauf (bildet 0xff also auf 0xff00 ab)
-- guckt nach, ob das 0 ist oder nicht

Das ist was anderes als if (~(signed char) PINA)

askazo
09.11.2006, 15:35
Oha, wusste nicht, dass PINA 16 bit breit ist.
Wieder was gelernt :)

Mögliche Lösungen sind also:

if (PINA != 0xFF) oder
if (~(signed char)PINA) oder
if (~PINA & 0xFF)

Gruß,
askazo

SprinterSB
09.11.2006, 15:51
nein PINA ist nicht 16 bit breit. Das ist ein Effekt von if zusammen mit ~ und der C-Spezifikation.

Edi
09.11.2006, 16:15
Hi,
danke erstmal!

Gibt es auch noch eineleichte Möglichkeit den Taster zu entprellen und um zu testen ob man länger auf den Knopf drückt, damit nicht mit einem langen Druck 100 mal übertragen wird?