RS232 Empfangen und Ausgänge setzen

OP #2955920
Lesenswert?

Hallo euch,

bin ein Mikrocontroller (Atmega 644) Einsteiger und möchte folgendes 
realisieren:

Wenn ich ein SET 0xff schicke möchte ich das gesamt PORT C setzen oder 
nur einen teil.
Wenn ich nun GET schicke möchte ich die Eingänge von PORT A einlesen und 
and die RS232 zurück schicken.

Vielleicht kann mir von euch jemand helfen wie ich ein solche Programm 
lösen könnte.

Einzelne Zeichen kann ich Empfangen jedoch keine Wörter ..

LG
#2955941
Lesenswert?

Thomas Reiterer schrieb:

> Einzelne Zeichen kann ich Empfangen jedoch keine Wörter ..

Warum nicht?
Wörter werden auch nur Buchstabe für Buchstabe übertragen.
Und ein 'Buchstabe' (technisch gesehen ist das ein Buchstabe, weil er 
einen eigenen ASCII Code hat) ist der Zeilenumbruch, den du als die 
große Return-Taste an der Haupttastatur kennst.

Gut, man muss die nicht nehmen, aber traditionell wird die gerne 
genommen um anzuzeigen: jetzt ist eine komplette Eingabezeile fertig 
übertragen.

Dein Programm hat also Zeichen für Zeichen, Buchstabe für Buchstabe in 
einem Array gesammelt, macht noch ein 0-Byte hinten drann und hat dann 
einen String
"SET A 0xFF"
den es analysiert und feststellt, was der Benutzer haben will.
Und dann macht es diese Aktion.


Aber dein erstes Ziel:
Ein Programm zu schreiben, welches Buchstabe für Buchstabe von der 
Seriellen holt und nach und nach zu einem String zusammenbaut, wobei der 
Sender mit dem Return (in C-Schreibweise ein '\n') kundtut, dass jetzt 
die Zeile zu Ende ist.
Gast #2960572
Lesenswert?

Hi
>Wie kann ich jetzt aber Sinnvoll den ASCII Code in HEX umwandeln und
>umgekehrt?
??
Laß mir da mal meine Fragezeichen. Du willst Daten versenden, ASCII zum 
Beispiel. Nun, was wird da über die Schnittstelle geschickt ? Richtig, 
ein Byte. Und nun dank mal nach, ASCII ist auch nur ein Byte. Hättest du 
nnu gesagt, ich schicke zwei ASCII etwa "FF" oder "A9" um daraus ein 
Byte zu machen, wär das ja mal ne Info. Aber ASCII "0" ist Hex 30 und 
dez. 48.
Willst du aus dem String "A9" den bytewert ermitteln, mußt du den String 
zerlegen. Alles was >9 ist mußt du zuweisen, oder aber den ASCII Code 
holen und Auf "A" soviel abziehen, das die Integer 10 übrig bleibt.Dann 
hast du den Wert, den du auch bei "B" "E oder auch "F" abziehen mußt um 
an den Wert zwischen 10 und 15 zu kommen. Der rest ist einfach.Das 
Hexadezimalsystem rechnet mit der Basis 16. Also, egal wieviele Stellen 
du hast, es wird mit 16 ^0 für die "Einer", 16^1 für die "Sechzehner", 
16^2 für die "zweihundersechsundfünfziger" usw gerechnet. Beispiel 
Dezimalsystem       2356 ist 6*10^0+5*10^1+3*10^2+2*10^3
Hexadezimalsystem   A9E7 ist 7*16^0 + 14(E)*16^1+9*16^2+10(A)*16^3
In Basic z.B. wäre

X = Len(HexZahl)
If X= 2 then
  Hex0=HexZahl(2)
  Hex1=HexZahl(1)
End If
If (Hex0 <="9") and (Hex0>=0) then
  Wert0 = Val(Hex0)
else
  Wert0=10-Ord("A")+Ord(Hex0)
End If

Ob der Syntax so richtig ist, weiß ich nicht. Mir geht es hier auch nur 
darum, den Weg zu zeigen, wie man einen String mit einer HexZahl zerlegt 
und bewertet. Das bischen was ich in Basic mache ist ungeprüft nur 
Leitfaden.
Gruß oldmax
OP #3016943
Lesenswert?

HAllo,

hab mich eine Zeitlang nicht mit dem Thema beschäftigen können.
Aber vielen Dank für die Unterstützung.
Hab zuerst immer das Problem gehabt das ich keine Variable ausgeben 
konnte.
Nun hab ichs geschaft und wenn man sich die ASCII Tabelle ein bisschen 
zu gemüte führt dann ist das gar nicht so schwer zwischen den Formaten 
hin und her zu rechnen.
Danke ncohmals für die Tipps.

LG
Thenew

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren