hmmm ...
nun Du mußt ja in der Interruptabarbeitung jeweils nur ein Flag setzen.
aber vergiss nicht, das globale flag als volatile zu deklarieren:
volatile byte flag = 0;
Je nachdem, was Du in den Schleifen abarbeiten lassen willst, wäre auch eine andere Methode (als die 3 while-Schleifen im B eitrag zuvor) über switch möglich, so kannst Du bei jedem Schritt auf Abbruch prüfen ...
Somit wird Schritt für Schritt abgearbeitet, kann aber jederzeit gewechselt werden .... und du könntest flag 0 .. 10 auch dafür nutzen, was einleitendes zu tun = Initialisierung von was auch immer.Code:**verkürzte schreibweisen** volatile byte flag = 0; INT_1 { flag = 10; } INT_2 { flag = 100; } void main(void) { for(;;) { switch(flag) { case 0 : {Init und am Ende: flag = 10;} break; case 10 : {tue was und am Ende: flag = 11;} break; case 11 : {tue was und am Ende: flag = 12;} break; case 12 : {tue was und am Ende: flag = 13;} break; case 13 : {flag = 10;} break; case 100 : {tue was und am Ende: flag = 101;} break; case 101 : {tue was und am Ende: flag = 102;} break; case 102 : {tue was und am Ende: flag = 103;} break; case 103 : {tue was und am Ende: flag = 104;} break; case 104 : {flag = 100;} break; } } }
Du könntest Dir auch den alten Werte vor änderung merken und so an nach "Schleifenwechsel" wieder an der Stelle weitermachen, wo unterbrochen wurde ...
Wenn Du über die Schleifen z.B. Schrittmotoren steuerun wolltest, könntest die Hauptschleife auch in einen Timerinterrupt packen und mit einem Vorteiler, die Taktfrequenz verändern = Beschleunigung und Abbremsvorgang ...
Idee verstanden ?
Hope it helps,
Vajk
Ich kann mir keine Signatur leisten - bin selbständig!
Vielen Dank für die tollen Beispiele!!!!
Daraus kann ich eine schöne Lösung konstuieren.
Grüße
popi
Lesezeichen