Danke dass Ihr Euch der Sache annehmt.
Das ganze soll eine Spielsstandsanzeige für Tischtennis sein.
Es ist ein ATMega8.Takterzeugung intern. Programmiert habe ich über die SPI-Schnittstelle. An ihr befindet sich auch ein Portexpander mit 74HC595 für die 7-Segmentanzeigen. Die LEDs befinden sich in den Tastern und sollen signalisieren welche Taster gerade zu bedienen sind. es funktioniert alles sehr gut und es soll nur das blinken mit "waitms" durch einen Timer ersetzt werden. Die Leds_reset blinken zu lassen ist nur der Versuch den Timer generell zu testen. Ich will später stattdessen eine bit-Variable toggeln und die im Code verarbeiten.

Code:
'

'$sim
$regfile = "m8def.dat"
$crystal = 1000000

Config Timer1 = Timer , Prescale = 8
Enable Timer1
On Timer1 Timer1_isr
Enable Interrupts
Const Timer1startwert = 49911
Timer1 = Timer1startwert

Config Portc.0 = Output
Config Portc.1 = Output
Config Portc.2 = Output
Config Portc.3 = Output
Config Portc.4 = Output

Config Pinb.0 = Input
Config Pinb.1 = Input
Portb.0 = 1
Portb.1 = 1

Ddrd = &B00000011
Portd = &B11111100

Ddrc = &B00011111

Leds_zaehlen Alias Portc.0
Led_rueckwaerts Alias Portc.1
Leds_wahl Alias Portc.2
Led_weiter Alias Portc.3
Leds_reset Alias Portc.4

Poti Alias Portc.5

Ta_reset Alias Pind.2
Ta_weiter Alias Pind.3
Ta_wahl_gs Alias Pind.4
Ta_wahl_seite_aufschl Alias Pind.5
Ta_wahl_seite_gast Alias Pind.6
Ta_rueckwaerts Alias Pind.7

Ta_baelle_li Alias Pinb.0
Ta_baelle_re Alias Pinb.1

Dim Var_hauptschleife As Byte

Const Const_anz_start = 0
Const Const_anz_wahl = 1
Const Const_anz_00 = 2
Const Const_anz_01 = 3
Const Const_anz_satzende = 4
Const Const_anz_satzpause = 5
Const Const_anz_seitenwechsel = 6
Const Const_anz_spielende_1 = 7
Const Const_anz_spielende_2 = 8
Const Ein = 1
Const Aus = 0
Const Ja = 1
Const Nein = 0

Dim Var_ausgabearray(8) As Byte

Dim Flag_aufschlagseite_gewaehlt As Bit
Dim Flag_gast_gewaehlt As Bit
Dim Flag_ende As Bit
Dim Flag_heim_gewaehlt As Bit
Dim Var_anzahl_der_gewinnsaetze As Byte
    Var_anzahl_der_gewinnsaetze = 3


Dim Flag_satzende As Bit
Dim Flag_spielende As Bit
Dim Flag_gh As Bit
Dim Flag_hg As Bit
Dim Flag_gh_start As Bit
Dim Flag_hg_start As Bit
Dim Flag_aufschlag As Bit
Dim Flag_aufschlag_li As Bit
Dim Flag_aufschlag_re As Bit

Dim Var_baelle_li As Byte
Dim Var_baelle_re As Byte
Dim Var_saetze_li As Byte
Dim Var_saetze_li_2 As Byte                                 'nur für spielendeprüfung
Dim Var_saetze_re As Byte
Dim Var_saetze_re_2 As Byte                                 'nur für spielendeprüfung

'Dim Var_ziffer_baelle_li As Word                            'At Var_baelle_li_ziffer Overlay
'Dim Var_ziffer_baelle_re As Word                            'At Var_baelle_re_ziffer Overlay

Dim Var_baelle_li_ziffer_e As Byte                          'At Var_ziffer_baelle_li Overlay
Dim Var_baelle_li_ziffer_z As Byte                          'At Var_ziffer_baelle_li + 1 Overlay
Dim Var_baelle_re_ziffer_e As Byte                          'At Var_ziffer_baelle_re Overlay
Dim Var_baelle_re_ziffer_z As Byte                          'At Var_ziffer_baelle_re + 1 Overlay
Dim Var_saetze_li_ziffer As Byte
Dim Var_saetze_re_ziffer As Byte

Dim Var_einer_baelle_li As Byte
Dim Var_zehner_baelle_li As Byte
Dim Var_einer_baelle_re As Byte
Dim Var_zehner_baelle_re As Byte

Dim Var_ziffernwahl As Byte
Dim Var_ziffernwahl_baelle_li As Byte
Dim Var_ziffernwahl_baelle_re As Byte

Dim Var_ziffer As Byte

Dim Var_betaetigt_gh As Bit
Dim Var_betaetigt_aufschlagwahl As Bit
Dim Var_alles_gewaehlt__weiter_moegl As Byte

Dim Var_summe_baelle As Byte
Dim Var_differenz_baelle As Integer
Dim Var_summe_gs As Byte

Dim Flag_seitenwechsel_erfolgt As Bit

Dim Var_seite_im_spiel_vor_sw_ent As Byte
Dim Var_seite_im_spiel_nach_sw_ent As Byte

Dim Flag_aufschlag_2 As Byte

Dim Flag_rw_gezaehlt As Bit


Dim A As Byte
Dim B As Byte
Dim C As Byte
Dim D As Byte
Dim E As Word
Dim F As Byte
Dim G As Byte
Dim H As Byte


Declare Sub Sub_ausgabe_anzeige                             'gibt die aktuellen Bytes aus ohne sie zu verändern
Declare Sub Sub_ausgabe_anzeige_00
Declare Sub Sub_ausgabe_anzeige_satzpause

Declare Sub Sub_schleife_anz_start
Declare Sub Sub_schleife_anz_wahl
Declare Sub Sub_schleife_anz_00
Declare Sub Sub_schleife_anz_satzende
Declare Sub Sub_schleife_anz_satzpause
Declare Sub Sub_schleife_anz_spielende

Declare Sub Sub_gewinnsaetze_festlegen
Declare Sub Sub_seitenwahl_1
Declare Sub Sub_seitenwahl_2
Declare Sub Sub_aufschlagwahl_1
Declare Sub Sub_aufschlagwahl_2
Declare Sub Sub_zaehlen_li
Declare Sub Sub_zaehlen_re
Declare Sub Sub_ziffernwahl
Declare Sub Sub_ziffernwahl_baelle_li
Declare Sub Sub_ziffernwahl_baelle_re
Declare Sub Sub_rechnung_aufschlag
Declare Sub Sub_seitenwechsel_satzende
Declare Sub Sub_seitenwechsel_entscheid_1
Declare Sub Sub_seitenwechsel_entscheid_2
Declare Sub Sub_seitenwechsel_entscheid_3
Declare Sub Sub_saetze_hochzaehlen
Declare Sub Sub_saetze_hochzaehlen_2

Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4
Spiinit

Config Debounce = 50


      Hauptschleife:
         Do
            Select Case Var_hauptschleife 
            Case Const_anz_start : Goto Schleife_anz_start 
            Case Const_anz_wahl : Goto Schleife_anz_wahl 
            Case Const_anz_00 : Goto Schleife_anz_00
            Case Const_anz_satzende : Goto Schleife_anz_satzende 
            Case Const_anz_satzpause : Goto Schleife_anz_satzpause 
            Case Const_anz_spielende_1 : Goto Schleife_anz_spielende_1
            Case Const_anz_spielende_2 : Goto Schleife_anz_spielende_2 
            End Select
         Loop


Schleife_anz_start:
Do
      Var_ausgabearray(1) = 0                               'ev.LED's Tablau      -gfedcba
      Var_ausgabearray(2) = 0                               'rechts Sätze
      Var_ausgabearray(3) = 0                               'Bälle rechts Einer
      Var_ausgabearray(4) = 0                               'Bälle rechts Zehner
      Var_ausgabearray(5) = 0                               'G/H + Satzende + Aufschlaganzeige
      Var_ausgabearray(6) = 0                               'Bälle links Einer
      Var_ausgabearray(7) = 0                               'Bälle links Zehner
      Var_ausgabearray(8) = 0                               'links Sätze

      Leds_zaehlen = 0                                      'Tableau Bedienung
      Led_rueckwaerts = 0                                   'Tableau Bedienung
      Leds_wahl = 0                                         'Tableau Bedienung
      Led_weiter = 1                                        'Tableau Bedienung
      Leds_reset = 0                                        'Tableau Bedienung

   Gosub Sub_ausgabe_anzeige
   Debounce Ta_weiter , 0 , Sub_schleife_anz_wahl , Sub
   Goto Hauptschleife

Loop

Schleife_anz_wahl:
Do
      Var_ausgabearray(1) = 0                               'ev.LED's Tablau      -gfedcba
      Var_ausgabearray(2) = 0                               'rechts Sätze
      Var_ziffernwahl = Var_anzahl_der_gewinnsaetze
      Gosub Sub_ziffernwahl
      Var_ausgabearray(3) = Var_ziffer                      'Bälle rechts Einer
      Var_ausgabearray(4) = 0                               'Bälle rechts Zehner
      Var_ausgabearray(5) = &B00000000                      '0=heim.1=gast/.2=AUF-re/.3=Ende/.4=AUF-li .
         Var_ausgabearray(5).0 = Flag_gh                    'Flag_gh
         Var_ausgabearray(5).1 = Flag_hg                    'Flag_hg
         Var_ausgabearray(5).2 = Flag_aufschlag_li
         Var_ausgabearray(5).3 = Flag_ende
         Var_ausgabearray(5).4 = Flag_aufschlag_re
      Var_ausgabearray(6) = &B01101101                      'Bälle links Einer
      Var_ausgabearray(7) = &B00111101                      'Bälle links Zehner
      Var_ausgabearray(8) = 0                               'links Sätze

      Leds_zaehlen = 0                                      'Tableau Bedienung
      Led_rueckwaerts = 1                                   'Tableau Bedienung
      Leds_wahl = 1                                         'Tableau Bedienung
      Led_weiter = 0                                        'Tableau Bedienung
      Leds_reset = 0                                        'Tableau Bedienung
   Gosub Sub_ausgabe_anzeige

   If Var_alles_gewaehlt__weiter_moegl = 2 Then
   Led_weiter = 1
Debounce Ta_weiter , 0 , Sub_schleife_anz_satzpause , Sub
   End If

Debounce Ta_wahl_gs , 0 , Sub_gewinnsaetze_festlegen , Sub

   If Var_betaetigt_gh = 0 Then
Debounce Ta_wahl_seite_gast , 0 , Sub_seitenwahl_1 , Sub
   Else
Debounce Ta_wahl_seite_gast , 0 , Sub_seitenwahl_2 , Sub
   End If

      If Var_betaetigt_aufschlagwahl = 0 Then
Debounce Ta_wahl_seite_aufschl , 0 , Sub_aufschlagwahl_1 , Sub
   Else
Debounce Ta_wahl_seite_aufschl , 0 , Sub_aufschlagwahl_2 , Sub
   End If

   Goto Hauptschleife

Loop


Schleife_anz_00:

Do

Flag_satzende = 0
Flag_ende = 0

Debounce Ta_baelle_li , 0 , Sub_zaehlen_li , Sub
Debounce Ta_baelle_re , 0 , Sub_zaehlen_re , Sub

Gosub Sub_rechnung_aufschlag

Gosub Sub_ausgabe_anzeige_00

      Leds_zaehlen = 1                                      'Tableau Bedienung
      Led_rueckwaerts = 0                                   'Tableau Bedienung
      Leds_wahl = 0                                         'Tableau Bedienung
      Led_weiter = 0                                        'Tableau Bedienung
      Leds_reset = 0                                        'Tableau Bedienung

Pruefung_sw_vorwaerts:

A = Var_saetze_li + 1
B = Var_saetze_re + 1


If A < Var_anzahl_der_gewinnsaetze Then
Goto Kein_seitenwechsel
      Else
      If B < Var_anzahl_der_gewinnsaetze Then
      Goto Kein_seitenwechsel
            Else
            If Flag_seitenwechsel_erfolgt = 1 Then
            Goto Kein_seitenwechsel

                     Else
                     If Var_baelle_li = 5 Then
                           Zurueck1:

                           Leds_zaehlen = 0                 'Tableau Bedienung
                           Led_rueckwaerts = 0              'Tableau Bedienung
                           Leds_wahl = 0                    'Tableau Bedienung
                           Led_weiter = 1                   'Tableau Bedienung
                           Leds_reset = 0                   'Tableau Bedienung



                           Debounce Ta_weiter , 0 , Sub_seitenwechsel_entscheid_1 , Sub

                           Var_ausgabearray(6) = 0          'Blinken der"5"
                           Gosub Sub_ausgabe_anzeige        '
                           Waitms 30                        '
                           Var_ziffernwahl = Var_baelle_li  '
                           Gosub Sub_ziffernwahl_baelle_li  '
                           Gosub Sub_ausgabe_anzeige_00     '
                           Waitms 30                        '



                           Select Case C
                           Case 1 :
                           Flag_seitenwechsel_erfolgt = 1
                           Sub_seitenwechsel_entscheid_2
                           Case 0 : Goto Zurueck1
                           End Select
                           C = 0

                           Leds_zaehlen = 1                 'Tableau Bedienung
                           Led_rueckwaerts = 0              'Tableau Bedienung
                           Leds_wahl = 0                    'Tableau Bedienung
                           Led_weiter = 0                   'Tableau Bedienung
                           Leds_reset = 0                   'Tableau Bedienung


                        Else
                        If Var_baelle_re = 5 Then
                           Zurueck2:

                           Leds_zaehlen = 0                 'Tableau Bedienung
                           Led_rueckwaerts = 0              'Tableau Bedienung
                           Leds_wahl = 0                    'Tableau Bedienung
                           Led_weiter = 1                   'Tableau Bedienung
                           Leds_reset = 0                   'Tableau Bedienung

                           Debounce Ta_weiter , 0 , Sub_seitenwechsel_entscheid_1 , Sub


                           Var_ausgabearray(4) = 0          'Blinken der"5"
                           Gosub Sub_ausgabe_anzeige        '
                           Waitms 30                        '
                           Var_ziffernwahl = Var_baelle_re  '
                           Gosub Sub_ziffernwahl_baelle_re  '
                           Gosub Sub_ausgabe_anzeige_00     '
                           Waitms 30




                           Select Case C
                           Case 1 :
                           Flag_seitenwechsel_erfolgt = 1
                           Sub_seitenwechsel_entscheid_2
                           Case 0 : Goto Zurueck2
                           End Select
                           C = 0

                           Leds_zaehlen = 1                 'Tableau Bedienung
                           Led_rueckwaerts = 0              'Tableau Bedienung
                           Leds_wahl = 0                    'Tableau Bedienung
                           Led_weiter = 0                   'Tableau Bedienung
                           Leds_reset = 0                   'Tableau Bedienung


                        End If
                     End If

            End If
      End If
End If

A = 0
B = 0




Kein_seitenwechsel:

'Sub_satzendepruefung
Var_differenz_baelle = Var_baelle_li - Var_baelle_re

If Var_baelle_li > 10 Then
   Goto Differenztest
End If

If Var_baelle_re > 10 Then
   Goto Differenztest
      Else
      Goto Kein_satzende
End If

Differenztest:
If Var_differenz_baelle > 1 Then
   Flag_satzende = 1
   Var_hauptschleife = Const_anz_satzende
   Gosub Sub_saetze_hochzaehlen_2

         Else
            If Var_differenz_baelle < -1 Then
            Flag_satzende = 1
            Var_hauptschleife = Const_anz_satzende
            Gosub Sub_saetze_hochzaehlen_2
        Else
        Goto Kein_satzende
   End If
End If

Kein_satzende:

'spielendepruefung:
If Var_anzahl_der_gewinnsaetze = Var_saetze_li_2 Then
   Var_hauptschleife = Const_anz_spielende_1
   Flag_spielende = 1
End If
         If Var_anzahl_der_gewinnsaetze = Var_saetze_re_2 Then
         Var_hauptschleife = Const_anz_spielende_1
         Flag_spielende = 1
         End If




'Gosub Sub_satzendepruefung
'Gosub Sub_spielendepruefung

Flag_ende = Flag_satzende



Goto Hauptschleife

Loop


Schleife_anz_satzende:
Do

   Flag_ende = 1
   Flag_aufschlag_li = 0
   Flag_aufschlag_re = 0


      Leds_zaehlen = 0                                      'Tableau Bedienung
      Led_rueckwaerts = 0                                   'Tableau Bedienung
      Leds_wahl = 0                                         'Tableau Bedienung
      Led_weiter = 1                                        'Tableau Bedienung
      Leds_reset = 0                                        'Tableau Bedienung

   Gosub Sub_ausgabe_anzeige_00



   If Flag_spielende = 1 Then
      Debounce Ta_weiter , 0 , Sub_schleife_anz_spielende_1 , Sub
         Else
         Debounce Ta_weiter , 0 , Sub_seitenwechsel_satzende , Sub
   End If

   Goto Hauptschleife

Loop


Schleife_anz_satzpause:

Do

Gosub Sub_ausgabe_anzeige_satzpause

      Leds_zaehlen = 0                                      'Tableau Bedienung
      Led_rueckwaerts = 0                                   'Tableau Bedienung
      Leds_wahl = 0                                         'Tableau Bedienung
      Led_weiter = 1                                        'Tableau Bedienung
      Leds_reset = 0                                        'Tableau Bedienung

Debounce Ta_weiter , 0 , Sub_schleife_anz_00 , Sub

Goto Hauptschleife

Loop


Schleife_anz_spielende_1:

Do

   Flag_ende = 1
   Flag_aufschlag_li = 0
   Flag_aufschlag_re = 0


      Leds_zaehlen = 0                                      'Tableau Bedienung
      Led_rueckwaerts = 0                                   'Tableau Bedienung
      Leds_wahl = 0                                         'Tableau Bedienung
      Led_weiter = 1                                        'Tableau Bedienung
      Leds_reset = 0                                        'Tableau Bedienung

   Gosub Sub_ausgabe_anzeige_00


Debounce Ta_weiter , 0 , Sub_schleife_anz_spielende_2 , Sub

'Goto Hauptschleife

If Var_hauptschleife = Const_anz_spielende_2 Then
Goto Schleife_anz_spielende_2
End If

Loop


Schleife_anz_spielende_2:

Gosub Sub_saetze_hochzaehlen

Do

Gosub Sub_ausgabe_anzeige_satzpause


                           Leds_zaehlen = 0                 'Tableau Bedienung
                           Led_rueckwaerts = 0              'Tableau Bedienung
                           Leds_wahl = 0                    'Tableau Bedienung
                           Led_weiter = 0                   'Tableau Bedienung
                           Leds_reset = 1                   'Tableau Bedienung

'Debounce Ta_weiter , 0 , Sub_reset , Sub

If Var_hauptschleife = Const_anz_start Then
Goto Hauptschleife
End If

Loop


End

'_____________________________________________________________________________________________________________________


Sub_ausgabe_anzeige:
   Spiout Var_ausgabearray(1) , 8
Return

'_______________________________________________________________________________
Sub_ausgabe_anzeige_satzpause:

   Var_ziffernwahl = Var_baelle_li
   Gosub Sub_ziffernwahl_baelle_li


   Var_ziffernwahl = Var_baelle_re
   Gosub Sub_ziffernwahl_baelle_re


   Var_ziffernwahl = Var_saetze_li
   Gosub Sub_ziffernwahl
   Var_saetze_li_ziffer = Var_ziffer


   Var_ziffernwahl = Var_saetze_re
   Gosub Sub_ziffernwahl
   Var_saetze_re_ziffer = Var_ziffer

   Flag_ende = 1

      Var_ausgabearray(1) = 0                               'ev.LED's  -gfedcba
      Var_ausgabearray(2) = Var_saetze_re_ziffer            'rechts Sätze
      Var_ausgabearray(3) = 0                               'Bälle rechts Einer
      Var_ausgabearray(4) = 0                               'Bälle rechts Zehner
      Var_ausgabearray(5) = 0                               '0=heim.1=gast/.2=AUF-re/.3=Ende/.4=AUF-li)
         Var_ausgabearray(5).0 = Flag_gh                    'Flag_gh
         Var_ausgabearray(5).1 = Flag_hg                    'Flag_hg
         Var_ausgabearray(5).2 = 0
         Var_ausgabearray(5).3 = Flag_ende
         Var_ausgabearray(5).4 = 0
      Var_ausgabearray(6) = 0                               'Bälle links Einer
      Var_ausgabearray(7) = 0                               'Bälle links Zehner
      Var_ausgabearray(8) = Var_saetze_li_ziffer            'links Sätze



   Spiout Var_ausgabearray(1) , 8
Return

Sub_ausgabe_anzeige_00:

   Var_ziffernwahl = Var_baelle_li
   Gosub Sub_ziffernwahl_baelle_li


   Var_ziffernwahl = Var_baelle_re
   Gosub Sub_ziffernwahl_baelle_re


   Var_ziffernwahl = Var_saetze_li
   Gosub Sub_ziffernwahl
   Var_saetze_li_ziffer = Var_ziffer


   Var_ziffernwahl = Var_saetze_re
   Gosub Sub_ziffernwahl
   Var_saetze_re_ziffer = Var_ziffer


      Var_ausgabearray(1) = 0                               'ev.LED's  -gfedcba
      Var_ausgabearray(2) = Var_saetze_re_ziffer            'rechts Sätze
      Var_ausgabearray(3) = Var_einer_baelle_re             'Bälle rechts Einer
      Var_ausgabearray(4) = Var_zehner_baelle_re            'Bälle rechts Zehner
      Var_ausgabearray(5) = 0                               '0=heim.1=gast/.2=AUF-re/.3=Ende/.4=AUF-li)
         Var_ausgabearray(5).0 = Flag_gh                    'Flag_gh
         Var_ausgabearray(5).1 = Flag_hg                    'Flag_hg
         Var_ausgabearray(5).2 = Flag_aufschlag_li
         Var_ausgabearray(5).3 = Flag_ende
         Var_ausgabearray(5).4 = Flag_aufschlag_re
      Var_ausgabearray(6) = Var_einer_baelle_li             'Bälle links Einer
      Var_ausgabearray(7) = Var_zehner_baelle_li            'Bälle links Zehner
      Var_ausgabearray(8) = Var_saetze_li_ziffer            'links Sätze



   Spiout Var_ausgabearray(1) , 8
Return



'Subs für den Taster "Weiter"__________________

Sub_schleife_anz_start:
   Var_hauptschleife = Const_anz_start
Return

Sub_schleife_anz_wahl:
   Var_hauptschleife = Const_anz_wahl
Return

Sub_schleife_anz_00:
   Var_hauptschleife = Const_anz_00
Return

Sub_schleife_anz_01:
   Var_hauptschleife = Const_anz_01
Return

Sub_schleife_anz_satzende:
   Var_hauptschleife = Const_anz_satzende
Return

Sub_schleife_anz_satzpause:
   Var_hauptschleife = Const_anz_satzpause
Return

Sub_schleife_anz_seitenwechsel:
   Var_hauptschleife = Const_anz_seitenwechsel
Return

Sub_schleife_anz_spielende_1:
   Var_hauptschleife = Const_anz_spielende_1
Return

Sub_schleife_anz_spielende_2:
   Var_hauptschleife = Const_anz_spielende_2
Return


'Subs "Wahl"______________

Sub_gewinnsaetze_festlegen:
   If Ta_rueckwaerts = 0 Then
      If Var_anzahl_der_gewinnsaetze > 1 Then
      Var_anzahl_der_gewinnsaetze = Var_anzahl_der_gewinnsaetze - 1
      End If
   End If

   If Ta_rueckwaerts = 1 Then
      If Var_anzahl_der_gewinnsaetze < 9 Then
      Var_anzahl_der_gewinnsaetze = Var_anzahl_der_gewinnsaetze + 1
      End If
   End If
Return


Sub_seitenwahl_1:                                           'wenn die Seitenwahl noch nicht betätigt wurde
   Var_betaetigt_gh = 1

   'Flag_gh_start = 1

   Var_summe_gs = Var_saetze_li + Var_saetze_re

   Flag_gh = Var_summe_gs.0
   Flag_hg = Not Flag_gh

Var_alles_gewaehlt__weiter_moegl = Var_betaetigt_gh + Var_betaetigt_aufschlagwahl

Return


Sub_seitenwahl_2:                                           'wenn die Seitenwahl schon einmal erfolgt ist
   Var_betaetigt_gh = 1
   Var_alles_gewaehlt__weiter_moegl = Var_betaetigt_gh + Var_betaetigt_aufschlagwahl

   Toggle Flag_gh_start
   'Toggle Flag_hg_start

   Var_summe_gs = Var_saetze_li + Var_saetze_re
   Var_seite_im_spiel_vor_sw_ent = Var_summe_gs + Flag_gh_start
   Var_seite_im_spiel_nach_sw_ent = Var_seite_im_spiel_vor_sw_ent + Flag_seitenwechsel_erfolgt

   Flag_gh = Var_seite_im_spiel_nach_sw_ent.0
   Flag_hg = Not Flag_gh


Return


Sub_aufschlagwahl_1:
   Var_betaetigt_aufschlagwahl = 1
   Flag_aufschlag = 1
   Flag_aufschlag_li = Flag_aufschlag
   Var_alles_gewaehlt__weiter_moegl = Var_betaetigt_gh + Var_betaetigt_aufschlagwahl
Return


Sub_aufschlagwahl_2:
   Var_betaetigt_aufschlagwahl = 1
   Var_alles_gewaehlt__weiter_moegl = Var_betaetigt_gh + Var_betaetigt_aufschlagwahl
   Toggle Flag_aufschlag
   Flag_aufschlag_li = Flag_aufschlag
   Flag_aufschlag_re = Not Flag_aufschlag_li

   'Toggle Flag_aufschlag_re
Return


Sub_ziffernwahl:

Select Case Var_ziffernwahl

   Case 0 : Var_ziffer = &B00111111
   Case 1 : Var_ziffer = &B00000110
   Case 2 : Var_ziffer = &B01011011
   Case 3 : Var_ziffer = &B01001111
   Case 4 : Var_ziffer = &B01100110
   Case 5 : Var_ziffer = &B01101101
   Case 6 : Var_ziffer = &B01111101
   Case 7 : Var_ziffer = &B00000111
   Case 8 : Var_ziffer = &B01111111
   Case 9 : Var_ziffer = &B01101111
   Case Else : Var_ziffer = &B01000000
End Select
Return


Sub_ziffernwahl_baelle_li:


Var_einer_baelle_li = Var_ziffernwahl Mod 10
Var_ziffernwahl = Var_ziffernwahl - Var_einer_baelle_li
Var_ziffernwahl = Var_ziffernwahl / 10

Var_zehner_baelle_li = Var_ziffernwahl Mod 10
Var_ziffernwahl = Var_ziffernwahl - Var_zehner_baelle_li
Var_ziffernwahl = Var_ziffernwahl / 10

If Var_baelle_li < 10 Then

Select Case Var_einer_baelle_li
   Case 0 : Var_einer_baelle_li = &B00111111
   Case 1 : Var_einer_baelle_li = &B00000110
   Case 2 : Var_einer_baelle_li = &B01011011
   Case 3 : Var_einer_baelle_li = &B01001111
   Case 4 : Var_einer_baelle_li = &B01100110
   Case 5 : Var_einer_baelle_li = &B01101101
   Case 6 : Var_einer_baelle_li = &B01111101
   Case 7 : Var_einer_baelle_li = &B00000111
   Case 8 : Var_einer_baelle_li = &B01111111
   Case 9 : Var_einer_baelle_li = &B01101111
   Case Else : Var_einer_baelle_li = &B01000000
End Select

Var_zehner_baelle_li = 0

Else

Select Case Var_einer_baelle_li
   Case 0 : Var_einer_baelle_li = &B00111111
   Case 1 : Var_einer_baelle_li = &B00000110
   Case 2 : Var_einer_baelle_li = &B01011011
   Case 3 : Var_einer_baelle_li = &B01001111
   Case 4 : Var_einer_baelle_li = &B01100110
   Case 5 : Var_einer_baelle_li = &B01101101
   Case 6 : Var_einer_baelle_li = &B01111101
   Case 7 : Var_einer_baelle_li = &B00000111
   Case 8 : Var_einer_baelle_li = &B01111111
   Case 9 : Var_einer_baelle_li = &B01101111
   Case Else : Var_einer_baelle_li = &B01000000
End Select

Select Case Var_zehner_baelle_li
   Case 0 : Var_zehner_baelle_li = &B00111111
   Case 1 : Var_zehner_baelle_li = &B00000110
   Case 2 : Var_zehner_baelle_li = &B01011011
   Case 3 : Var_zehner_baelle_li = &B01001111
   Case 4 : Var_zehner_baelle_li = &B01100110
   Case 5 : Var_zehner_baelle_li = &B01101101
   Case 6 : Var_zehner_baelle_li = &B01111101
   Case 7 : Var_zehner_baelle_li = &B00000111
   Case 8 : Var_zehner_baelle_li = &B01111111
   Case 9 : Var_zehner_baelle_li = &B01101111
   Case Else : Var_zehner_baelle_li = &B01000000
End Select

End If

   Return


Sub_ziffernwahl_baelle_re:


Var_einer_baelle_re = Var_ziffernwahl Mod 10
Var_ziffernwahl = Var_ziffernwahl - Var_einer_baelle_re
Var_ziffernwahl = Var_ziffernwahl / 10

Var_zehner_baelle_re = Var_ziffernwahl Mod 10
Var_ziffernwahl = Var_ziffernwahl - Var_zehner_baelle_re
Var_ziffernwahl = Var_ziffernwahl / 10

If Var_baelle_re < 10 Then




Select Case Var_einer_baelle_re
   Case 0 : Var_zehner_baelle_re = &B00111111
   Case 1 : Var_zehner_baelle_re = &B00000110
   Case 2 : Var_zehner_baelle_re = &B01011011
   Case 3 : Var_zehner_baelle_re = &B01001111
   Case 4 : Var_zehner_baelle_re = &B01100110
   Case 5 : Var_zehner_baelle_re = &B01101101
   Case 6 : Var_zehner_baelle_re = &B01111101
   Case 7 : Var_zehner_baelle_re = &B00000111
   Case 8 : Var_zehner_baelle_re = &B01111111
   Case 9 : Var_zehner_baelle_re = &B01101111
   Case Else : Var_zehner_baelle_re = &B01000000
End Select

Var_einer_baelle_re = 0

Else

Select Case Var_einer_baelle_re
   Case 0 : Var_einer_baelle_re = &B00111111
   Case 1 : Var_einer_baelle_re = &B00000110
   Case 2 : Var_einer_baelle_re = &B01011011
   Case 3 : Var_einer_baelle_re = &B01001111
   Case 4 : Var_einer_baelle_re = &B01100110
   Case 5 : Var_einer_baelle_re = &B01101101
   Case 6 : Var_einer_baelle_re = &B01111101
   Case 7 : Var_einer_baelle_re = &B00000111
   Case 8 : Var_einer_baelle_re = &B01111111
   Case 9 : Var_einer_baelle_re = &B01101111
   Case Else : Var_einer_baelle_re = &B01000000
End Select

Select Case Var_zehner_baelle_re
   Case 0 : Var_zehner_baelle_re = &B00111111
   Case 1 : Var_zehner_baelle_re = &B00000110
   Case 2 : Var_zehner_baelle_re = &B01011011
   Case 3 : Var_zehner_baelle_re = &B01001111
   Case 4 : Var_zehner_baelle_re = &B01100110
   Case 5 : Var_zehner_baelle_re = &B01101101
   Case 6 : Var_zehner_baelle_re = &B01111101
   Case 7 : Var_zehner_baelle_re = &B00000111
   Case 8 : Var_zehner_baelle_re = &B01111111
   Case 9 : Var_zehner_baelle_re = &B01101111
   Case Else : Var_zehner_baelle_re = &B01000000
End Select

End If


Return


Sub_zaehlen_li:
   If Ta_rueckwaerts = 0 Then
      If Var_baelle_li > 0 Then
      Decr Var_baelle_li
      Flag_rw_gezaehlt = 1
   End If
   End If
   If Ta_rueckwaerts = 1 Then
      Incr Var_baelle_li
      Flag_rw_gezaehlt = 0
   End If
Return


Sub_zaehlen_re:
   If Ta_rueckwaerts = 0 Then
      If Var_baelle_re > 0 Then
      Decr Var_baelle_re
      Flag_rw_gezaehlt = 1
   End If
   End If
   If Ta_rueckwaerts = 1 Then
      Incr Var_baelle_re
      Flag_rw_gezaehlt = 0
   End If
Return


Sub_rechnung_aufschlag:

Var_summe_baelle = Var_baelle_li + Var_baelle_re

Flag_aufschlag_2 = Flag_aufschlag + Flag_seitenwechsel_erfolgt

If Var_summe_baelle > 19 Then
   Goto Satzverlaengerung
   Else
      If Flag_aufschlag_2.0 = 0 Then
      Flag_aufschlag_li = Var_summe_baelle.1
      Flag_aufschlag_re = Not Flag_aufschlag_li
      Goto Ende_aufschlagrechnung
   Else
      If Flag_aufschlag_2.0 = 1 Then
      Flag_aufschlag_re = Var_summe_baelle.1
      Flag_aufschlag_li = Not Flag_aufschlag_re
      Goto Ende_aufschlagrechnung
   End If
   End If
End If

Satzverlaengerung:

   If Flag_aufschlag_2.0 = 0 Then
      Flag_aufschlag_li = Var_summe_baelle.0
      Flag_aufschlag_re = Not Flag_aufschlag_li
   End If

   If Flag_aufschlag_2.0 = 1 Then
      Flag_aufschlag_re = Var_summe_baelle.0
      Flag_aufschlag_li = Not Flag_aufschlag_re
   End If

Ende_aufschlagrechnung:

Return


Sub_seitenwechsel_satzende:

'If Var_baelle_li > Var_baelle_re Then
'Incr Var_saetze_li
'End If

'If Var_baelle_re > Var_baelle_li Then
'Incr Var_saetze_re
'End If

'Return


Gosub Sub_saetze_hochzaehlen


A = Var_saetze_li                                           'Sätze Tauschen
B = Var_saetze_re
Var_saetze_li = B
Var_saetze_re = A
A = 0
B = 0

A = Var_saetze_li_2                                         'Sätze Tauschen_2
B = Var_saetze_re_2
Var_saetze_li_2 = B
Var_saetze_re_2 = A
A = 0
B = 0






'Toggle Flag_gh                                              'Heim/Gast tauschen
'Toggle Flag_hg
   Var_summe_gs = Var_saetze_li + Var_saetze_re
   Var_seite_im_spiel_vor_sw_ent = Var_summe_gs + Flag_gh_start
   Var_seite_im_spiel_nach_sw_ent = Var_seite_im_spiel_vor_sw_ent + Flag_seitenwechsel_erfolgt

   Flag_gh = Var_seite_im_spiel_nach_sw_ent.0
   Flag_hg = Not Flag_gh



Var_baelle_li = 0
Var_baelle_re = 0

Var_hauptschleife = Const_anz_satzpause


Return


Sub_saetze_hochzaehlen:

If Var_baelle_li > Var_baelle_re Then                       'Sätze weiterzählen
Incr Var_saetze_li
End If
If Var_baelle_re > Var_baelle_li Then
Incr Var_saetze_re
End If

Return


Sub_saetze_hochzaehlen_2:

If Var_baelle_li > Var_baelle_re Then                       'Sätze weiterzählen
Incr Var_saetze_li_2
End If
If Var_baelle_re > Var_baelle_li Then
Incr Var_saetze_re_2
End If

Return


Sub_seitenwechsel_entscheid_1:

C = 1

Return


Sub_seitenwechsel_entscheid_2:

   'Flag_seitenwechsel_erfolgt = 1

   Var_summe_gs = Var_saetze_li + Var_saetze_re
   Var_seite_im_spiel_vor_sw_ent = Var_summe_gs + Flag_gh_start
   Var_seite_im_spiel_nach_sw_ent = Var_seite_im_spiel_vor_sw_ent + Flag_seitenwechsel_erfolgt

   Flag_gh = Var_seite_im_spiel_nach_sw_ent.0
   Flag_hg = Not Flag_gh

   A = Var_baelle_li                                        'Bälle Tauschen
   B = Var_baelle_re
   Var_baelle_li = B
   Var_baelle_re = A
   A = 0
   B = 0


Return

Sub_seitenwechsel_entscheid_3:

   'Flag_seitenwechsel_erfolgt = 1

   Var_summe_gs = Var_saetze_li + Var_saetze_re
   Var_seite_im_spiel_vor_sw_ent = Var_summe_gs + Flag_gh_start
   Var_seite_im_spiel_nach_sw_ent = Var_seite_im_spiel_vor_sw_ent - Flag_seitenwechsel_erfolgt

   Flag_gh = Var_seite_im_spiel_nach_sw_ent.0
   Flag_hg = Not Flag_gh

   A = Var_baelle_li                                        'Bälle Tauschen
   B = Var_baelle_re
   Var_baelle_li = B
   Var_baelle_re = A
   A = 0
   B = 0
Return


Timer1_isr:
'nop
Timer1 = Timer1startwert
Toggle Leds_reset
Return