You might do something like this:
Obvioulsy you can't have code that takes a long time to exectute in each section or you'll miss the button press. If that's the case, move the code that handles the button to a subroutine and call that routine multiple times from within the section(s) that takes the longest time.
This is not tested or even compiled so use it as an idea.Code:ButtonPressed CON 0 FirstPieceOfCode CON 1 LastPieceOfCode CON 3 CodeToRun VAR BYTE ButtonHasBeenPressed VAR BIT ChangeButton VAR PortB.2 CodeToRun = FirstPieceOfcode ButtonHasBeenPressed = 0 Main: If ChangeButton = ButtonPressed THEN ButtonHasBeenPressed = 1 ENDIF IF (ButtonHasBeenPressed = 1) AND (ChangeButton <> ButtonPressed) THEN ' But was pressed but is now released ButtonHasBeenPressed = 0 CodeToRun = CodeToRun + 1 ' Advance to next code section If CodeToRun > LastPieceOfCode THEN ' Wrap around and start over CodeToRun = FirstPieceOfCode ENDIF ENDIF Select Case CodeToRun Case 1 'Some code Case 2 'Some other code Case 3 'Yet some other code END SELECT Goto Main




Bookmarks