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
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?
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
"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)
Disclaimer: none. Sue me.
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.
Disclaimer: none. Sue me.
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