Hallo Robert,
Ich habe den Fehler gefunden, nach zwei Tagen! Zur Lösung: Wenn das Empfangen mittels pollen funktioniert, kann am Code so viel nicht falsch sein... Also habe ich vor 10 Minuten mal den radikalen weg genommen und alles was in der Main drinsteht, mit in die ISR gepackt. In der HAuptschleife habe ich nur den Toggelnden Port mit der Waitms drin gelassen um zu sehen ob es geht...
Und es Funktionierte! Hää?!?, wunder, wunder, grübel, scheixxe brülln usw... und dann der rettende Gedanke:
If Rx_array(1) >= &H80 then
IF Rx_Array(2) = &H01 then
Portb.1 = 0
Elseif Rx_array(2) = &H02 then
Portb.1 = 1
Else
Array_rx_reset = String(3 , 0)
End if
Waitms 20
Toggle Porta.0
>>>> Array_rx_reset = String(3 , 0) <<<< Diese Code Zeile war der Auslöser!!!
Loop
Solang ich gepollt habe, war diese Zeile kein Problem.
Also, ich habe meine 4 Datenbytes empfangen, diese Ausgewertet und wenn die Message nicht stimmte habe ich die Nachricht mit dieser Zeile gelöscht usw...
Beim Interrupt ist das aber anders.
Ich kann nicht mehr beeinflussen wenn die Nachricht zur Verfügung steht. Daher, der Interrupt kann Z.B. auslösen wenn der µC gerade den Port Toggelt o.ä. (was, so denke ich immer der Fall war, da nach dem Toggeln die grosse Waitms kommt). Und mit der Codezeile, wo das Array gelöscht wird, habe ich die gerade empfangene Nachricht wieder gelöscht. ohne diese Auszuwerten!
Oh Man, so ein relativ kleiner fehler mit solchen Auswirkungen...
Trotzdem Danke für deine Hilfe.
Gruss René
P.S. ich gönn mir erst mal ein Bier.![]()
Lesezeichen