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?
"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)
Computer sind Maschinen, mit denen man Probleme lösen kann, die es ohne sie nicht gäbe.
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
nein PINA ist nicht 16 bit breit. Das ist ein Effekt von if zusammen mit ~ und der C-Spezifikation.
Computer sind Maschinen, mit denen man Probleme lösen kann, die es ohne sie nicht gäbe.
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?
Lesezeichen