www.mikrocontroller.net

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


Autor: michi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

while(1)
{
zaehler = 0;


for (i=1;i<=1000000;i++)
{
_delay_ms(1);
zaehler++;
}
{


itoa (zaehler,c_zaeler,10);   // Umwandlung um Variabel zaehler auszugeben
lcd_clear();     
lcd_string (c_zaeler);


Autor: ccc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zaehlschleifen zaehlen. Falls du was anderes will, so mach eine andere 
Schleife.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da das bereits eine 'kompliziertere' Konstruktion ist, hat sie es 
sicherlich verdient, dass man ihr dafür eine eigene Funktion spendiert
long WaitMax1()
{
  long Zaehler = 0;

  while( Zaehler < 1000000 ) {
    if( Tastendruck )
      return Zaehler;
 
    delay_ms( 1 );
    Zaehler++;
  }

  return Zaehler;
}

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

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Helmut Lenzen (helmi1)
Datum:

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

Gruss Helmi

Autor: juppi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mein senf dazu

if( Tastendruck )
      Zaehler = 1000000

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

Lang isses her
;-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.