Archiv verlassen und diese Seite im Standarddesign anzeigen : Befehl Input und Output klappen nicht
Hallo zusammen,
ich möchte die Eingabe über den Terminal wieder ausgeben und habe folgendes Programm geschrieben:
Dim Eingabe As Byte
Dim Ausgabe As Byte
Config Porth = Output
Out1 Alias Porth.0
Out2 Alias Porth.1
Out3 Alias Porth.2
Out4 Alias Porth.3
Out5 Alias Porth.4
Out6 Alias Porth.5
Out7 Alias Porth.6
Out8 Alias Porth.7
Do
Led = 1
Wait 1
Led = 0
Wait 1
Input "Eingabe machen: " , Eingabe
Ausgabe = Eingabe
Print Ausgabe
Loop
End
Leider kann ich im Terminalfenster nur drei Zeichen eingeben. Wenn ich Buchstaben eingebe, werden diese nicht wieder ausgegeben, z.B.: bei Eingabe AAA wird eine 0 im Print ausgegeben.
Was mache ich falsch, fehlen evt. noch weitere Angaben?
Grüße
datatom
Warum machste diesen Befehl ins Programm:
Ausgabe = Eingabe
Schreib doch einfach:
Print Eingabe
Damit sparst du dir 1 Variable. Und dann funktioniert es auch. Weil mit dem Input-Befehl wird die Eingabe ja automatisch unter der Variable "Eingabe" gespeichert.
Also ich habs im Simulator getestet und da funktioniert es. Ist dein Programm was du da oben gepostet hast das komplette oder nur ein Ausschnitt.
Weil da fehlt noch das $regfile, $crystal, $baud, usw. Und erscheint im Terminal den wenigstens das "Eingabe machen: "? Weil wenn das schon nicht erscheint ist dein RS232 vlt nicht in Ordnung. Du musst Rx mit Tx verbinden und Tx mit Rx.
Sorry, ist nur ein Ausschnitt:
$prog , 255 , &B11011100 , '&B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Config Pind.5 = Output
Led Alias Portd.5
$baud = 19200
'Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Config Com2 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Config Com4 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Open "com1:" For Binary As #1 'RS232
'Open "com2:" For Binary As #2 'RS232
Open "com3:" For Binary As #3 'RS232
'Open "com4:" For Binary As #4 'RS232
Dim Eingabe As Byte
Dim Ausgabe As Byte
Config Porth = Output
Out1 Alias Porth.0
Out2 Alias Porth.1
Out3 Alias Porth.2
Out4 Alias Porth.3
Out5 Alias Porth.4
Out6 Alias Porth.5
Out7 Alias Porth.6
Out8 Alias Porth.7
Do
Led = 1
Wait 1
Led = 0
Wait 1
Input "Eingabe machen: " , Eingabe
' Ausgabe = Eingabe
Print 1
Print Eingabe 'Ausgabe
Loop
End
Wenn du mehrere COM-Ports am Controller benutzt und einstellst solltest du das auch bei dem Print hin schreiben. Und du hast da 2x ne Baudrate deffiniert. Einmal ganz oben im Kopf und dann nochmal da drunter. Wenn du COM 3 aktiv hast versuch es mal so:
Print #3, Eingabe
Wird den was im Terminal angezeigt? Also schreibt er den wenigstens "Eingabe machen: "?
So hab das mal im Simulator getestet. Dieser Code hier funktioniert nur bei Zahlen!
$sim
$regfile = "m2560def.dat"
$crystal = 8000000
Dim Eingabe As Byte
Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com1:" For Binary As #1
Do
Input #1 , "Eingabe machen: " , Eingabe
Print #1 , Eingabe
Loop
End
Und wenn du, wie bei dir, den COM3 benutzt musst du das COM1 durch COM3 ersetzen und das #1 durch #3.
So wenn du jetzt Buchstaben eintippen willst musst du statt:
Dim Eingabe As Byte
das hier schreiben:
Dim Eingabe As String * 10
Damit wird die Variable ein String mit 10 Zeichen länge. Und damit kannst du auch Buchstaben eingeben. Wenn du die Variable nur als Byte oder Integer deffinierst klappt das sonst nicht.
Ach und das:
$sim
muss auch raus, weil das nur für den Simulator ist.
"Eingabe machen" schreibt er. Aber sonst kommen die falschen Werte zurück. Ich lasse extra nochmal einen Wert ausgeben, den ich jedesmal um 1 erhöhe, wenn ich das Programm auf dem Controller ändere. Die Zahl wird ebenfalls richtig ausgegeben, nur der Inputwert leider nicht.
$prog , 255 , &B11011100 , '&B11011001 , 'Quarz an / Teiler aus / Jtag aus
$regfile = "m2560def.dat"
$hwstack = 82 '80
$framesize = 68 ' 64
$swstack = 68 '44
$crystal = 16000000 'Quarzfrequenz
Config Pind.5 = Output
Led Alias Portd.5
$baud = 19200
Config Com1 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Config Com2 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Com3 = 19200 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
'Config Com4 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Open "com1:" For Binary As #1 'RS232
'Open "com2:" For Binary As #2 'RS232
Open "com3:" For Binary As #3 'RS232
'Open "com4:" For Binary As #4 'RS232
Dim Eingabe As Byte
Dim Ausgabe As Byte
Config Porth = Output
Out1 Alias Porth.0
Out2 Alias Porth.1
Out3 Alias Porth.2
Out4 Alias Porth.3
Out5 Alias Porth.4
Out6 Alias Porth.5
Out7 Alias Porth.6
Out8 Alias Porth.7
Do
Led = 1
Wait 1
Led = 0
Wait 1
Input "Eingabe machen: " , Eingabe
' Ausgabe = Eingabe
Print #1 , 3
Print #1 , Eingabe 'Ausgabe
Loop
End
Keine Ahnung woran es liegt:--(
Ja Zahlenwerte gibt dein Programm richtig aus. Nur wenn du auch Buchstaben und Texte richtig ausgeben willst musst du:
Dim Eingabe As String * 10 schreiben.
Dann klappt es auch.
Danke schön, hat geklappt:-)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.