program PIC12F675_5_LEDs_Int_007

' Declarations section
dim tm as word
dim pattern as word

sub procedure ptn1
pattern = 1
while INTCON.GPIF = 0
      GPIO = %11111111
      Vdelay_ms(tm)
      GPIO = %00000000
      vDelay_ms(tm)
wend
while GPIO.3 = 0 ' 0 = Port pin is <VIL ( Push SW is ON )
      Delay_ms(100)
wend
INTCON.GPIF = 0
end sub

sub procedure ptn2
pattern = 2
while INTCON.GPIF = 0
      GPIO = %00101101
      Vdelay_ms(tm)
      GPIO = %00010010
      vDelay_ms(tm)
wend
while GPIO.3 = 0 ' 0 = Port pin is <VIL ( Push SW is ON )
      Delay_ms(100)
wend
INTCON.GPIF = 0
end sub

sub procedure ptn3
pattern = 3
while INTCON.GPIF = 0
      GPIO = %00000001
      Vdelay_ms(tm)
      GPIO = %00000010
      vDelay_ms(tm)
      GPIO = %00000100
      vDelay_ms(tm)
      GPIO = %00010000
      vDelay_ms(tm)
      GPIO = %00100000
      vDelay_ms(tm)
wend
while GPIO.3 = 0 ' 0 = Port pin is <VIL ( Push SW is ON )
      Delay_ms(100)
wend
INTCON.GPIF = 0
end sub

main:
      ANSEL = %00000000 ' Configure AN pins as digital I/O
      CMCON = %00000111 ' Comparator Off
        IOC = %00001000 ' Interrupt-on-change enabled on GP3(=1)
'OPTION_REG = %00000000
     TRISIO = %00001000 ' GP0,1,2,4,5 is OUT
                        ' GP3 is always IN
     INTCON = %00001000 ' Enables the GPIO port change interrupt

tm = 250 ' Wait mS
pattern = 1

LEDLoop:
INTCON.GPIF = 0 ' 1 = When at least one of the GP5:GP0 pins changed state
                '     (must be cleared in software)
select case pattern
      case 1
            ptn2
      case 2
            ptn3
      case 3
            ptn1
end select
goto LEDLoop
end.