Frage GCC Tutorial Tastenentprellung

OP #628171
Lesenswert?
• ▲
▼
hi,
ich habe auch mal ne frage zum Tut. Und zwar hänge ich an der stelle:


if ( ! (*port & (1 << pin)) )

hier geht der aktuelle zustand des Pins doch garnicht ein oder? was 
heist die Zeile ausgeschrieben. überprüft es durch das "!" ob ein wert 
ungleich 0 geliefert wird? wenn es so wäre könnte man ja höcgstens auf 
Änderungen am Pin überprüfen. Ich versteh nur Bahnhof.
#628182
Lesenswert?
• ▲
▼
> if ( ! (*port & (1 << pin)) )

heißt:

   wenn das Port-Pin pin 0 ist, dann...

(1) *port holt alle Bits aus dem Port

(2) (1 << pin) ergibt eine 1 an der Position pin

*port & (1 << pin) gibt die bitweise Undverknüpfung von (1) mit (2), 
d.h. einen Wert != 0, wenn der pin eine 1 sieht

! negiert alles logisch: 0, wenn das Argument != 0 ist; 1, wenn es null 
ist.
OP #628199
Lesenswert?
• ▲
▼
ja das ist mir nun auch klar...aber womit ist die bedingung in dem 
befehhla ausgedrückt?

Wenn der port 1 ist also die taste nicht gedrückt ergibt sich ja das 
Schema:


1 and 1 -> 1 -> ! --> 0

und wenn sie Gedrückt ist:

0 and 1 -> 0 -> ! --> 1


wo steht jetzt das wenn das Ergebnis 1 ist fortgefahren wird oder ist 
das in der If schon enthalten, das eine eins im Ergebnis automatisch als 
wahr anerkannt wird.? Und somit eine Bedingung weg fällt?
OP #628205
Lesenswert?
• ▲
▼
naja ist ja eher ne Algemeine Frage. ich machs am besten nochmal 
verständlicher:



if (1)

{

//bedingung erfüllt --> diese stelle wird als nächstes ausgeführt

}


if (0)

{

//bedingung nicht erfüllt --> diese Stelle wird nie erreicht

}


ist das so korrekt?
OP #628209
Lesenswert?
• ▲
▼
ich glub wir reden aneinander vorbei. Mit der Bedingung ist mir ja klar 
nur zählt die Bedingung als war, wenn eine 1 zurück gegeben wird oder 
muss das extra noch definiert werden?


€dit:

ok dann haben wir's doch ^^


ich bin die ganze Zeit davon ausgegangen, das das extra noch festgelegt 
werden muss. Vielen Dank für deine Hilfe!
OP #628228
Lesenswert?
• ▲
▼
noch ne frage:

hier erstmal der Link zum Tut:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#.28Tasten-.29Entprellung


was bringen return 0 bzw. 1


und wie funktioniert das überhaupt mit dem Funktions aufruf...


if (debounce(&PINB, PB0))             /* Falls Taster an PIN PB0 
gedrueckt..    */

hier werden ja die Aktuellen Werte bzw. die Portnamen an die Funkton 
übergeben.


und was macht die zeile:

inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)

?

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.