Archiv verlassen und diese Seite im Standarddesign anzeigen : Array mit Inputbin befüllen
Hallo zusammen,
ich habe folgendes Problem. Ich möchte 14 Byte aus dem Eingangspuffer der seriellen Schnittstelle in eine 14 Byte großes Array schreiben.
Ich habe es folgendermaßen versucht.
Dim A as Byte
Dim Bytearray(14) as Byte
For A = 1 to 14
Inputbin Bytearray(A)
Next
Allerdings funktioniert das leider überhaupt nicht. Der µC bleibt immer an dieser Stelle hängen. Kann mir jemand sagen warum? Und ob es noch eine andere Möglichkeit gibt die Bytes auszulesen?
Wenn ich die Bytes alle einzeln per Inputbin auslese funktioniert es ja auch!?
Danke für euere Hilfe.
Hoi,
in den meisten Programmiersprachen fängt ein Array mit dem Element 0 an. Du hast also ein Array mit 14 Elementen angelegt in dem Du die einzelnen Elemente mit 0 bis 13 ansprechen kannst.
Lösung A: Mach das Array 15 Elemente groß
Lösung B: Zähle von 0 bis 13
Ich gebe hiermit zu das ich die verwendete Programmiersprache nicht kenne. Es würde mich aber wundern wenn es hier anders ist. Deswegen würde ich mich über eine Rückmeldung freuen. Gegen meine Vermutung spricht übrigens das es bei "einzeln per Inputbin auslese" klappt.
Tschö, Tore
Hoi,
das Problem ist wohl nicht das Array sondern der Befehl "Inputbin":
---------
The number of bytes to read depends on the variable you use.
When you use a byte variable, 1 character is read from the serial port.
An integer will wait for 2 characters and an array will wait until the whole array is filled.
---------
Siehe <INPUTBIN (http://avrhelp.mcselec.com/index.html?inputbin.htm)>.
Ich lass meine erste (und wohl falsche) Vermutung einfach mal stehen.
Tschö, Tore
Hallo demmy,
bist du denn sicher, dass 14 Byte gesendet werden?
Wenn ja, dann müsste der Befehl
Inputbin Bytearray(1)
reichen. Wie sieht denn der Rest des Programms aus? Wenn du vom Eingangspuffer sprichst, hast du dann über Config SerialIn einen Buffer angegeben?
Wenn du etwas mehr Kontrolle über den Einlesevorgang haben möchtest, kannst du es auch so machen:
Enable URXC
Enable Interrupts
On URXC Byte_received_ISR
...
Do
...
If Bytes_complete_flag = 1 Then
...
Endif
...
Loop
End
Byte_received_ISR:
incr byte_count
Byte_array(Byte_count) = UDR
If Byte_count = 14 Then Bytes_complete_flag = 1
Return
Hoi,
in den meisten Programmiersprachen fängt ein Array mit dem Element 0 an.
...
Deswegen würde ich mich über eine Rückmeldung freuen.
Kann man in Bascom konfigurieren. Wenn Config Base = 0 gesetzt ist, verhält es sich so, wie du geschrieben hast. Ansonsten läuft der Index von 1 bis 14.
Kann man in Bascom konfigurieren. Wenn Config Base = 0 gesetzt ist, verhält es sich so, wie du geschrieben hast. Ansonsten läuft der Index von 1 bis 14.
Hoi,
Danke für die Erklärung.
Tschö, Tore
Hallo zusammen,
ich habe nach langer Suche folgende Lösung gefunden:
Inputbin array(1) , 14
Und zwar ist das der Befehl um das Array direkt zu befüllen, es werden 14 Byte aus dem empfangspuffer in das "array" geschrieben ab Index Nr. 1
Ich hab es getestet und es funktioniert! Das ist wohl der einfachste Weg ein Array direkt aus dem Empfangspuffer zu füllen.
Für das senden gillt das selbe:
printbin array(2) , 13 ;
Das würde 13 Byte aus dem "array" ab indexnr. 2 senden.
Gruß
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.