Eure Hilfestellungen sind vom Erfolg gekrönt!
Es klappt wunderbar. Seit ca 2 Stunden läuft die Sache fehlerlos. Vor allen Dingen bleibt die Sache nicht mehr hängen. Wenn mal die Bytes aus der Reihe tanzen, entstehen nur unsinnige Zeichen. Beim nächsten Intervall ist wieder alles in Ordnung.
Code:
$regfile = "m32def.dat" ' Mega 32
$baud = 9600
$crystal = 16000000
'*** alle Stacks und framesize stehen auf 100
Dim Ergebnis As Single
Dim Fertig As Bit
Dim Zähler As Byte '***** Feldzähler
Dim Zeichen(4) As Byte At Ergebnis Overlay
Dim Sendeanforderung As String * 1
Dim Funk_anzeige As String * 7 '*** einige mehr als nötig
Const True = 1
Const False = 0
Empfangs_led Alias Portc.3
On Urxc Hole_bytes
Enable Interrupts
Enable Urxc
Sendeanforderung = "!"
Set Empfangs_led '**** anfangs aus
Do
'***** nachfolgendes if in meinem Programm alle 12 sec
'**** If Interrupt_zähler = Interrupt_intervall Then
Enable Urxc '***** Interrupt einschalten, stört sonst andere Interrups
'**** Aufforderung zum Senden
Printbin Sendeanforderung '**** ohne Chr(10) und Chr(13)
'**** Sender sendet nun
Zähler = 1 '**** Feldzähler initialisieren
Reset Empfangs_led '**** an
If Fertig = True Then
Fertig = False
Waitms 200 '**** wichtig, verzögern
'**** hier steht Ergebnis zur Verfügung
Funk_anzeige = Fusing(ergebnis , "##.#" ) '**** um aufzurunden!
'**** Routine zum Anzeigen
Set Empfangs_led '**** aus
End If
Disable Urxc
'**** weiterer Code
'*** end if
Loop
End
Hole_bytes:
Zeichen(zähler) = Udr '**** ein Byte angekommen
Incr Zähler
If Zähler > 4 Then
Fertig = True
'Zähler = 1
End If
Return
Ich kannte zwar die Geschichte mit dem Overlay, habe mich aber nicht dran getraut, weil man in den mir vorliegenden Beispielen ne Adresse angeben musste. Da fühlte ich mich doch überfordert. Das mit dem Location wars dann. Toll!
Nochmals Dank
Wolfgang
Lesezeichen