Ich bin dabei eine Schrittmotorsteuerung zu implementieren. Dazu takte ich einen Schrittmotortreiber-IC. Der Takt wird über einen Timer erzeugt und in selbigem gleich der Schrittzähler mit hochgezählt bzw runter gezählt.

Das Problem dabei ist, daß zwar der Timer wunderschön läuft und auch die entsprechenden Variable "Actualposition" setzt, aber das Hauptprogramm schlicht die Abbruchbedingung nicht auswertet.

Beispiel:
Actualposition =0 (integer)
Value =10 (integer)
bedeutet, daß der Timer 10 mal aufgerufen werden muss, bis die aktuelle Position des Motors der gewünschten Position (in Value) entspricht. Wenn beide gleich sind, dann soll die Do-Loop-Until Klausel verlassen werden und der Timer gestoppt. Danach wird die aktuelle Position ausgegeben. Passiert aber nicht.

Ich habe das auch schon mit anderen Schleifen-Konstrukten wie While-Do usw. durchprobiert. Hat alles nix gebracht. Auch eine extra auswertung nochmal in der Schleife, wie im Codebeispiel hat mir nix gebracht. Die Abbruchbedingung wird nicht ausgeführt, sondern Actualposition läut munter weiter in die entsprechende Richtung.

Muss da irgendwo noch ein Wait rein?

Code:
$crystal = 6000000  
Config Timer0 = Timer , Prescale = 256
On Timer0 Tim0_isr 

Clock Alias Portc.2                                         
Dirout Alias Portc.3
...


'Hauptschleife
     Do
       If Actualposition = Value Then       'nur zum test hier nochmal auswerten
        Stop Timer0
       End If
     Loop Until Actualposition = Value                      'solange ungleich
    
     Stop Timer0
     Print Actualposition

...

'ISR von Timer0
Tim0_isr:

  Timer0 =  Stepdelay                                   ' zeit setzen
  Clock = Not Clock                                       ' negieren und damit takten'
  If Dirout = 0 Then                                        'Richtung auswerten
    Decr Actualposition
  Else
    Incr Actualposition
  End If

Return