hab das Programm geändert - aber es lief vorher auch schon: hab es aber immer nur ein paar Minuten getestet...

Aber ich möchte es natürlich nicht riskieren das der µC sich "aufhängt"

Code:
'-------------------------------------------------------------------------------
'Konfiguration µC:
$regfile = "m32def.dat"                                     'AT-Mega32
$crystal = 14745600                                         'Quarz: 14,7456 MHz
$baud = 9600                                                'Baudrate definieren

$hwstack = 80                                               ' default use 32 for the hardware stack
$swstack = 80                                               ' default use 10 for the SW stack
$framesize = 80                                             ' default use 40 for the frame space


'-------------------------------------------------------------------------------
'Ein- Ausgänge:

Ddra = &B00000000                                           '1 Ausgang, 0 Eingang = Pin PA7-0
Ddrb = &B11111111                                           '1 Ausgang, 0 Eingang = Pin PB7-0
Ddrc = &B11111111                                           '1 Ausgang, 0 Eingang = Pin PC7-0
Ddrd = &B01111111                                           '1 Ausgang, 0 Eingang = Pin PD7-0

Porta = &B00000000                                          '1 = Pullup
Portb = &B00000000                                          '1 = Pullup
Portc = &B11111111                                          '1 = Pullup
Portd = &B00000000                                          '1 = Pullup

'-------------------------------------------------------------------------------
'Timer1 = 16 Bit
Config Timer1 = Timer , Prescale = 64                       'Teiler 1/8/64/256/1024
Enable Timer1                                               'timer einschalten
Const Timer1vorgabe = 7936                                  '7936 = 4 mal pro Sekunde
Timer1 = Timer1vorgabe
On Timer1 Ontimer1overflow                                  'Unteprogramm aufrufen


'-------------------------------------------------------------------------------
'Analogmessung:
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc                                                   'Starte analog Messung


'-------------------------------------------------------------------------------
'USB Confi!!!!

Echo Off                                                    '///für USB-Stick
Open "com1:" For Binary As #1                               '///für USB-Stick

'Dim Samples As Word                                         'Anzahl der Messungen
Dim Delayms As Long                                         'Messintervall in ms (Long bis 2.147.483.647)
Dim Channels As Word                                        'Anzahl der Messkanäle (8Kanäle -> 0-7)(Word bis 65535)
Dim N As Integer
Dim I As Integer
Dim L As Integer
Dim S As String * 40
Dim Ad As Integer
Dim Messung As Long                                         'Anzahl der gemessenen Werte (Long bis 2.147.483.647)

Dim Wartezeit As Long                                       'Wartezeit über Timer

Dim Auslesen_ok As Bit                                      'ausleseroutine erfolgreich
Dim Logging As Bit                                          '1 = Daten werden aufgezeichnet

'-------------------------------------------------------------------------------
'Vor Programmstart:

Auslesen_ok = 0
Logging = 0
Wartezeit = 999
Delayms = 0



Start Adc                                                   'Analogmessung starten
Stop Timer1



'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

Do
'_______________________________________________________________________________
'Reset
If Pind.7 = 0 Then                                          'RESET
Auslesen_ok = 0                                             'Speicher zurücksetzen
End If

'_______________________________________________________________________________
'Auslesen
If Auslesen_ok = 0 Then
Logging = 0
Messung = 0                                                 'Zähler für Messungen zurücksetzen
Portb.0 = 0                                                 'schreib LED aus
Auslesen_ok = 0                                             'Speicher zurücksetzen
Gosub Usb_auslesen
End If

'_______________________________________________________________________________
'speichern
If Logging = 1 Then
Logging = 0
Gosub Usb_schreiben
End If


Loop

'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------
'ENDE - Hauptprogramm Do...Loop
'-------------------------------------------------------------------------------
'-------------------------------------------------------------------------------

Usb_auslesen:

Stop Timer1

Do
  Input S
Loop Until S = "D:\>"                                       'USB Controller abfragen, bis D:\> gesendet wird

Waitms 1000

Print "rd todo.txt" + Chr(13);                              'todo.txt Datei LESEN

Input Delayms                                               'Wartezeit zwischen den Messungen aus Datei übernehmen
Get #1 , L
Input Channels                                              'Anzahl der Messkanäle aus Datei übernehmen
Get #1 , L
Input S

Auslesen_ok = 1
Enable Interrupts
Start Timer1

Return

'-------------------------------------------------------------------------------

Usb_schreiben:

Print "OPW Log.txt" + Chr(13);                              'Datei Log.txt öffnen
Input S
Portb.0 = 1                                                 'schreib LED an
Incr Messung
  S = Str(messung) + Chr(9)
  For I = 0 To Channels                                     'Kanäle 0-7 MAX
    Ad = Getadc(i)                                          'hole Analogwert von Kanal = (Variable "I")
    S = S + Str(ad)                                         'S + aktuellen Analogkanal
    If I < Channels Then S = S + Chr(9)                     'wenn noch nicht alle Kanäle abgefragt wurden kommt ein Chr(9) = Tab drann!!!
  Next I
  S = S + Chr(13) + Chr(10)                                 'zum Schluss noch Zeichen 13+10 Carriage Return + Line Feed
  L = Len(s)                                                'gibt die Länge von String "S" wieder
  Print "WRF ";                                             'Befehl um in die geöffnete Datei zu schreiben
  Put #1 , 0
  Put #1 , 0
  Put #1 , 0
  Put #1 , L                                                'L ist die Länge vom String S
  Put #1 , 13
  Print S ;
  Input S


Print "CLF log.txt" + Chr(13);                              'Datei log.txt schließen
Input S
Portb.0 = 0                                                 'schreib LED aus

Return


'-------------------------------------------------------------------------------
'TIMER SPRUNGMARKEN:

Ontimer1overflow:
Timer1 = Timer1vorgabe
Incr Wartezeit
'Toggle Portb.0                                              'nur zum testen ob timer1 läuft

If Wartezeit => Delayms And Auslesen_ok = 1 Then            'Wartezeit zwischen den Messungen
Wartezeit = 0                                               'Wartezeit zurücksetzen
Logging = 1                                                 'Daten werden aufgezeichnet
End If


Return


@for_ro
Dies wird relativ schnell zu einem Stack Overflow führen.

warum führt das zu einem Stack Overflow? Allgemein oder bei Programmierfehlern?

vielen Dank,
Tobias