RXTX Java AT89C5131

OP #1988495
Guten Abend,

für ein kleines Testprogramm für eine Selfmade-IO-Platine benötige ich 
etwas Hilfe!
Auf der Platine sitzt ein AT89C5131. Dieser sendet per RS232 
(9600,8,1,N) ein "Protokoll", das wie folgt aufgebaut ist:
Empfängt der Controller ein 's', so beginnt er dem Zustand der 32 Pin´s 
aller 4 PORT´s zusenden.
Z.B.:
"00101111011100000111110010101010" so zu lesen im Hyperterminal!
Die Kommunikation zwischen Hyperterminal und Controller funktioniert 
einwandfrei!

Diese Kette möchte ich nun mittels Java darstellen!
In einem JFrame habe ich 32 TextField`s

Ist ein String dieser Kette 0 so soll ein entsprechendes TextField rot, 
ist er 1 soll es grün hinterlegt sein.

Meine erster Ansatz ist:
Java sendet ein 's' zum Controller, dieser antwortet mit der erste '0' 
oder '1' und wartet!
Hat Java den ersten Wert verarbeitet ( eine Boolean wird gesetzt), so 
soll Java ein '#' senden, worauf der Controller den nächsten Zustand 
sendet.

Ist es Möglich, die empfangenen 0er und 1er erst mal irgendwo 
"abzulegen"?
Bzw. je 8 Strings (nur 0 oder 1) in ein Byte zuwandeln?
Gast
Hat jemand evt. ein brauchbares Beispiel?

Meine Idee z.B., die auch schon fast geht ist, ein 32 Byte 
serial.buffer, welcher vorm überschreiben transferiert wird...

Ein 2ter Weg wäre, vom Controller, die 4 Portzustände als hex-Wert 
direkt zu empfangen, dann jeweils int to binaryString auf 8 Bits 
formatiert!

Jetzt meine Frage:
WIE (evt diesmal mit Sourcecode) kann ich das binaryString Muster auf 8 
Boolean aufteilen und zuordnen?
Komme ich da mit BitSet weiter? Wenn ja, WIE?

Gruß
hoh
Gast
Hallo,

Da ich seit gestern Mittag auf dem verzweifelten Weg von Dublin nach 
Mannheim bin, und nichtmal weiss, ob ich bis heute Abend zuhause bin, 
die letzte Nach grade mal 1h in nem Terminal geschlafen habe, mein Akku 
am Notebook leer is, meine Koffer seit 5h eingecheckt sind und sich 
darin das Netzteil befindet, muss ich von Telefon aus schreiben...

Und da habe ich leider kein Sourcecode zur Hand ;-)

Kann nur das bieten:
8 Boolean deklariert: pin00 bis pin07
String inBin = "00000000"
String inByte=""

mySerial.Read(inByte);      ;kommt zB ne "FF"

inByte = Byte.toStringBinary(inByte);

Syntaxfehler ausgeklammert steht dann in inBin "11111111"

Wie bekomme ich da dann je eine 1 auf pin00, pin01, pin02, usw.??

Gruß
hoh
Persönliche Seite
Also... erstmal brauchst du das Byte nicht nochmal als "String" 
konvertieren. Statdessen kannst du direkt Prüfen welche Bits gesetzt 
sind z.B. so:
1
        InputStream mySerial = ...;
2
        int b = mySerial.read();
3
        boolean[] bits = new boolean[8];
4
        for (int i = 0; i < bits.length; i++) {
5
            bits[i] = ((1 << i) & b) != 0;
6
        }
7

8
        for (int i = 0; i < bits.length; i++) {
9
            System.out.println("Bit " + i + " ist " + bits[i]);
10
        }

hoh schrieb:
> die letzte Nach grade mal 1h in nem Terminal geschlafen habe
Schlaf dich halt erstmal aus und las' die Elektronik ruhen, trotzdem ein 
frohes Fest.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.