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
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.
Vielen Dank! Habs mittlerweile geschaft einen buffer anzulegen der Mit Enter abgeschlossen wird. Wie kann ich jetzt aber Sinnvoll den ASCII Code in HEX umwandeln und umgekehrt?
Thomas Reiterer schrieb: > Wie kann ich jetzt aber Sinnvoll den ASCII Code in HEX umwandeln und > umgekehrt? indem du es versuchst. Selbst wenn du eine nicht optimale Lösung findest oder Fehler drin sind, damit lernst du 10x mehr als wenn du alles vorgebetet kriegst
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
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.