thanks,

here s my progress for now:
First I added the lines you gave me. unfortunatly it didn't work.
I put somethings at a more logical place(tmr2if=0 at the top of isr)
Then I replaced all the gosubs by the real text. it cost me for aboud 500 words more but luckily there was enough space at the 628 (i haven't a 648 at stock).
Then I began thinking aboud the stackadresses. But that was not the option because there was not a gosub at the loop so the only things at the stack had to be the adress for the return after the interrupt and max 1 gosub adress from inside the ISR.

When I looked at the helpfile I got an idea. It is also possible to place a label after the resume command. I added loop after the resume command and it works for now.

>>The only problem now is that after the 'resume loop' command I have just 2msec to change my settings:P That is not possible but maby you get now an adea for what I'm doing wrong.

So, I tried that at the prevous version of the program. This works the same, so with the gosubs inside the ISR.

Here is my code for now: under the loop didn't I change anything so that is not posted.

Code:
 @ device pic16F628a, INTRC_OSC_NOCLKOUT
 @ device pic16F628a, MCLR_ON
 @ device pic16F628a, LVP_OFF
 @ device pic16F628a, WDT_OFF
 @ device pic16F628a, PWRT_ON
 @ device pic16F628a, BOD_OFF'ON   
INCLUDE "modedefs.bas"  'for shiftout
pause 50

' Defines 
' ---------------- 
'I2C pins
DS_SCL VAR PORTA.0 	' I2C clock pin 
DS_SDA VAR PORTA.1 	' I2C data pin 
'RTC CON %11010000 	' RTC device address (byte addressing) not needed

'Setting the RTC so we can get out 1Hz tick output 
'------------------------------------------------- 
' -------------- RTC definitions ----------------- 
SecReg 	CON $00 	' seconds address (00 - 59)
' MSB of SecReg must be set to a 0 to enable RTC 
MinReg CON $01 	    ' minutes address (00 - 59) 
HourReg CON $02 	' hours address (01 - 12) or (00 - 23) 
DayReg CON $03 	    ' day address (1 - 7) 
DateReg CON $04 	' date address (01 - 28/29, 30, 31) 
MonthReg CON $05 	' month address (01 - 12) 
YearReg CON $06 	' year address (00 - 99) 
ContReg CON $07 	' control register 
RTCflag CON 0 		' RTC flag (location 0 of internal EEPROM) 
cntrl CON %00010000 ' sets the SQW/OUT to 1Hz pulse, logic level low 

' The variable below holds the values entered: 
'menu var's
_sec 	VAR BYTE ' $00 set seconds 
_min 	VAR BYTE ' $56 set minutes 
_hr 	VAR BYTE ' $23 set hour 
_day 	VAR BYTE ' $06 set day 
_date 	VAR BYTE ' $28 set date 
_mon 	VAR BYTE ' $02 set month 
_yr 	VAR BYTE ' $03 set year 

'rtc var's
sec 	VAR BYTE ' seconds 
MINs 	VAR BYTE ' minutes 
hr 	    VAR BYTE ' hours 
day 	VAR BYTE ' day 
date 	VAR BYTE ' date 
mon 	VAR BYTE ' month 
yr 	    VAR BYTE ' year 

'button input     
'-------------------
	SetButton var PORTa.7	' Press to Set/memorise Button
    DecButton var PORTa.3	' Press to Decrement Button
	IncButton var PORTa.2	' Press to Increment Button

'other var's
'------------------
	CounterA var byte       ' General purpose Variable
	CounterB var byte       ' General purpose Variable
	CounterC var byte       ' General purpose Variable
    CounterD var byte       ' General purpose Variable
    ButtonRepeat con 200	' Timeperiod (in mS for Edit Buttons auto-repeat
    			         	' should you want to hold them down...
    RTCCtrl var byte        ' Control
    TimeOut var word        ' Variable for SetUp Menu Time-Out
    SetTime var byte	    ' 12/24 Hour Clock
    RTCWDay var byte	    ' Weekday 
    timeformat var word     ' place for displaying am/pm
    counter var byte
    counter2 var byte
    counter3 var word       ' delaycounter
    counter4 var word       ' counter at redisplayloop
    segments var byte
    myBCD var byte
    toDEC var byte 
    
'I/O pins
'port conditions
'---------------        
        CMCON=7
        TRISA=0
        TRISB=0
        PORTA=0
        PORTB=0

'timer and interruptconditions
'----------------      
        PIE1 =  %00000010
                '0------- Disable EE write complete interrupt
                '-0------ Disable comparator interrupt
                '--0----- Disable USART receive interrupt
                '---0---- Disable USART transmit interrupt
                '----x--- unimplemented
                '-----0-- Disable CCP1 interrupt
                '------1- Enable TMR2 to PR2 match interrupt
                '-------0 Disable TMR1 overflow interrupt
                
        T2CON = %00000010
                'X------- Unimplemented
                '-0000--- postscale 1:1
                '-----0-- Timer2 off
                '------10 prescaler 1:16
                                   
        GIE     VAR INTCON.7
        PEIE    VAR INTCON.6
        TMR2IF  VAR PIR1.1
        TMR2ON  VAR T2CON.2
        RELOAD CON 131
        
        ON INTERRUPT GOTO ISR
        TMR2 = RELOAD
        PR2 = 0   ' load period register for 2mSec 
        PEIE = 1    ' Enable peripheral interupt
        GIE = 1     ' enable Global interrupt
        TMR2ON = 1  ' TMR2 ON
        GOTO LOOP                

        disable
        ISR:             'interruptroutine
        TMR2if=0  ' Clear interrupt flag        
        TMR2ON=0
'counter3 to reduce later the isr text. then only shiftout the var's
if counter3=>200 then 'number of shiftouts
counter3=0
else 
counter3=counter3+1
endif

'hours
'the one that is 0 wil blink
'for segments the opposite
counter = %01111111     '1 segment
toDEC = hr
if hr.6=1 then          '12 uurs mode
    todec = todec <<3
    todec = todec >>7
else                    '24 uurs mode
    todec = todec <<2
    todec = todec >>6
endif
gosub findsegments
if hr.6 = 1 then        'add in the am/pm indication
    if hr.5 = 1 then
        segments.7 = %1
    endif
endif
gosub segmentsshiftout

counter = %10111111 '2 segment
toDEC = hr
toDEC = toDEC << 4 'shiftout unusable data
todec = todec >> 4 'shiftback usable data
gosub findsegments
if portA.6 = 1 then segments.7 = %1    'add the blinkin dot
gosub segmentsshiftout

'minits
counter = %11011111  '3 segment
toDEC = MINs
todec = todec >> 4 'shiftback usable
gosub findsegments
gosub segmentsshiftout

counter = %11101111    '4 segment
toDEC = MINs
todec = todec << 4 'shiftout unusable data
todec = todec >> 4  
gosub findsegments
gosub segmentsshiftout

'seconds
counter = %11110111    '5 segment
toDEC = sec
todec = todec >> 4 'shiftback usable
gosub findsegments
gosub segmentsshiftout

counter = %11111011 '6 segment
toDEC = sec
todec = todec << 4 'shiftout unusable data
todec = todec >> 4 
gosub findsegments

if hr.6=1 then      'mode indication
segments.7=%1
endif
gosub segmentsshiftout

counter = %11111111 'to take care that no segment is blinking harder
todec = %00000000'todec >> 4 
gosub segmentsshiftout
GOTO RESUME_ISR	' <-- Add this

segmentsshiftout:
SHIFTOUT PORTB.0, PORTB.1, LSBFIRST,[counter\8,segments\8]   'data, clock
pulsout PORTA.4,1        
return        

findsegments:
if todec=%00000000 then '0
    segments = %01111110
    endif
if todec=%00000001 then  '1
    segments = %00110000
    endif
if todec=%00000010 then  '2
    segments = %01101101
    endif
if todec=%00000011 then  '3
    segments = %01111001
    endif
if todec=%00000100 then   '4
    segments = %00110011
    endif
if todec=%00000101 then   '5
    segments = %01011011
    endif
if todec=%00000110 then   '6
    segments = %01011111
    endif
if todec=%00000111 then   '7
    segments = %01110000
    endif
if todec=%00001000 then   '8
    segments = %01111111
    endif
if todec=%00001001 then   '9
    segments = %01111011
    endif
return
        RESUME_ISR: ' <-- And this
        TMR2ON=1
        TMR2 = RELOAD
        resume loop
        enable
    
LOOP:
I2CRead DS_SDA,DS_SCL,$D0,$00, [sec,MINs,hr,day,date,mon,yr] ' Read Ds1307 
	If sec.7=1 then goto coldstart	
    If setbutton = 0 then       'if setbutton is pressed
        _hr=hr
        _min=MINs
        _sec=sec
     gosub SetButtonRelease    
     Gosub SetTimeAndDate 'after release    
   endif
counter3=0
repeat     'show the segments for 5 times.
pauseus 10    
until counter3 > 5
GoTo Loop 
end