mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hoch UND wieder runterzählen in Bascom? Schleife


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

kurze Frage.

Wie kann ich es programmieren, und zwar in Bascom, dass zum Beispiel 
eine Zahl von 1 bis 5 hochzählt und dann wieder runterzählt bis 1? und 
dass natürlich immer wieder, also:

123454321234543212345......

Könntet ihr mir da vielleicht kurz helfen?

Vielen Dank
Lg
Peter

Autor: abraxas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unendliche schleife, statusvariable und 2 ifabfragen
unedliche schleife, darin eine hochzähl- und eine runterzählschleife
...

Autor: ozo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Bascom zu kennen:
Man nehme 3 Schleifen, eine äußere Endlosschleife und zwei innere.
while(true) {
  int i = 0;
  for(; i < MAX; i++) {mach was mit i}
  for(; i > 0; i--) {mach was mit i}
}

Autor: slowslow (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
zählrichtung umkehren bei 5 und bei 1 ?

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,


Versuch' mal das:

for i = 5 to 1 step -1

Autor: RazzleDazzle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
slowslow schrieb:
> zählrichtung umkehren bei 5 und bei 1 ?

Sieht dann so aus:
Dim Zahl As Byte
Dim Inkrement As Byte

Zahl = 0
Inkrement = 1


Do
   Zahl = Zahl + Inkrement
   If Zahl = 1 And Inkrement = 255 Then
      Inkrement = 1
   Elseif Zahl = 5 And Inkrement = 1 Then
      Inkrement = 255
   End If
   Print Zahl
Loop

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank an euch,

ich werde das später gleich mal ausprobieren!

Danke

Lg Peter

Autor: A.Drei (allu) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch eine Möglichket für 123454321234543212345......

Dim Plus_minus As Integer
Dim Zahl As Integer

Plus_minus = 1
Zahl = 1

Do
      Print Zahl

      If Zahl = 5 Then Plus_minus = -1
      If Zahl = 1 Then Plus_minus = 1
      Zahl = Zahl + Plus_minus
Loop

Gruß  allu

Autor: RazzleDazzle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Lösungsvorschlag von A.Drei im vorigen Post ist von der Logik her 
gesehen recht effektiv. Ich möchte aber trotzdem noch auf eine 
Optimierung hinweisen:

A.Drei (allu) schrieb:
> If Zahl = 5 Then Plus_minus = -1

Weil die Variable "Plus_minus" einen negativen Wert annimmt, hat A.Drei 
sie folgerichtig als Integer definiert. Das hat aber zur Folge, das der 
AVR hier Integer-Arithmetik betreiben muss.

In meinem Post vorher habe ich die Variable "Inkrement" lediglich als 
Bytevariable definiert. Somit muss auch nur Bytearithmetik betrieben 
werden.
Der Wert 255 ist das Zweierkomplement von -1. Und obwohl Bascom keine 
vorzeichenbehaftete Bytevariable kennt, so gelten doch (zumindest für 
Strichrechnung) deren Rechengesetze.

Der weiter optimierte Code von A.Drei würde dann so aussehen:
Dim Plus_minus As Byte
Dim Zahl As Byte

Plus_minus = 1
Zahl = 1

Do
      Print Zahl

      If Zahl = 5 Then Plus_minus = 255
      If Zahl = 1 Then Plus_minus = 1
      Zahl = Zahl + Plus_minus
Loop

Ich hab das im Simulator durchgespielt. Macht 22/24 Zyklen für die 
Bytevariante und 41/47 Zyklen für die Integervariante. Naja, wer´s 
braucht.

Autor: A.Drei (allu) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@RazzleDazzle, schöne Optimierung, gefällt mir.    Gruß  allu

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.