erstellt  10.05.2019
Kleine Programmier Kniffe
Im Allgemeinen lässt man während eine Programmschleife läuft eine Led blinken, dies Signalisiert zum einen ob meine Schaltung mit Spannung versorgt ist
beziehungsweise ob sie eingeschaltet ist, anderseits erkennt man an dem blinken ob meine Programmschleife läuft, oder wenn die Led dauerhaft aus oder an bleibt
ob mein Programm hängen geblieben ist.
Die einfachste Form eine Led zum blinken zu bringen besteht darin sie "An" zu schalten, dann sie eine gewisse Zeit an zu lassen um sie dann wieder "Aus" zu schalten.
Beispiel 1
do
Schleifenanfang
Portd.1=1
Led einschalten
waitms 500
Einschaltdauer festlegen
Portd.1=0
Led aus schalten
waitms 500
Zeit in der die Led aus ist
loop

 
Diese Methode funktioniert ganz gut, hat aber den Nachteil das die Programmschleife dadurch stark gebremst wird.
Insgesamt verlängert sie die Durchlaufzeit der Programmschleife auf unter 1 Sekunde.
Wenn nur eine Led blinken soll ist es in Ordnung, wenn das Programm aber auch andere Funktionen ausüben soll kommen wir schnell an die Grenzen.
Wenn zum Beispiel innerhalb des Programm abgefragt werden soll ob eine Taste gedrückt ist, muss man unter Umständen die Taste mindestens 1 Sekunde lang festhalten,
damit dieses Ereignis vom Programm erfasst werden kann.

Etwas schneller läuft die Schleife bei folgenden Programm:
Beispiel 2
do
Schleifenanfang
Toggle Portd.1=1
Zustand der Led wechseln
waitms 500
Einschaltdauer festlegen
loop


Hier beträgt die Laufzeit des Blinken nur noch eine halbe Sekunde.

Und es geht noch viel  schneller.
Hier wird erst nach jedem hundertsten Durchlauf der Schleife der Zustand der Led gewechselt.

Beispiel 3
dim E as Byte
Variable für eine Schleife
do
Schleifenanfang


E=E+1
Variablenwert in jeder Schleife um, eins erhöhen
if E > 100 then Toggle Portd.1
Wenn die Schliefe den Wert von 100 erreicht den Zustand der Led wechseln
if E > 100 then E=0
Variablenwert wieder auf Null setzen
loop

 
Tastengeschwindigkeit
Oft wird über eine Taste einen Wert eingegeben, das kann je nach Eingabewert dazu führen das die entsprechende Taste relativ lange gedrückt werden muss.
Um diese Eingabe nicht so langwierig zu gestallten, lässt man das "Auf" oder "Ab" zählen  über mehrer Geschwindigkeiten laufen.
So das man schnell hohe Differenzen  eingeben kann, aber auch die Werte bei kleine Abstände noch differenzieren kann.
Dazu lässt man die Tasten abfrage im Beispiel von zwei Tasten ( auf und ab)in einer separaten Routine laufen .
do
Schleifenanfang
If Pind.1 = 0 Then D = D + 1 Taste "Auf" addiert bei jeden Schleifendurchgang  den Wert von 1 zur Variable D
If Pind.3 = 0 Then D = D -1 Taste "Ab" subtrahiert bei jeden Schleifendurchgang  den Wert von 1 zur Variable D
If Pind.1 = 0 Or Pind.3 = 0 Then Dd = Dd + 1 Wenn eine der Beiden Tasten gedrückt wird , wird bei jedern Schleifendurchgang eine zusätzliche Variable hochgezählt
If Pind.1 = 1 And Pind.3 = 1 Then Dd = 0 Wenn keine der Tasten gedrückt ist , wird die Variable Dd wieder auf Null gesetzt
If Dd < 10 Then Ddd = 500 Wenn Variable DD kleiner als 10 dann beleg die Pausenvariable DDD mit dem Wert 500
If Dd > 10 Then Ddd = 100 Wenn Variable DD größer  als 10 dann beleg die Pausenvariable DDD mit dem Wert 100
If Dd > 50 Then Ddd = 50 Wenn Variable DD größer  als 50 dann beleg die Pausenvariable DDD mit dem Wert 50
If Dd > 60 Then Ddd = 1 Wenn Variable DD größer als 60 dann beleg die Pausenvariable DDD mit dem Wert 1
Waitms Ddd Pausenzeit wird deer Variablen DDD entnommen
If Pind.1 = 0 And Pind.3 = 0 Then Exit Do
Durch drücken beider Tasten gleichzeitig kann die Schleife wieder verlassen werden
Loop Schleifenende


Aktualisiert 12.05.2019