Also die Wait Schleifen sind mit einem If,.. getrennt also maximal 200mS Wartezeit.
Die ISR des Timers ist auf 1 sec eingestellt. Heißt der AVR hat noch 800mS zum rechnen der Hauptschleife übrig.
Sagen wir dank der vielen If schleifen 780 rum.
Das dumme ist jez halt das ich meine Hauptschleife wie eine Schrittkette verwenden will, was auch hervorragend funktioniert.

Heist alles was mit der Zeit also der "Uhr" zu tun hat muss in diese ISR rein.
Oder hat jemand eine bessere Idee ? wäre super ^^

Das Wait 200ms hat den Sinn einen Port blinken zu lassen unabhängig davon was die Hauptschleife macht.
Deswegen sind ja noch mehr if schleifen drin um festzulegen wann dieser Port Blinkt.
200ms müssen min sein da an diesem Port ein kleiner Pieper hängt und unter dieser Zeit macht der keinen Mucks.

Bin am überlegen das ganze ding nochmal neu zu schreiben aber hoffe einfach das momentane Programm zu "retten" ^^.

Also das komplette Programm braucht man nicht das ist etwas länger ^^
(81% des AVR)
Aber ok hier der Relevante Programm Teil das eigentliche ist viel länger:



Code:
                             '-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'----------------------------- LCD "Eieruhr" -----------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'------- Voreinstellungen
'-------------------------------------------------------------------------------
$lib "lcd4busy.lib"                                         'ersetzt die Standard LCD Bibliothek
$regfile = "m8535.dat"                                      'ATMega8535
$crystal = 8000000                                          'Quarz: 8.0000 MHz
'-------------------------------------------------------------------------------
Config Timer1 = Timer , Prescale = 256                      'Konfiguriere Timer1
Enable Timer1                                               'schalte den Timer1 ein
On Timer1 Isr_von_timer1                                    'verzweige bei Timer1 überlauf zu   Isr_von_Timer1
Enable Interrupts
Timer1 = 34285
Wait 1
'-------------------------------------------------------------------------------
'------- LCD Config
'-------------------------------------------------------------------------------
 Config Lcd = 20 * 4                                        'wir verwenden ein 4 x 20 Zeichen Display
 Const _lcdport = Portd
 Const _lcdddr = Ddrd
 Const _lcdin = Pind
 Const _lcd_e = 3
 Const _lcd_rw = 2
 Const _lcd_rs = 1
 Cls
 Display On
 Cursor Off
 Initlcd
 Delay
 Initlcd
 Restart:

'-------------------------------------------------------------------------------
'------- Port Config
'-------------------------------------------------------------------------------
'------- Output
'-------------------------------------------------------------------------------
Config Porta.7 = Output
Config Portc.4 = Output
Config Portc.0 = Output
Config Portb.1 = Output
Config Portb.2 = Output
Portb.1 = 0
Portb.2 = 0
Portc.4 = 0                                                 'PC5
Portc.0 = 0                                                 'PC6
Porta.7 = 0                                                 'PC7
'-------------------------------------------------------------------------------
'------- Input
'-------------------------------------------------------------------------------
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.5 = Input
Config Pinc.6 = Input
Config Pinc.7 = Input

'-------------------------------------------------------------------------------
'------- Variablen Config
'-------------------------------------------------------------------------------
'------- Spiel Start Optionen
Dim Hms(7) As Byte
Dim Hms_max(6) As Byte
Dim Hms_frg As Bit
'------- Ensch. Optionen
Dim Entsch(4) As Byte
Entsch(1) = 74
Entsch(2) = 74
Entsch(3) = 74
Entsch(4) = 78
'------- Zünder Optionen
Dim Zuend(3) As Byte
Zuend(1) = 2                                                '1 = immer 2 = 10sec 3= nie     Blink Port
Zuend(2) = 74                                               '74 = J 78 = N
Zuend(3) = 1                                                '1 =zünden 2=Warnen 3=Nichts
'------- Karten Optionen
Dim Karten(12) As Byte


'------- Variablen Wert verteilen
For Nr = 1 To 6
Hms(nr) = 0
Karten(nr) = Nr
Next Nr
Hms(2) = 1
Hms(7) = 9

Hms_max(1) = 2
Hms_max(2) = 4
Hms_max(3) = 5
Hms_max(4) = 9
Hms_max(5) = 5
Hms_max(6) = 9


Karten(11) = 74
Karten(12) = 0
Entsch(1) = 74
Entsch(2) = 74
Entsch(3) = 74
Entsch(4) = 78

Karten(5) = 1
Karten(6) = 2
Karten(7) = 3
Karten(8) = 4
Karten(9) = 1
Karten(10) = 2
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'------- Bomben STart
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
 Cls                                                        'loesche das LCD Display
Delay
 Locate 1 , 5
 Lcd "Simulation's"
 Locate 2 , 8
 Lcd "Bombe"
 Locate 3 , 6
 Lcd "beliebige"
 Locate 4 , 4
 Lcd "Taste drücken"
 Cursor Off
'-------------------------------------------------------------------------------
'------- Tasten Abfrage
Gosub Tast_a
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'------- Start Optionen
'-------------------------------------------------------------------------------
Menu:
Hms_frg = 0
'-------------------------------------------------------------------------------
 Cls                                                        'loesche das LCD Display
Delay
 Locate 1 , 1
 Lcd "-1- Start"
 Locate 2 , 1
 Lcd "-2- Entschärfung Opt"
 Locate 3 , 1
 Lcd "-3- Zünder Opt"
 Locate 4 , 1
 Lcd "-4- Karten Opt"
 Cursor Off
'-------------------------------------------------------------------------------
'------- Tasten Abfrage
Gosub Tast_a
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'------- 1 = Start Optioenn => Zeit Einstellen
'-------------------------------------------------------------------------------
If Tstaa = 1 Then
Cls
 Locate 1 , 4
 Lcd "Start Optionen"
 Locate 2 , 3
 Lcd "Zeit:"
 Locate 4 , 1
 Lcd "*=Start"
 Locate 4 , 16
 Lcd "#=ESC"
Cursor Blink
Nr = 0
Hms(7) = 9
Do
 Locate 2 , 9
 Lcd Hms(1) ; Hms(2) ; ":" ; Hms(3) ; Hms(4) ; ":" ; Hms(5) ; Hms(6)       'String auf Display anzeigen
 Locate 2 , Hms(7)

 Incr Nr
Hms(7) = 9 + Nr
If Nr > 1 Then Incr Hms(7)
If Nr > 3 Then Incr Hms(7)
Gosub Tast_a
If Tstaa = 11 Then Tstaa = 0
If Tstaa = 12 Then Goto Menu


'-------------------------------------------------------------------------------
'------- Eigentliche Hauptschleife
'------- Untermenu von Taster 1
'-------------------------------------------------------------------------------
If Tstaa = 10 Then
Dim Bod_counter As Word                                     'dauert des rellativ genauesn wertes   UNWICHTIG
 Cursor Noblink
Cls
 Locate 1 , 6
 Lcd "Rest Zeit:"
 Locate 2 , 7
 Lcd Hms(1) ; Hms(2) ; ":" ; Hms(3) ; Hms(4) ; ":" ; Hms(5) ; Hms(6)       'ANZEIGE der HMS Werte
    Locate 3 , 4                                            'Cursor weg

'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Do


If Tstaa = 11 Then                                          'hier ADV Wert Abfrage
   Incr Bod_counter
   Waitms 1

'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
  If Bod_counter > 500 Then
'-------------------------------------------------------------------------------
    Locate 3 , 4                                            'Cursor auf 1 Zeile, 1 Spalte
    Lcd " <1> Taste     "                                   'String auf Display anzeigen
    Locate 4 , 4                                            'Cursor auf 1 Zeile, 1 Spalte
    Lcd "   drücken!    "                                   'String auf Display anzeigen
'-------------------------------------------------------------------------------
  Do
  'Avr Abfrage wegen Hochheben des Kastens
  Loop Until Pinc.7 = 1
'-------------------------------------------------------------------------------


    Locate 3 , 4                                            'Cursor auf 1 Zeile, 1 Spalte
    Lcd "Metall Taster "                                    'String auf Display anzeigen
    Locate 4 , 4                                            'Cursor auf 1 Zeile, 1 Spalte
    Lcd "   drücken!    "                                   'String auf Display anzeigen
    Hms_frg = 1
    Wait 5
Do
     Locate 2 , 7                                           'Cursor auf 1 Zeile, 1 Spalte
 Lcd Hms(1) ; Hms(2) ; ":" ; Hms(3) ; Hms(4) ; ":" ; Hms(5) ; Hms(6)       'String auf Display anzeigen
 Waitms 100

  If Bumm = 1 Then
 Portb.2 = 1
 Bumm = 1
 End If

 Loop
    Goto Memmory

  End If
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

Else


 Locate 3 , 5                                               'Cursor auf 1 Zeile, 1 Spalte
 Lcd "warte auf"                                            'String auf Display anzeigen
 Locate 4 , 5                                               'Cursor auf 1 Zeile, 1 Spalte
 Lcd "Bodentaster"                                          'String auf Display anzeigen
Bod_counter = 0
Hms_frg = 0
 Gosub Tast_a
 End If
Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

Goto Menu
'-------------------------------------------------------------------------------
End If
'-------------------------------------------------------------------------------
Hms(nr) = Tstaa
If Hms(nr) > Hms_max(nr) Then Hms(nr) = Hms_max(nr)
If Nr = 6 Then
Nr = 0
Hms(7) = 9
End If
Loop
End If




'-------------------------------------------------------------------------------
'------- Taste über 4 gedrückt => zurück zum Menu
'-------------------------------------------------------------------------------
If Tstaa > 4 Then Goto Menu
Goto Menu

Loop
'-------------------------------------------------------------------------------
'------- Timer 1 ISR
'-------------------------------------------------------------------------------
Isr_von_timer1:                                             'ISR von Timer1
Dim Nr_z(2) As Byte                                         'zusammenzähl Variable
Timer1 = 34285                                              'Timer auf 1 Sec einstellen
If Hms_frg = 1 Then                                         'freigaben Abfrage

If Hms(6) = 0 Then                                          'fang von hinten an
   Hms(6) = Hms_max(6)

      If Hms(5) = 0 Then                                    'Ziffer 5 = 0 => auf max(5) setzen
         Hms(5) = Hms_max(5)
         If Hms(4) = 0 Then                                 'Ziffer 4 = 0 => auf max(4) setzen
            Hms(4) = Hms_max(4)
            If Hms(3) = 0 Then
               Hms(3) = Hms_max(3)                          'Ziffer 3 = 0 => auf max(3) setzen

               If Hms(2) = 0 Then                           'Ziffer 2 = 0 => auf max(2) setzen
                  Hms(2) = Hms_max(2)
                  If Hms(1) = 0 Then                        'Ziffer 1 = 0 => auf max(1) setzen
                  Hms_frg = 0
                  Bumm = 1                                  'Alles 0 Ende Verlauf
                     Cls

                  Else
                     Decr Hms(1)
                  End If

               Else
                  Decr Hms(2)
               End If
            Else
               Decr Hms(3)
            End If
         Else
            Decr Hms(4)
         End If

      Else
         Decr Hms(5)
      End If

Else
   Decr Hms(6)
End If


If Zuend(1) < 3 Then
If Zuend(1) = 1 Then
Portb.1 = 1
Waitms 200
Portb.1 = 0
Else
Nr_z(2) = 0
For Nr_z(1) = 1 To 5
Nr_z(2) = Nr_z(2) + Hms(nr_z(1))
Next Nr_z(1)
If Nr_z(2) = 0 Then
Portb.1 = 1
Waitms 200
Portb.1 = 0
End If
End If
End If

End If



Return
End





'-------------------------------------------------------------------------------
'------- Tastatur Auswertung
'-------------------------------------------------------------------------------
Tast_a:
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Dim Freigabe As Bit
Freigabe = 0
Tsta = 13
'-------------------------------------------------------------------------------
Do
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
Do
'-------------------------------------------------------------------------------
Tsta = 13
If Pinc.7 = 1 Then

Tsta = 1
Tstaa_z = 1
Tstaa_nr = 8
End If
If Pinc.6 = 1 Then
Tsta = 2
Tstaa_z = 1
Tstaa_nr = 10
End If
If Pinc.5 = 1 Then
Tsta = 3
Tstaa_z = 1
Tstaa_nr = 12
End If
'-------------------------------------------------------------------------------
Porta.7 = 1
'-------------------------------------------------------------------------------
If Pinc.3 = 1 Then
Tsta = 4
Tstaa_z = 2
Tstaa_nr = 8
End If
If Pinc.2 = 1 Then
Tsta = 7
Tstaa_z = 3
Tstaa_nr = 8
End If
If Pinc.1 = 1 Then
Tsta = 10
Tstaa_z = 4
Tstaa_nr = 8
End If
'-------------------------------------------------------------------------------
Porta.7 = 0
'-------------------------------------------------------------------------------
Portc.0 = 1
'-------------------------------------------------------------------------------
If Pinc.3 = 1 Then
Tsta = 5
Tstaa_z = 2
Tstaa_nr = 10
End If
If Pinc.2 = 1 Then
Tsta = 8
Tstaa_z = 3
Tstaa_nr = 10
End If
If Pinc.1 = 1 Then
Tsta = 11
Tstaa_z = 4
Tstaa_nr = 10
End If
'-------------------------------------------------------------------------------
Portc.0 = 0
'-------------------------------------------------------------------------------
Portc.4 = 1
'-------------------------------------------------------------------------------
If Pinc.3 = 1 Then
Tsta = 6
Tstaa_z = 2
Tstaa_nr = 12
End If
If Pinc.2 = 1 Then
Tsta = 9
Tstaa_z = 3
Tstaa_nr = 12
End If
If Pinc.1 = 1 Then
Tsta = 12
Tstaa_z = 4
Tstaa_nr = 12
End If
'-------------------------------------------------------------------------------
Portc.4 = 0                                                 'PC5
Portc.0 = 0                                                 'PC6
Porta.7 = 0                                                 'PC7
'-------------------------------------------------------------------------------
Loop Until Tsta = 13 Or Freigabe = 1
Freigabe = 1
'-------------------------------------------------------------------------------
Incr Random
If Random > 6 Then Random = 1
Loop Until Tsta < 13
Tstaa = Tsta
Return