Forum: Mikrocontroller und Digitale Elektronik Wie kann man ambesten eine Zählschleife verlassen?


von michi (Gast)


Lesenswert?

Wie kann man ambesten eine Zählschleife verlassen?

Ich möchte mit der Zählschleife eine Zeit zählen einmal durchlaufen ist 
1ms und wenn ich einen Taster betätige soll die schleife verlassen 
werden und der Wert wird ausgegeben.

1
while(1)
2
{
3
zaehler = 0;
4
5
6
for (i=1;i<=1000000;i++)
7
{
8
_delay_ms(1);
9
zaehler++;
10
}
11
{
12
13
14
itoa (zaehler,c_zaeler,10);   // Umwandlung um Variabel zaehler auszugeben
15
lcd_clear();     
16
lcd_string (c_zaeler);

von ccc (Gast)


Lesenswert?

Zaehlschleifen zaehlen. Falls du was anderes will, so mach eine andere 
Schleife.

von Karl H. (kbuchegg)


Lesenswert?

Da das bereits eine 'kompliziertere' Konstruktion ist, hat sie es 
sicherlich verdient, dass man ihr dafür eine eigene Funktion spendiert
1
long WaitMax1()
2
{
3
  long Zaehler = 0;
4
5
  while( Zaehler < 1000000 ) {
6
    if( Tastendruck )
7
      return Zaehler;
8
 
9
    delay_ms( 1 );
10
    Zaehler++;
11
  }
12
13
  return Zaehler;
14
}

Für Tastendruck musst du natürlich noch deinen Ausdruck zur Abfrage der 
Tasten einsetzen.

von Helmut L. (helmi1)


Lesenswert?

Eine "for" Schleife kannst du mit "break" verlassen

Also innerhalb der "for" schleife:

   if(Taste) break;

dann springt das Programm aus der "for" Schleife raus.

Gruss Helmi

von Karl H. (kbuchegg)


Lesenswert?

Und du musst ein klein wenig auf deine Datentypen aufpassen.

In deinem Beispiel muss zaehler ein long sein, weil sein Maximalwert 
1000000 sein kann und das passt nicht mehr in einen int.

Wenn zaehler aber ein long ist, dann kannst du nicht itoa benutzen, weil 
itoa ja einen int haben will. Für long gibt es ltoa

von Helmut L. (helmi1)


Lesenswert?

Der Type "int" ist nicht spezifiziert. Der kann auf einer 32-Bit 
Maschine auch 32 Bit lang sein.

Gruss Helmi

von juppi (Gast)


Lesenswert?

mein senf dazu

if( Tastendruck )
      Zaehler = 1000000

ist gut wenn man die Abbruchbedingung nicht kennt,
sollte man aber vermeiden.

Lang isses her
;-)

von Karl H. (kbuchegg)


Lesenswert?

Helmut Lenzen wrote:
> Der Type "int" ist nicht spezifiziert. Der kann auf einer 32-Bit
> Maschine auch 32 Bit lang sein.

Prinzipiell richtig.
Allerdings ist 'michi' schon aus einem anderen Thread bekannt und ich 
gehe jede Wette ein, dass er nicht auf einem 32 Bit System arbeitet, 
sondern auf einem AVR :-)

(Und ich wollte ihn jetzt nicht auch noch mit int/long und wie das im 
Allgmeinen ist noch mehr verwirren)

von Helmut L. (helmi1)


Lesenswert?

@Karl heinz Buchegger

Ok dann hast du einen Informationsvorsprung. Das wusste ich nicht.
Da ich die letzten Tage auf ARM Controller programmiere muss man halt in 
der Richtung aufpassen.

Grusss Helmi

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
Noch kein Account? Hier anmelden.