So, mein erster Entwurf. Musst evtl noch Fehler ausmerzen, habe gerade keine Zeit zum testen.

Du könntest mehr Reserve rausholen, wenn du nen schnelleren Quarz nimmst, die Baudrate erhöhst, den Code optimierst...

Code:
$regfile = "m8def.dat"
$crystal = 3686400
$baud = 9600                                                'Baudrate der UART: 9600 Baud

'Config Timer1 = Timer , Prescale = 64
'On Timer1 Timer_irq
'Const Timervorgabe = 7936                                   ' Const 7936

Config Timer1 = Timer , Prescale = 8
On Timer1 Timer_irq
Const Timervorgabe = 54016

 Ddrd = &B00000000
 Ddrc = &B11111111
Portd = &B11111111


Dim Sek As Byte
Dim Sekunden As Byte
Dim P3 As Byte
Dim P4 As Byte
Dim A As Byte
Dim T0 As Long
Dim T1 As Long
Dim E1 As Long
Dim Durchl40 As Long
Declare Sub Durchlauf10s
Declare Sub Ledon
Declare Sub Main
Declare Sub Abfragen
Declare Sub Ende
Declare Sub Zler1

Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portd.2 = Input



Enable Timer1
Enable Interrupts


'Main:

Led1 Alias Portc.1
Summer Alias Portc.2
Laser Alias Portc.3

P3 Alias Pind.3
Eingang Alias Pind.2

'P4 Alias Pind.3

Main:
Sek = 0



'----------------------------------------------------------
'########   einschalten Portd.2  ####################
'----------------------------------------------------------
'Do
'  Debounce Pind.2 , 0 , Abfragen , Sub                      'Entprellt
'Loop


'----------------------------------------------------------
'########   Abfrage des Portd.3  ###################
'----------------------------------------------------------
Sub Abfragen()

   Set Laser                                                   'Portc.3 = 1

   'A = 0

   'Do

   Zler1:

   'Waitms 25

   'P3 = Pind.3

   If P3 = 0 Then
      Set Led1                                                 'Led An
   '   set summer                                             ' Summer an Portc.2 an
       A = A + 1
       Print " A " ; A
       If A = 8 Then
          Gosub Ledon
       End If
       'Goto Zler1
   Else
       Reset Led1                                              'Led Aus
   '    reset summer                                             ' Summer an Portc.2 aus
       A = 0
   End If


   End Sub
   'loop

'----------------------------------------------------------
'############ Led und Summer  #############################
'----------------------------------------------------------

Ledon:
A = 0
T0 = 0
T1 = 0

Print "S"                                                   'Senden ein S über RS232
Sekunden = 0                                                ' Sek auf 0 stellen dass die 10 S

'Do
'For I = 1 to 40

If Sekunden < 10 Then
   Portc.0 = 1                                              'Led zeigt 10 Sek.an
'   Print "  " ; Sekunden                                   ' Kontrolle der Skunden
    Else
    Portc.0 = 0                                             'Led wird aus geschaltet
'    Sekunden = 0                                            'Sekunden werden auf 0 gestzt
   Goto Ende
End If

'Print Pind.4 ; "  "                                        ' Kontrolle des Portsd.4
If P4 = 1 Then
'     Print "0"                                              'Senden ein 0 über RS232
     Portc.1 = 0                                            ' Led aus Portc.1
     Portc.2 = 0                                            ' Summer an Portc.2 aus
     T0 = T0 + 1
     Print "0" ; " " ; T0
   Else
'   Print "1"                                                'Senden ein 1 über RS232
     Portc.1 = 1                                            ' Led ein Portc.1
     Portc.2 = 1                                            ' Summer an Portc.2 ein
     T1 = T1 + 1
     Print "1" ; " " ; T1
End If
Return
'Waitms 25                                                   ' Abfrage alle 25 ms
'Loop

'Next I

'------------------------------------------------------------
'#######   Ende  ###############
'------------------------------------------------------------

Ende:

E1 = T0 + T1
Print "E"                                                   'Senden ein E über RS232
Print "  "
Print "  "
Print "   Treffer = " ; T1
Print " N.Treffer = " ; T0
Print "  "
Print "   Gesammt = " ; E1
Print "  "
Print "   Sekunde = " ; Sekunden
Print "  "
Print "  "

T0 = 0
T1 = 0
Sekunden = 0

Reset Led1                                                  ' Led an Portc.1 aus
Reset Summer                                                ' Summer aus Portc.2
Reset Summer                                                ' Laser einschalten
Goto Main

'-------------------------------------------------------------
'##########   Timer Skundenbasis #############################
'-------------------------------------------------------------

Timer_irq:
   Timer1 = Timervorgabe
   Sek = Sek + 1
   If Sek = 40 Then
      Incr Sekunden
      Sek = 0
   End If
   Call Abfragen
   If Sekunden = 10 Then
      Sekunden = 0
      Goto Ende
   End If

return

End