Ähhhh?
<<Bei 10000/Min würde er >24 sekunden brauchen, um auf die Zahl 4095 zu kommen...>> nix verstehn

Am besten schick ich dir gerade mal mein ganzes Programm, dann kannst sehn, was ich gemacht hab:

Code:
Config Int0 = Falling                                       'Der Interrupt wird bei fallendem Flankensignal aktiviert
Config Timer1 = Timer , Prescale = 256
Const Markierungenproscheibe = 12                           'Hier steht die Anzahl der auf dem Inkrementenrad vorhandenen Markierungen/Löcher
Const Berechnungszeit = 1                                   'Zeit (in s) für die Berechnung. Das jeweilige Ausgangssignal bleibt die doppelte Berechnungszeit lang konstant

Config Spi = Soft , Din = Pinc.5 , Dout = Portc.1 , Ss = None , Clock = Portc.0       'Konfiguration der Software SPI
Config Portc.2 = Output                                     'Ausgang für CS1
Config Portc.3 = Output                                     'Ausgang für CS2

Portc.2 = 1                                                 'CS1 auf High
Portc.3 = 1                                                 'CS2 auf High


Dim A As Word
Dim B As Word


Dim Impulszaehler As Long                                   'Zaehlt die Impulse der Lichtschranke waehrend der eingestellten Berechnngszeit
Dim Impulse As Long                                         'in dieser Variablen werden die gezaehlten Impulse für die Berechnung gespeichert
Dim Umdrehungen_neu As Single                               'enthaelt den neuen berechneten Wert der Umdrehungen innerhalb der Berechnungszeit
Dim Umdrehungen_alt As Single                               'enthaelt den vorangegangenen Wert der Umdrehungen innerhalb der Berechnungszeit

Dim Umdps1 As Byte
Dim Umdps2 As Byte
Dim Umdrehungenprosekunde As Word At Umdps1 Overlay         'enthaelt den aktuellen Drehzahlwert in U/s

Dim Grad1 As Byte
Dim Grad2 As Byte
Dim Gradient As Word At Grad1 Overlay                       'enthaelt den Drehzahlgradienten in U/s2

Dim Timertakt As Long                                       'wird nur als Zwischenspeicher gebracht
Dim Timervorgabe As Single                                  'mit diesem berechneten Wert wird der Timer vorgeladen um die gewuenschte Berechnungszeit zu erreichen


Timertakt = 16000000 / 256                                  'In diesen drei Zeilen wird der Wert für die Aufladung des Timers berechnet
Timervorgabe = Timertakt * Berechnungszeit                  'in der ersten dieser drei Zeilen muss der Wert des Prescalers eingetragen werden!
Timervorgabe = 65536 - Timervorgabe

Impulszaehler = 0
Umdrehungen_neu = 0


On Int0 Irq0
Enable Int0

On Timer1 Timer_irq
Enable Timer1

Enable Interrupts

Do

   Umdrehungen_alt = Umdrehungen_neu
   Umdrehungen_neu = Impulse / Markierungenproscheibe
   Umdrehungenprosekunde = Umdrehungen_neu / Berechnungszeit
   Umdrehungenprosekunde = Umdrehungenprosekunde / 16       'Begrenzung der 2Byte (2^16=65536) auf 12bit (2^12=4096)
   Print "Umdrehngen pro Sekunde: " ; Umdrehungenprosekunde

      Portc.2 = 0                                           'CS1 auf LOW
         Spiinit
         Spiout Umdps2 , 1                                  ' Bit 15 - BIT 8
         Spiout Umdps1 , 1                                  ' Bit 7 - BIT 0
      Portc.2 = 1                                           'CS1 auf High

   Gradient = Umdrehungen_neu - Umdrehungen_alt
   Gradient = Gradient / Berechnungszeit
   Gradient = Gradient / 16                                 'Begrenzung der 2Byte (2^16=65536) auf 12bit (2^12=4096)
   Print "Drehzahlgradient in Umdrehungen/s2: " ; Gradient

      Portc.3 = 0                                           'CS1 auf LOW
         Spiinit
         Spiout Grad2 , 1                                   ' Bit 15 - BIT 8
         Spiout Grad1 , 1                                   ' Bit 7 - BIT 0
      Portc.3 = 1                                           'CS1 auf High

Loop

End


'Pro Impuls (Markierung auf Scheibe) ein Aufruf
Irq0:
 Incr Impulszaehler
Return


'wird beim Ablauf der Berechnungszeit aufgerufen
Timer_irq:
  Timer1 = Timervorgabe
  Impulse = Impulszaehler
  Impulszaehler = 0
  Return

Ich hab überlegt, dass ich doch eigentlich den ganzen Inhalt der DO...LOOP schleife in das Timer_irq unterprogramm rein legen kann.
Dann hätte ich doch gewährleistet, dass ich immer am Ende von dem timer (also nach jeder neuen Berechnung) meine Werte ausgeben würde.
Sosnt könnte es doch auch passieren, das aufgrund irgendwelcher Laufzeiten die Wertausgabe eine Berechnung überspringt, dann käme sowohl die drehzahl als auch der Gradient falsch heraus, da die berechnungszeit dann nicht mehr stimmt.

Die Berechnungszeit soll später natürlich nicht mehr bei 1s liegen, das ist nur, damit ich im moment noch was erkennen kann. die liegt später bei k.A. vielleicht 1000 Berechnungen pro Sekunde.