OK, i have have done a bit more digging and come up with this:

Code:
Red     VAR PORTB.1

Seconds     var byte ' 0-59
Minutes     var byte ' 0-5
Minutedelay var byte

Minutedelay = 2
counter = 0
'
For Minutes = 0 to Minutedelay
    Gosub Delaymin
    If Minutes = Minutedelay - 1 then gosub flash
Next Minutes

Delaymin:
    For Seconds=0 to 59
    Pause 1000
    Toggle Red ' flashing light for reference
    Next Seconds
Return

Flash:
    For loop = 1 to 5
        red = 1
        pause 125
        red = 0
        pause 250
        red = 1
        pause 125
        red = 0
        pause 250
    Next loop
Return

End
I have had to put the
Code:
If Minutes = Minutedelay - 1 then gosub flash
in as it would not stop at the MinuteDelay variable. ie if i wanted it to stop at 2 minutes, it would stop at 3, if i wanted to stop at 3, it would stop at 4 etc etc.

Is there any other way to tidy up this routine?

Also, this routine is activated by, for argument sake, PORTC.0 going high. How would i place the abort code in. ie if the same button (PORTC.0) goes high during this routine, it stops the counting and jumps back to the main code awaiting an input instruction.

I have a CASE SELECT routine which selects different routines, depending on which button is pressed. This is just one of the routines.

Many thanks,