Forum: Mikrocontroller und Digitale Elektronik UART und einfache Menüs


von Sven Scholz (Gast)


Lesenswert?

Hallo ich möchte gerne per UART einMenü realisieren zum Beispiel soll 
bei einem Tastendruck etwa folgendes beim Hyperterminal erscheinen:

Was möchten Sie machen?
(1) Addition
(2) Subtraktion
Ihre Eingabe:

-----

Bitte 1. Wert eingeben:
Bitte 2. Wert eingaben:

-----
Ergebnis: xxxx


----------------------------------------------
Etwa so sollte das aussehen. Ich bekomme es nur hin, dass ich ein 
Zeichen verarbeiten kann. Ich möchte aber gerne größer Zahlen oder 
Strings zum ATmega schicken etwa 1234 oder "Peter". Dann soll später 
etwas mit dieser Eingabe gemacht.
Geht das irgendwie über eine Schleife, die solange durchlaufen wird, bis 
das Enter-Signal geschickt wird?

Fragen über Fragen....

von Sven Scholz (Gast)


Lesenswert?

Kurz zusammengefasst:
--------------------------------------
Erste Eingabe über UART: Scholz
Zweite Eingabe über UART: Sven

Ausgabe über UART: Sven Scholz
--------------------------------------
Wie realisiert man das unter BASCOM. Ein Beispielcode wäre echt nicht 
verkehrt. danke

von Karl H. (kbuchegg)


Lesenswert?

> Ich möchte aber gerne größer Zahlen oder
> Strings zum ATmega schicken etwa 1234 oder "Peter". Dann soll später
> etwas mit dieser Eingabe gemacht.
> Geht das irgendwie über eine Schleife, die solange durchlaufen wird, bis
> das Enter-Signal geschickt wird?
>

Du bist schon auf der richtigen Fährte. Im Prinzip kann man das
genau so machen. Nur benutzt man keine Schleife dazu :-)
Was du machst, läuft ungefähr so ab:
Zuallererst setzt du die UART erst mal so auf, dass sie dir bei
Ankunft eines Zeichens eine Funktion, einen Interrupt Handler
aufruft.
In dieser Funktion nimmst du das Zeichen entgegen und hängst das
Zeichen an einen String an. Auf diese Weise sammeln sich die
gesendeten Zeichen in einer String Variablen. Mit einer Ausnahme:
Wenn das Zeichen ein Enter ist, dann setzt du eine boolsche Variable
auf true und signalisierst damit anderen Programmteilen, dass
da jetzt ein kompletter String empfangen wurde. so eine Variable
nennt man: ein Flag (engl. Flag: Flagge, Gerät zum signalisieren)

Diese anderen Programmteile, konkret dein Hauptprogramm, wartet
jetzt in einer Schleife einfach nur darauf, dass besagtes Flag auf
true geht. Geht die auf true, dann enthält die Stringvariable
den kompletten String. Das Hauptprogramm holt sich den und verarbeitet
ihn weiter.

von Sven Scholz (Gast)


Lesenswert?

Alles klar, mal schauen ob ich das hinbekomme.
Ich dachte vorher immer, ich könnte einfach die fertige INPUT-Funktion 
dafür nutzen. Da habe ich mich wohl geirrt. Alles muss man selber 
machen... :-)

von Karl H. (kbuchegg)


Lesenswert?

Ooops.
BASCOM. Da klink ich mich gleich wieder asus.
Aber schau mal hier
http://www.rowalt.de/mc/avr/avrboard/06/avrb06.htm

(mit http://www.google.com in 10 Sekunden gefunden :-)

von Marc M. (bytewood) Benutzerseite


Lesenswert?

@Sven

Schau Dir mal PRINT und INPUT an.

Mit diesen beiden kannst Du ein Menü realisieren.
Dazu vielleicht noch Inkey und Waitkey.
Also:
Ein Menü mit Prints aufbauen und Zahlen zuweisen, dann Input, 
anschliessend mit Select Case arbeiten (...oder Ifs).

oder

Ein Menü mit Prints aufbauen, wieder Input und Strings in die Case 
anweisungen einbauen.


Wenn das eingegebene Zeichen/Zahl/String nicht zugeordnet werden kann 
und das Prog nicht verzweigt, dann soll eine Fehlermeldung 
zurückgeschickt werden.

Auf jeden Fall ist ein CRLF notwendig, ausser bei Inkey und Waitkey.

Um in Bascom ein String mit Input zu verbinden, sollte Deine Variable 
mit z.B. Dim Variable As String * 15 definiert worden sein.

Schau mal in die BASCOM-Hilfe - sehr gut erklärt und mit Beispielen

So Long

von Marc M. (bytewood) Benutzerseite


Angehängte Dateien:

Lesenswert?

OK, hier mal ein kleiner in 5 Minuten "hingerotzter" Code im Anhang.

So long

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.