Hallo, also irgendwie steig ich nicht dahinter.... Ich würde gern ein Blinklich programmieren doch irgendwie sind meine Lichter immer beide an. So sieht mein quellcode aus: sbit led0=0x80; sbit led1=0x81; main (void) { unsigned int x,y; for (y=0; y<100000;y++) { led0=0; led1=1; } for (x=0; x<100000;x++) { led0=1; led1=0; } } Es sollte ja also immer von 0 bis gezählt werden und solange die LED einegschaltet sein. Wenn die For schleife beendet ist, gehts zur nächsten, bei der das gleiche nur mit anderer LED passiert. Es ist ausserdem immer eine LED ausgeschaltet. Also sollten die LEDs Wechselweise hin und her springen. Stattdessen bekomme ich beide Lampen eingeschaltet. Auch bei utopisch hohen werten für die beiden Variablen kein unterschied. Habt ihr einen Tip?
So, ich habe jetzt den unsigned int gegen unsigned long integer getauscht und den wert auf 4 000 000 000 gesetzt. Funz immer noch nicht
Achso, sorry, es ist bereits eine Schleife drumherum. Hatte ich vergessen mit einzutragen!
Aaah es funktioniert :) Es lag am Datentyp und an der Zähllänger. Ich habe nun einfach 2 For schleifen ineinander geschachtelt, sodass 6500 bis 600 gezählt wird. Also insgesamt 4 For schleifen um abwechselnd leds zum leuchten zu bringen. Nun muss ich nurnoch die Zählzeit anpassen um einen schönen Wechsel zu haben. Danke für die Hilfe!
Oliver D. wrote: > Nun muss ich nurnoch die Zählzeit anpassen um einen schönen Wechsel zu > haben. Man kann auch nen Timer nehmen, dann muß man nicht planlos rumprobieren, sondern kann alle Zeiten auf den Takt genau ausrechnen. Peter P.S.: Genau dafür sind die Timer da.
Ich weiß, aber leider verstehe ich nicht genaue wie man die Timer verwendet... Im Datenblatt meines AT89S52 steht ne Tabelle mit adressen der SFRs, leider raffe ich nicht was ich genau brauche für den Timer, auch wenn ich hier schon mehrere Beispiele dazu hatte.
Thomas schrieb: > braucht man dazu überhaupt einen Timer? > Oder geht das auch ohne? Sachen wir mal so: Wenn das Ziel nur darin besteht ein paar LED zum blinken zu bringen, dann gehts auch ohne. Übrigens: diese Zählschleifen sind meistens Murks. Wann immer möglich, wird der Optimizer des Compilers sein Pflicht tun und sie einfach rauswerfen :-) Im WinAVR gibt es Wartefunktionen: _delay_ms( zeit ) Damit macht man Warteschleifen, wenn man denn unbedingt keinen Timer benutzen will. Aber Hand aufs Herz: Wie oft hat man den Fall, dass ein µC wirklich nur ein paar LED blinken lassen soll und sonst nichts. In allen anderen Fällen ist der Warteschleifenansatz meistens nicht zu gebrauchen.
also benutzt man dieses delay nur für Zeitschleifen. Kann man diese Schleifen auch in einem Unterprogramm verknüpfen? mfg Thomas
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.