naja, der timer ist auf 0,001 eingestellt und setzt ein flag. Ist dieses gesetzt, dann wird im Main-Teil eine if-Schleife durchlaufen und ein paar Zeitzähler erhöht.

und anhand dieser Zähler wird dann sowohl der ADC (alle 10ms) als auch die Display-Ausgabe (alle 500ms) durchgeführt - so zumindest die Theorie. In der Praxis kommt halt ein zigfaches an Ausführungszeit herraus.


Da Timer1 mit Icp1 und Ovf1, sowie RS232 (9600) bestens funktionieren, habe ich die Hoffnung noch nicht aufgegeben, daß ich den Rest auch irgendwie noch gerade gebogen bekomme.

Hier mal das Grundgerüst
Code:
Do 

If H_flag = 1 Then            'alle 0,001Sek ausführen 
   Incr H                          'Zeitzähler Displayanzeige 
   Incr H1                        ' Zeitzähler für ADC-Auswertung
   Incr Rr                         'Zeitzähler allgemein 
   H_flag = 0 
 End If 



If H1 = 10 Then                        'die Getadc-Anweisungen fressen Zeit
      Ad0 = 0
      For X = 1 To 16                                      
         Mtemp = Getadc(0)
         Ad0 = Ad0 + Mtemp
      Next X
      Shift Ad0 , Right , 4 

      Ad0 = 1
      For X = 1 To 16                                     
         Mtemp = Getadc(1)
         Ad1 = Ad1 + Mtemp
      Next X
      Shift Ad1 , Right , 4


      Ad0 = 2
      For X = 1 To 16                                       
         Mtemp = Getadc(2)
         Ad2 = Ad2 + Mtemp
      Next X
      Shift Ad2 , Right , 4

      Ad3 = 0
      For X = 1 To 16                                       
         Mtemp = Getadc(3)
         Ad3 = Ad3 + Mtemp
      Next X
      Shift Ad3 , Right , 4


       Bissel Ganzzahlrechnungungen mit AD0-AD3

       H1 = 0
End If




If H = 500 Then                              'alle 0,5Sek anzeigen 
    Locate 1, 1 
    Lcd Rr

    Zeige noch einiges an auf dem Display
 
    H = 0 
End If                                                    

Loop 

End 


Timer0_isr: 
   Load Timer0 , Ticks0 
     H_flag = 1 'alle 0,001 flag setzen 
Return
RR müßte ja vom Start ab innerhalb einer Minute 60000 groß sein (rr wird alle 0,001 Sek um 1 erhöht), ist aber bei vollem code 18000, also nicht einmal ein 3tel.

Wenn ich die Schleifen für die 16Messungen weglasse auf 4 erniedriege, ist RR 34500, also fast 50%.

Lasse ich die Getadc-Anweisungen komplett weg, komme ich auf RR 50000

Lasse ich alles weg, nur die Zählerhochzähler und eine einfache Display ausgabe ohne Rechnen etc komme ich gerade mal auf 59000.
Sobald aber Code hinzukommt, sinkt die Zahl.

Und das finde ich schon arg krass, das kann es nicht sein, oder?



aber irgendwas sollte man wirklich auslagern, sonst wartet sich der µC dumm
Was meinst du damit genau?
Ich dachte der MC ist im "Leerlauf" und wenn der gewünschte Zeitpunkt erreicht wird, dann macht er mal schnell ein paar Befehle - oder ist der Ansatz von mir da Falsch?

Wie soll zb sonst programmiert werden, daß nach xxZeit YYY ausgeführt wird?