Hallo Kampi,
verstege ich das so richtig:
Code:On Urxc Onrxd Enable Urxc Enable Interrupts Do IF FLAG = true hier auswerten flag = false ENDIF Loop End Onrxd: Inputstr = Inputstr + Chr(udr) If Udr = 13 Then Flag = true
Werbung
Hallo Kampi,
verstege ich das so richtig:
Code:On Urxc Onrxd Enable Urxc Enable Interrupts Do IF FLAG = true hier auswerten flag = false ENDIF Loop End Onrxd: Inputstr = Inputstr + Chr(udr) If Udr = 13 Then Flag = true
Hallo Spelli,
grundsätzlich ist es das, was Kampi dir vorgeschlagen hat.
Da ich erklärtermaßen Fan von Overlays bin, möchte ich dir allerdings vorschlagen, in der ISR nicht mit Strings zu arbeiten, sondern bei Bytes zu bleiben, so wie du sie auch einliest. Kennst du das Konzept der Overlays?
Als Checksumme kannst du neben der erwähnten CRC16 auch CRC8 oder auch einfach die Funktion Checksum() benutzen.
Bedenken solltest du dabei, dass der Wert der Checksumme auch zufällig eines deiner Steuerzeichen $ oder # werden könnte. Ebenso könnte es den Wert 13 haben, der deinem "Übertragung fertig" entspricht. Da musst du in der ISR Vorsorge treffen. Oder du verhinderst auf der Sendeseite, dass ein solches Zeichen als Checksumme übertragen wird.
Hallo spelli,
die Stringoperationen wie etwa Inputstr = Inputstr + Chr(udr) dauern halt recht lange. Die gleiche Änderung kannst du über Overlays wesentlich schneller machen, weil nichts konvertiert werden muss.
Wenn du aber in der ISR keine Zeitprobleme hast, dann lass es zunächst einfach so.
Ändern kann man das später immer noch.
Lesezeichen