kann mir jemand ich kurzform bitte folgende sachen erklären: 1. Frage: DDRC = (1 << DDC2) | (1 << DDC3) // portc pin 2 und 3 als eingang definieren WIE DEFINIERE ICH DIE ALS AUSGANG (DDRC = (0 << DDC2) | (0 << DDC3)) 2. Frage: wie funktioniert eine while schleife mfg helli
Ich will ja nicht unfair erscheinen, aber hast du mal ins Tutorial geschaut ? Wenn du das durcharbeitest, kannst du alle diese Fragen selbst beantworten.
Frage 1 ist Quark, eine 1 im DDRx-Register bedeutet immer, daß der jeweilige Pin als AUSGANG geschaltet ist, 0 bedeutet Eingang.
zu 1) Nein. So geht das nicht. Der springende Punkt ist, dass eine 1 an einer Bit- position den entsprechenden Pin als Eingang beschaltet und eine 0 dementsprechend als Ausgang. Alles was du nicht explizit mit 1 setzt ist sowieso automatisch 0. d.h. in DDRC = (1 << DDC2) | (1 << DDC3) wird das Bit #2 und Bit #3 auf 1 gesetzt. Alle anderen Bits sind damit 0 -> #2 und #3 sind Eingang, alle anderen sind Ausgang. 2) da klinke ich mich jetzt aus. Das ist C Grundlagenwissen das in jedem noch so schlechtem Lehrbuch enthalten ist. Ohne dieses Wissen solltest du nicht versuchen einen µC zu programmieren. Das kann nur schief gehen. Versuch deine ersten Schritte in C besser auf einem PC. Da gibt es viel bessere Möglichkeiten rauszufinden warum ein Programm nicht funktioniert und du musst dich auch am Anfang nicht um die absoluten low-level Dinge kümmern um die du bei einem µC nicht herumkommst. Zur Erklärung: Deine Frage ist äquivalent zu: Ich möchte an meinem Motor dìe Kolberückzugsfeder wechseln. Wie rum muss ich meinen Schraubenzieher halten?
> 1 an einer Bit-position den entsprechenden Pin als Eingang
Aeh. Anders rum
0 Eingang
1 Ausgang
Mich hat die Frage nach dem 'while' fertig gemacht.
ok thx zu 1) hab ich eigentlich schon gewusst, aber vor verwirrung nicht mehr drangedacht zu 2) ok, werd mal schauen
Also nochmal eine Zusammenfassung: 1. Eine "1" im DDRx bedeutet Ausgang, eine 0 bedeutet eingang. Daher hast du das oben verdreht. 2. Eine while schleife wird so lange durchlaufen bis die Bedingung in der Klammer nicht mehr erfüllt ist, oder sie durch ein "break;" verlassen wird. Bsp:
1 | a = 0; |
2 | b = 5; |
3 | while(a < b){ |
4 | a++; |
5 | }
|
Die Schleife wird also nach 5 Durchläufen beendet bzw. sie wird erst gar nicht mehr "betreten". Das könnte man auch so lösen:
1 | a = 0; |
2 | b = 5; |
3 | while(1){ |
4 | a++; |
5 | if(a == 4) break; |
6 | }
|
Natürlich machen diese Konstruke eher wenig sinn, bei sowas ist eine For-Schleife angebrachter.
Würde man "goto" verwenden, wäre es böse.
"break" ist schon in Ordung.
>Muss natürlich if(a == 5) heissen.
nee
if(a == b)
goto kann auch sinnvoll sein, wenn man mehrere verschachtelte Schleifen hat und aus der inneren heraus komplett aus der Schachtel ausbrechen will.
Dass kann man auch sauberer machen, indem man ein "Schleifenverlassflag" setzt. Man weiß in dem Fall ja nicht, welcher "Müll" noch auf dem Stack liegt...
> das könnte man auch so lösen
Im konkreten Fall macht's keinen Unterschied. Aber im
allgemeinen schon. Daher eher so:
a = 0;
b = 5;
while(1) {
if( a > b )
break;
a++;
}
Die Abfrage muss vor dem 'Schleifenrumpf' erfolgen, nicht
hinterher.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.