Ok, dann also mal folgende Angaben:
- PIC 16F88


Code:
ISR                  ;interupt service routine 
   movwf   copyw        ;Status und W retten
   swapf   STATUS, W 
   bcf      STATUS, RP0 
   movwf   copys 
    
   btfsc   PIR1, TMR1IF ;testet Timer 1 Interrupt-Flag
   goto   TMR1ISR        ; wenn gesetzt, zur Timer-Inkrementierung gehen
   btfsc   PORTB, 7       ; wenn nicht gesetzt, testen ob der Taster den Interrupt ausgelöst hat (nur Reaktion, wenn aufsteigende Flanke den Interrupt ausgelöst hat)
   goto   RBInt             ; wenn ja, zur Taster-Rutine gehen
   goto   ISRend          ; wenn nicht, ISR beenden


.......... 


RBInt                              ;Taster-ISR
   bcf      INTCON, RBIF    ;PORTB-Interrupt-Flag löschen
   bsf      UPDRBI             ;Update-Flag für PORTB setzten (bedingt Reaktion im Hautprogramm)
   goto   ISRend              ; Interrupt beenden

    
ISRend                  ;iRutine, um ISR zu beenden
   swapf   copys, w          ;Status, und w wieder laden
   movwf   STATUS 
   swapf   copyw, f 
   swapf   copyw, w 
   bsf      UPDLCD             ;Flag setzen, damit das LCD neu beschrieben wird
   retfie                      ;ISR-ende


............... 


InitTimer                         ;Init des Timer, "PIE1, TMR1IE" wird noch nicht gesetzt (Timer1 interrupt enable-bit) 
   bcf      STATUS, RP0 
   movlw   B'00110101'   ;prescaler:  1:8; internal clock; no synchronize; Timer1 enabled 
   movwf   T1CON 
   bsf      STATUS, RP0 
   bcf      PIE1, TMR1IE 
   bcf      STATUS, RP0 
   bsf      INTCON, RBIE        ;PORTB-Interrupt an
   bsf      INTCON, PEIE        ;Periphäre-Interrupts an
   bsf      INTCON, GIE          ;Global-Interrupt an
   return 

   Main 
   btfsc   UPDLCD              ;Testen, ob das LCD neu beschrieben werden muss (bei Reset nicht der Fall)
   goto   WriteLcd 
   call   Init                       ;Initialisierungen
   call   InitLCD                        ;Initialisierungen
   call   InitTimer                        ;Initialisierungen
    
WriteLcd                             ;Endlosschleife des Hauptprogramms,
   bcf      UPDLCD                ;LCD-Update-Flag löschen
   btfsc   UPDRBI                 ;testen, ob der Taster gedrückt wurde
   goto   TestRBI                 ;zur Taster-Rutine gehen
   call   printzehn                  ;LCD schreiben
   call   printseke                   ;LCD schreiben
   call   printsekz                   ;LCD schreiben
   call   printmine                   ;LCD schreiben
   call   printminz                   ;LCD schreiben
   call   printstde                   ;LCD schreiben
   call   printstdz                   ;LCD schreiben
   movlw   b'11001111'         ;Cursor an letzte Position
   call   OutLcdControl 
   movlw   D'10'                   ;Warteschleife, um LCD nicht zu überlasten
   movwf   loops 
   call   WAIT 
   goto WriteLcd                    ;Endlosschleife
    
TestRBI                              ;Testen, ob der Taster wirklich gedrückt wurde
   bcf      UPDRBI                 ;Flag löschen
   movlw   D'20'                   ;Warteschleife, um prellen abzuwarten
   movwf   loops 
   call   WAIT 
   btfsc   PORTB, 7                ;Ist der Taster immer noch angeschaltet?
   goto   StartTMR                 ;wenn ja, zur Timer-Start-Rutine gehen
   goto   WriteLcd                  ;wenn nein, abbruch
    
StartTMR                             ;Timer starten
   bsf      STATUS, RP0         ;bank 1
   bsf      PIE1, TMR1IE         ;Timer1 Enable-Bit setzten
   bcf      STATUS, RP0          ;Bank 0
   goto   WriteLcd                 ;zurück zum Hauptprogramm

So, sorry, dass ich die Kommentare vergessen habe. Diese sollten weiterhelfen.

Guss orph