Wie kann man ambesten eine Zählschleife verlassen?

Gast #1142451
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);
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.
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
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)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 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.