I believe this is the same thing you are doing.

MinuteDelay = 2

For Minutes = 1 to MinuteDelay
For Seconds = 1 to 60
if PORTC.0 = 1 Then goto main code
Pause(1000)
Next Seconds
Next Minutes

For loop = 1 to 10
if PORTC.0 = 1 Then goto main code
red = 1
pause(125)
red = 0
pause(250)
Next loop

Goto Main Code

PORTC.0 will have to be held high for one second so that it can be picked up (will not be seen during a pause)
Changed your loop from "1 to 5" to "1 to 10" since you were flashing red on and off twice in each loop.
Your use of "If Minutes = Minutedelay - 1 then gosub flash" could have been
"If Minutes = Minutedelay then gosub flash" if
"For Minutes = 0 to Minutedelay" had been "For Minutes = 1 to Minutedelay"
Since you are using PORTC.0 to send to and escape from the timer, make sure it is low when you return to main code or you'll just be sent right back to your timer or back to your main code if you are trying to activate the timer.

I'm not sure if this is proper to do and maybe someone will explain if it is not but, if you have a PIC reset switch simply pressing it at anytime would abort the timer by means of resetting your PIC. You could then omit the
"if PORTC.0 = 1 Then goto main code" in both places.


William