Hi;

Here is a program that i wrote in the past.
Code:
'****************************************************************
'*  Name    : Temporizador 3m p/ Lavar Dentes.BAS               *
'*  Author  : gadelhas                                          *
'*  Notice  : Copyright (c) 2012 ProSystems                     *
'*          : All Rights Reserved                               *
'*  Date    : 01-03-2012                                        *
'*  Version : 1.0                                               *
'*  Notes   : Proteus + Circuito com SOT-23 e CR2032            *
'*          : 10F222 - Wake from sleep através de IOC no GP3    *
'****************************************************************
@ __config _IOFSCS_4MHZ & _WDT_OFF & _MCLRE_OFF & _CP_OFF & _MCPU_ON

 DEFINE OSC 4

 '===================SRF AND PINOUT CONFIGURATION - 1-In / 0-Out=================
              '76543210
     TRISIO = %00001000
       GPIO = %00000000
 OPTION_REG = %00000000 'OPTION_REG.7 - Wake on change bit 0=Enable
     ADCON0 = %00000000 'Analog pins disable

'==================================ALIAS========================================
 VAZIO1 VAR GPIO.0
 VAZIO2 VAR GPIO.1
 LED    VAR GPIO.2
 MCLR   vAR GPIO.3
 GPWUF  var STATUS.7
 
'=================================VARIABLES=====================================
 I VAR BYTE
 C VAR BYTE: C = 0
 
'================================MAIN LOOP======================================
@ movlw 0x01A  ;OSCCAL Value
@ movwf OSCCAL

 IF GPWUF = 0 THEN DESLIGA  'Test what caused the Reset
 
Main:

 WHILE MCLR = 0    'If button pressed for 3 seconds, turn on led
    PAUSE 100
    C = C + 1
    IF C = 30 THEN LIGA
 WEND
 
 FOR I = 0 TO 119 '~120 Segundos a Piscar de 1 em 1 Segundo
    HIGH LED
    PAUSE 500
    GOSUB VERIFICA 
    LOW LED
    PAUSE 500
    GOSUB VERIFICA
 NEXT

 FOR I = 0 TO 59  '~30 Segundos a Piscar de 0,5 em 0,5 Segundo
    HIGH LED
    PAUSE 250 
    LOW LED
    PAUSE 250
    GOSUB VERIFICA
 NEXT

 HIGH LED
 FOR I = 0 TO 59  '~30 Segundos sempre ligado
     PAUSE 500     
     GOSUB VERIFICA
 NEXT
 LOW LED
  
 'Sequencia de finalização
 HIGH LED: PAUSE 100: LOW LED: PAUSE 100
 HIGH LED: PAUSE 100: LOW LED: PAUSE 100
 HIGH LED: PAUSE 100: LOW LED: PAUSE 100

DESLIGA:
 C = 0
 I = GPIO     'Must read GPIO before entering sleep. Read the Datasheet
@ SLEEP
@ NOP
GOTO Main

'================================SUB-ROUTINES===================================
LIGA:
    HIGH LED
    PAUSE 1000
    WHILE MCLR !=0
    WEND
    LOW LED
GOTO DESLIGA

VERIFICA:
 IF MCLR = 0 THEN
     C = C + 1
     IF C = 6 THEN
         'Sequencia de finalização
         HIGH LED: PAUSE 100: LOW LED: PAUSE 100
         HIGH LED: PAUSE 100: LOW LED: PAUSE 100
         HIGH LED: PAUSE 100: LOW LED: PAUSE 100
         PAUSE 1000
         GOTO DESLIGA
     ENDIF        
 ENDIF
RETURN
END