Hatte ich wohl irgendwie falsch interpretiert und gedacht du wertest bereits fleißig Strings aus...![]()
Hatte ich wohl irgendwie falsch interpretiert und gedacht du wertest bereits fleißig Strings aus...![]()
Grüße
Thomas
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
So kleines Update.....hab diesmal wirklich das Problem mit dem zickigen Controller gelöst
Das hier ist mein erster Ansatz zum UART:
In Kombination mit einer Select-Case Abfrage klappt das auch schonmal recht gut.Code:'ISR vom UART Uart_recieved: Uart_buffer = Udr 'Eingehendes Zeichen zwischenspeichern If Uart_buffer <> Chr(13) Then 'Abfrage nach Enter If Uart_buffer <> Chr(8) Then 'Abfrage nach Backspace Print Chr(uart_buffer); 'Eingehendes Zeichen ausgeben Input_uart_overlay(bytes_recieved) = Uart_buffer Incr Bytes_recieved Else Decr Bytes_recieved 'Zähler um eins verringern Input_uart_overlay(bytes_recieved) = "" 'Zeichen löschen End If End If Return
Allerdings muss ich noch dafür sorgen, dass der Zähler nicht unter 0 fallen kann (ist mir beim löschen des Strings aufgefallen, dass er ja tiefer als 0 zählt wenn man zu oft Backspace drückt) und ich muss den Kram aus der ISR rausnehmen.....ich denke ich werde da auch mit einem Flag arbeiten....ähnlich wie bei der MCP2515 ISR, sprich wenn ein Zeichen reinkommt wird ein Flag gesetzt und dieses Flag wird im Hauptprogramm abgefragt.
Oder ist diese Idee nicht so prall?
Wüsste nicht wie man die ISR sonst schlanker gestalten könnte, weil sie soll auch nicht zu lang werden![]()
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Hallo Daniel,
noch einige Anmerkungen zu deinem Code:
Die Sicherheitsabfrage zur Verhinderung < 0 würde ich so machen:
If Bytes_recieved > 0 Then Decr Bytes_recieved 'oder > 1, falls dein Array bei 1 anfängt
Du kannst dann sooft Backspace drücken wie du willst, das nächste gültige Zeichen kommt immer in die erste Position.
Ich würde auch noch eine Abfrage auf die Länge des Arrays machen, damit dir ein zu langer Input nicht die nachfolgenden Speicherzellen/Variablen überschreibt. Länge dazu in eine Konstante und die sowohl beim Dim als auch beim Incr benutzen.
Bascom setzt dies richtig um, ich finde es aber seltsam:
Input_uart_overlay(bytes_recieved) = ""
Wenn du willst, dass ein Zeichen gelöscht wird, würde ich es durch den Bytewert 0 (=Stringende) überschreiben.
Auch das kann man wieder in eine konstante setzen, damit man später noch direkt sieht, was da gemacht wird.
Denke daran, wenn du ein Zeichen abspeicherst, dass du auf die nachfolgende Position eine 0 schreibst, also das Stringende festlegst.
Rein von der Verarbeitungszeit musst du dir überlegen, ob du das Print in der ISR lässt. Dass dauert.
Evtl. ein Flag setzen und irgendwann im Hauptprogramm ausdrucken. Darf natürlich nicht länger dauern, als bis dein nächstes Zeichen eintrifft.
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Also so funktioniert es mit dem Backslash nicht:
Oder meinst du das die Zeile an einer anderen Stelle stehen muss?Code:'ISR vom UART Uart_recieved: Uart_buffer = Udr 'Eingehendes Zeichen zwischenspeichern If Uart_buffer <> Chr(13) Then 'Abfrage nach Enter If Uart_buffer <> Chr(8) Then 'Abfrage nach Backspace Print Chr(uart_buffer); 'Eingehendes Zeichen ausgeben Input_uart_overlay(bytes_recieved) = Uart_buffer Incr Bytes_recieved Else Input_uart_overlay(bytes_recieved) = 0 'Zeichen löschen If Bytes_recieved > 0 Then Decr Bytes_recieved 'Zähler um Eins Verringern End If Else End If Return
Schaut ruhig mal auf meiner Homepage vorbei:
http://kampis-elektroecke.de
Oder folge mir auf Google+:
Daniel Kampert
Es gibt 10 Arten von Menschen. Die einen können Binär, die anderen nicht.
Gruß
Daniel
Lesezeichen