Frage GCC Tutorial Tastenentprellung

OP #628171
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.
> 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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.