Hi,
ich vermute mal ganz stark, daß deine ISR zu lang ist.
es wäre sicherlich günstiger einen Weg zu suchen, die Auswertung der empfangenen Bytes im Hauptprogramm durchzuführen. Dazu wirst du ein oder mehrere Hilfsvariablen benötigen...
wenn der Datensatz vom GPS immer gleich lang ist (in diesem Beispielcode 40 Stellen incl Startbyte und Line Feed), kannst das ganze sehr einfach in ein Array von Bytes schieben.
Code:
Dim Buffer(40) as Byte at &H60
Dim Gps as String * 40 at &H60
Dim a as Byte
Dim b as Byte
do
if a = 41 or b = 13 then
Print #2 , Gps
Gps = ""
end if
loop
onrxd:
b = udr
if b = asc("$") then
a = 1
end if
if a < 41 then
Buffer(a) = B
incr a
end if
return
die ISR in diesem Beispiel prüft das Startbyte und beginnt die Zuweisung dann erneut beim 1. Byte (das Startbyte wird mit in den String übernommen - ansonsten Dim Gps as String * 39 at &H61).
Wenn der String komplett empfangen wurde, oder vorzeitig das Line Feed empfangen wurde, wird der String vom Hauptprogramm ausgegeben. Das nachfolgende $ startet die Zuweisung dann erneut...
PS: hab das jetzt in Adaption meiner Programme mal eben schnell eingetippt - kann nicht garantieren, daß es so zu 100% funzt - mußt mal etwas probieren - allerdings die ISR hab ich bei meinen Progs fast genau so, und das funzt sogar mit Baudraten um die 19200 einwandfrei - sogar wenn der Chip dabei nur mit 7,3728 MHz taktet...
Lesezeichen