Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Rasenmaehroboter fuer schwierige und grosse Gaerten im Test

(Verzweigungen im Bascom)
(Siehe auch)
 
(11 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Verzweigungen im Bascom ==
 
== Verzweigungen im Bascom ==
 +
Was den Programmablauf betrifft, zeigen weder irgendein Controller noch Bascom eine besonders phantasievolles Verhalten: Es wird mit der (Programmspeicher-) Adresse 0000 begonnen, und dann wird mit aufsteigender Adresse ein Befehl nach dem anderen ausgeführt. Wenn dieser Adresszähler überläuft, springt er wieder auf null, und alles geht von wieder vorne los.<br>
 +
Das ist natürlich nicht das, was man sich unter einem "Programm" vorstellt. Bei einem Programm werden diese oder jene Dinge geprüft, und je nachdem wird entschieden, ob dieses oder jenes zu tun ist. Das heißt, im Programmablauf sollen bedingte Verzweigungen stattfinden, was technisch soviel heißt, daß bei Bedarf in den oben genannten Adress-Zähler einfach die Adresse  reingeschrieben wird, wo es weitergehen soll. Das kann natürlich genausogut ein Sprung zurück sein, sprich, die letzten Befehle werden wiederholt. Der Fachmann bezeichnet letzteres als "Programmschleife" und der Über-Fachmann als "Iteration"
  
 +
Bei den Schleifen gibt es einen großen Unterschied:
 +
*Soll die Bedingung VOR den enthaltenen Anweisungen geprüft werden,
 +
*oder sollen die Anweisungen auf jeden Fall mal gemacht werden und erst danach entschieden werden, ob das Ganze vielleicht wiederholt werden soll.
  
'''Verzweigung:  Do-Loop'''
+
Zu dieser letzen Variante gehört der:
 +
=== Verzweigung:  Do-Loop===
  
 
'''Struktur:'''
 
'''Struktur:'''
Zeile 24: Zeile 30:
 
</pre>
 
</pre>
  
Die Schleife geht so lang zwischen Do und Loop, bis die Bedingung <br/>
+
Die Schleife geht so lang zwischen Do und Loop, bis die Bedingung
die hinter Until kommt, richtig ist (= True)<br/>
+
die hinter Until kommt, richtig ist (= True)
Die Schleife kann auch vorzeitig mit dem Befehl „ Exit Do“ verlassen werden.<br/>
+
Die Schleife kann auch vorzeitig mit dem Befehl „ Exit Do“ verlassen werden.  
Do-Loop Schleifen können ineinander geschachtelt werden.<br/>
+
Do-Loop Schleifen sind schneller als If-Then Schleifen<br/>
+
  
 +
Do-Loop Schleifen können ineinander geschachtelt werden.
  
  
  
----
 
  
'''Verzweigung:  While-Wend'''
+
----
 +
Hier erfolgt die Bedingungsprüfung vorher:
 +
=== Verzweigung:  While-Wend ===
  
 
'''Struktur:'''
 
'''Struktur:'''
Zeile 55: Zeile 61:
 
</pre>
 
</pre>
  
Wenn die Bedingung hinter ‘While’ richtig ist(=True), dann springe in die Schleife.<br/>
+
Wenn die Bedingung hinter ‘While’ richtig ist(=True), dann springe in die Schleife.  
„Wend“ springt dann wieder zu While, um dort wieder zu überprüfen, <br/>
+
„Wend“ springt dann wieder zu While, um dort wieder zu überprüfen,
ob die Bedingung True ist. <br/>
+
ob die Bedingung True ist.
Wenn sie True ist, dann Schleife wiederholen. <br/>
+
Wenn sie True ist, dann Schleife wiederholen.
Wenn nicht, dann setze Programm hinter „Wend“ fort.<br/>
+
Wenn nicht, dann setze Programm hinter „Wend“ fort.  
 
+
While-Wend Schleifen können ineinander verschachtelt werden.<br/>
+
Im Vergleich zur Do-Loop Schleife, wird die While-Wend Schleife, <br/>
+
erst ausgeführt, wenn die Bedingung richtig ist.<br/>
+
 
+
  
 +
While-Wend Schleifen können ineinander verschachtelt werden.
 +
Im Vergleich zur Do-Loop Schleife wird die While-Wend Schleife erst ausgeführt, wenn die Bedingung richtig ist.
  
  
 
----
 
----
 
+
Die klassische Entweder-oder-Konstruktion:
'''Verzweigung:  If-Then'''
+
=== Verzweigung:  If-Then-Else ===
  
 
'''Struktur:'''
 
'''Struktur:'''
Zeile 87: Zeile 90:
 
</pre>
 
</pre>
  
Wenn A=10 dann weise A den Wert 100 zu.<br/>
+
Wenn A=10 dann weise A den Wert 100 zu.  
Wenn die If-Then Anweisung in eine Zeile geht, dann kann man das so wie <br/>
+
Wenn die If-Then Anweisung in eine Zeile geht, dann kann man das so wie  
obiges Beispiel schreiben.<br/>
+
obiges Beispiel schreiben.  
Mann kann auch hinter dem Then, mehrere Anweisungen schreiben.<br/>
+
Mann kann auch hinter dem Then, mehrere Anweisungen schreiben.  
Die müssen aber untereinander durch Doppelpunkt getrennt werden <br/>
+
Die müssen aber untereinander durch Doppelpunkt getrennt werden
und noch immer in eine Zeile passen.<br/>
+
und noch immer in eine Zeile passen.  
  
  
Zeile 106: Zeile 109:
 
</pre>
 
</pre>
  
Hier kann man dann unter “Then”, mehrere Anweisung schreiben.<br/>
+
Hier kann man dann unter “Then”, mehrere Anweisung schreiben.  
Muss diese aber dann mit „End if“ abschließen.<br/>
+
Muss diese aber dann mit „End if“ abschließen.  
(Das einrücken dient nur zum besserem lesen der der Schleife, und trägt nichts zur Funktion bei.)<br/>
+
(Das einrücken dient nur zum besserem lesen der Schleife, und trägt nichts zur Funktion bei.)  
Ein IF-Block, ist übersichtlicher und leichter lesbar.<br/>
+
Ein IF-Block, ist übersichtlicher und leichter lesbar.
 +
 
 +
----
 +
Oft sind mehr als zwei Möglichkeiten zu bearbeiten
 +
=== Verzweigung:  select ===
 +
 
 +
'''Struktur:'''
 +
<pre>
 +
SELECT CASE Variable
 +
  CASE wert1:
 +
  CASE wert2:
 +
  CASE ELSE
 +
END SELECT
 +
</pre>
 +
 
 +
Ist eine numerische Variable mit Inhalt [ 0 - nn] zu prüfen, gibt es auch
 +
=== Verzweigung:  ON ===
 +
'''Struktur:'''
 +
<pre>
 +
ON Variable GOTO Label-0, Label-2, ...... Label-n
 +
End if
 +
</pre>
 +
 
 +
----
 +
Es gibt natürlich auch Verzweigungen, die nicht an eine Bedingung geknüpft sind
 +
=== Verzweigung:  GOTO ===
 +
'''Struktur:'''
 +
<pre>
 +
GOTO Label-0
 +
</pre>
 +
 
 +
----
 +
Und es können auch Befehle gewissermaßen "eingeschoben" werden
 +
=== Verzweigung:  GOSUB/RETURN ===
 +
'''Struktur:'''
 +
<pre>
 +
...Anweisung
 +
GOSUB Label-0
 +
...Anweisung
 +
 
 +
Label-0:
 +
    ...Anweisung
 +
    RETURN
 +
</pre>
  
 +
==Autor==
 +
*  [[Benutzer:Roberto|Roberto]]
 +
*  [[Benutzer:PicNick|Ergänzungen:PicNick]]
  
 +
==Siehe auch==
 +
* [[Bascom]]
  
  
--[[Benutzer:Roberto|Roberto]] 23:52, 13. Jan 2006 (CET) (www.pukshofer.com)
+
[[Kategorie:Robotikeinstieg]]
 +
[[Kategorie:Microcontroller]]
 +
[[Kategorie:Software]]
 +
[[Kategorie:Praxis]]
 +
[[Kategorie:Quellcode Bascom]]

Aktuelle Version vom 22. Januar 2006, 16:57 Uhr

Verzweigungen im Bascom

Was den Programmablauf betrifft, zeigen weder irgendein Controller noch Bascom eine besonders phantasievolles Verhalten: Es wird mit der (Programmspeicher-) Adresse 0000 begonnen, und dann wird mit aufsteigender Adresse ein Befehl nach dem anderen ausgeführt. Wenn dieser Adresszähler überläuft, springt er wieder auf null, und alles geht von wieder vorne los.
Das ist natürlich nicht das, was man sich unter einem "Programm" vorstellt. Bei einem Programm werden diese oder jene Dinge geprüft, und je nachdem wird entschieden, ob dieses oder jenes zu tun ist. Das heißt, im Programmablauf sollen bedingte Verzweigungen stattfinden, was technisch soviel heißt, daß bei Bedarf in den oben genannten Adress-Zähler einfach die Adresse reingeschrieben wird, wo es weitergehen soll. Das kann natürlich genausogut ein Sprung zurück sein, sprich, die letzten Befehle werden wiederholt. Der Fachmann bezeichnet letzteres als "Programmschleife" und der Über-Fachmann als "Iteration"

Bei den Schleifen gibt es einen großen Unterschied:

  • Soll die Bedingung VOR den enthaltenen Anweisungen geprüft werden,
  • oder sollen die Anweisungen auf jeden Fall mal gemacht werden und erst danach entschieden werden, ob das Ganze vielleicht wiederholt werden soll.

Zu dieser letzen Variante gehört der:

Verzweigung: Do-Loop

Struktur:

 Do

   ..Anweisung

 Loop [Until Bedingung]


Beispiel:

Do

 Print A                    ‘Gib Variable A aus
 Incr A                     ‘ Erhöhe Variable A um 1

Loop Until A=10            ‘ Wenn A = 10 , verlasse Schleife

Die Schleife geht so lang zwischen Do und Loop, bis die Bedingung die hinter Until kommt, richtig ist (= True). Die Schleife kann auch vorzeitig mit dem Befehl „ Exit Do“ verlassen werden.

Do-Loop Schleifen können ineinander geschachtelt werden.




Hier erfolgt die Bedingungsprüfung vorher:

Verzweigung: While-Wend

Struktur:

While  Bedingung

   ..Anweisung

Wend


Beispiel:

While  A < 10           ‘ Wenn A kleiner als 10 ist, dann springe in die Schleife
  Print A               ‘ Variable A ausgeben
  Incr  A               ‘ Variable A um 1 erhöen
Wend

Wenn die Bedingung hinter ‘While’ richtig ist(=True), dann springe in die Schleife. „Wend“ springt dann wieder zu While, um dort wieder zu überprüfen, ob die Bedingung True ist. Wenn sie True ist, dann Schleife wiederholen. Wenn nicht, dann setze Programm hinter „Wend“ fort.

While-Wend Schleifen können ineinander verschachtelt werden. Im Vergleich zur Do-Loop Schleife wird die While-Wend Schleife erst ausgeführt, wenn die Bedingung richtig ist.



Die klassische Entweder-oder-Konstruktion:

Verzweigung: If-Then-Else

Struktur:

If  Bedingung Then
  [Elseif  Bedingung  Then]
  [Else]
End if


Einfachstes Beispiel:

If  A= 10 Then  A=100

Wenn A=10 dann weise A den Wert 100 zu. Wenn die If-Then Anweisung in eine Zeile geht, dann kann man das so wie obiges Beispiel schreiben. Mann kann auch hinter dem Then, mehrere Anweisungen schreiben. Die müssen aber untereinander durch Doppelpunkt getrennt werden und noch immer in eine Zeile passen.


Für mehrere Anweisung schreibt man aber besser einen IF-Block:

IF-Block Beispiel:

If  A= 10 Then 
  A = 100
  Print A
  Print A
End if

Hier kann man dann unter “Then”, mehrere Anweisung schreiben. Muss diese aber dann mit „End if“ abschließen. (Das einrücken dient nur zum besserem lesen der Schleife, und trägt nichts zur Funktion bei.) Ein IF-Block, ist übersichtlicher und leichter lesbar.


Oft sind mehr als zwei Möglichkeiten zu bearbeiten

Verzweigung: select

Struktur:

SELECT CASE Variable
  CASE wert1:
  CASE wert2:
  CASE ELSE
END SELECT

Ist eine numerische Variable mit Inhalt [ 0 - nn] zu prüfen, gibt es auch

Verzweigung: ON

Struktur:

ON Variable GOTO Label-0, Label-2, ...... Label-n
End if

Es gibt natürlich auch Verzweigungen, die nicht an eine Bedingung geknüpft sind

Verzweigung: GOTO

Struktur:

GOTO Label-0

Und es können auch Befehle gewissermaßen "eingeschoben" werden

Verzweigung: GOSUB/RETURN

Struktur:

...Anweisung
GOSUB Label-0
...Anweisung

Label-0:
    ...Anweisung
    RETURN 

Autor

Siehe auch


LiFePO4 Speicher Test