Added the timer as suggested and it works! BUT, now I lost two things and I don't know why:
1) the led thats supposed to flash once a second inside the time counting loop only flashes once.
2) When outside the timelapse function in the previous version if I left the button pressed the camera shooted continuously, now it shots one time per press
As a BONUS I translated all the comments to English 
Code:
'****************************************************************
'* Name : pentax.BAS *
'* Author : PEU based on examples from www.rentron.com *
'* Notice : Copyleft (c) 2011 *
'* : No Rights Reserved on derived work *
'* Date : 05-ENE-11 *
'* Version : 1.01 *
'* Notes : pablou at gmail dot com *
'****************************************************************
@ #define IRTX GPIO ; Define port to use for IR out
@ #define PIN 2 ; Define port pin to use for IR out
' 12F683.INC at picbasic folder has this defined already for MPASM use
' __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _CP_ON
'@ device pic12f683,INTRC_OSC_NOCLKOUT , wdt_on, mclr_off, protect_on
INCLUDE "DT_INTS-14.bas"
INCLUDE "ReEnterPBP.bas"
INCLUDE "Elapsed_INT.bas" ; Elapsed Timer Routines by Darrel Taylor
DEFINE OSC 4
GPIO = 0
TRISIO.2 = 0 ' LED IR
TRISIO.1 = 0 ' Red LED
TRISIO.5 = 1 ' Normal open pushbutton (w/ pulldown)
CMCON0 = 7 ' Comparators disabled
ANSEL = 0 ' A/D disabled
' GIE VAR INTCON.7 ' Global interrupt enable 1=ON, 0=OFF
GPIE VAR INTCON.3 ' Port change interrupt enable 1=ON, 0=OFF
GPIF VAR INTCON.0 ' Port Change Interrupt Flag bit
Cycles VAR BYTE ' Number of carrier cycles
ContaSec var word ' Seconds Counter
TLFlag var byte ' Timelapse counter programmed?
IRLED var GPIO.2 ' alias LED IR
LED var GPIO.1 ' alias red LED
BOTON var GPIO.5 ' pushbutton
GIE = 0 ' Disable global ints
GPIE = 1 ' Enable port change int
IOC.5 = 0 ' Int-on-change for GPIO.5 disbled
PAUSE 100 ' little pause to settle the processor after cold start
GOTO OverASM ' jump over ASM routines
' Generate "Cycles" number of ~38.4kHz pulses Bruce at www.rentron.com
ASM
_Pulse38
bcf IRTX,PIN ; 1uS, LED=on
goto $+1 ; + 2uS = 3uS
goto $+1 ; + 2uS = 5uS
goto $+1 ; + 2uS = 7uS
goto $+1 ; + 2uS = 9uS
goto $+1 ; + 2uS = 11uS
goto $+1 ; + 2uS = 13uS
bsf IRTX,PIN ; 1uS, LED=on
goto $+1 ; + 2uS = 3uS
goto $+1 ; + 2uS = 5uS
goto $+1 ; + 2uS = 7uS
goto $+1 ; + 2uS = 9uS
nop ; + 1uS = 10uS
decfsz _Cycles,f ; + 1uS = 11S
goto _Pulse38 ; + 2uS = 13uS
return ; Return to caller
ENDASM
ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag?
INT_Handler TMR1_INT, _ClockCount, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
INT_ENABLE TMR1_INT ; Enable Timer 1 Interrupts
ENDASM
OverASM: ' END of ASM routines
contasec=0
tlflag=0
' New timer
GOSUB ResetTime ' Reset Time to 0d-00:00:00.00
GOSUB StartTimer ' Start the Elapsed Timer
while boton = 1 ' Loops while the button is pressed
if SecondsChanged = 1 then 'if the seconds changed flash the red led
high led
pause 50
low led
SecondsChanged = 0 ' set flag back to 0
endif
tlflag=1 ' This flags lets me know if the timer was used
wend
contasec = Seconds + (Minutes * 60) ' Total time elapsed
gosub StopTimer
'Loop del TimeLapse
if tlflag = 1 then ' if the timer was used continue
while boton = 0
sleep contasec ' sleep programmed time
gosub trigger ' trigger
high led ' red LED on
pause 50 ' little pause
low led ' red LED off
wend
' Timelapse ended because the button was pushed
for contasec = 1 to 15 ' flash red LED to let the user know
high led
pause 100
low led
pause 100
next
endif
IOC.5 = 1 ' Int-on-change for GPIO.5 enabled
GPIO = 0
Main: ' main Loop
ASM
sleep ; Sleep
endasm
while boton=0 ' wait for button push
wend
GPIF = 0 ' Clear port change interrupt flag
gosub trigger ' trigger
high led ' red LED on
pause 50
low led ' red LED off
pause 200 ' debounce
GOTO Main
Trigger: ' PENTAX pulse train
Cycles = 255
CALL Pulse38
Cycles = 239
CALL Pulse38
pauseus 3000
cycles = 38
CALL Pulse38
pauseus 1000
cycles = 38
CALL Pulse38
pauseus 1000
cycles = 38
CALL Pulse38
pauseus 1000
cycles = 38
CALL Pulse38
pauseus 1000
cycles = 38
CALL Pulse38
pauseus 1000
cycles = 38
CALL Pulse38
pauseus 1000
cycles = 38
CALL Pulse38
pauseus 5000 ' end PENTAX pulse train
return
END ' Fin :)
Bookmarks