PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Befehl Input und Output klappen nicht



datatom
13.08.2011, 19:22
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

Kampi
13.08.2011, 19:34
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.

datatom
13.08.2011, 19:42
klappt trotzdem nicht:(

Kampi
13.08.2011, 19:47
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.

datatom
13.08.2011, 19:50
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

Kampi
13.08.2011, 19:54
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: "?

Kampi
13.08.2011, 20:10
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.

datatom
13.08.2011, 20:17
"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:--(

Kampi
13.08.2011, 20:27
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.

datatom
13.08.2011, 20:35
Danke schön, hat geklappt:-)