8 bit auslesen

OP #7261198
Lesenswert?

Hallo zusammen,

Bei mir ist das Problem dass ich übe einen Uart 8bit zugeschickt 
bekomme,
sprich zum Beispiel: 0b01010111
Meine Frage dazu ist wie ich es schaffe bei Uart jede einzelne 0 oder 1 
auslesen kann -> keine lange if schleife(die Werte VARIIEREN!!)

SG DV
#7261209
Lesenswert?

Darth V. schrieb:
> Hallo zusammen,
> Bei mir ist das Problem dass ich übe einen Uart 8bit zugeschickt
> bekomme,
> sprich zum Beispiel: 0b01010111
> Meine Frage dazu ist wie ich es schaffe bei Uart jede einzelne 0 oder 1
> auslesen kann -> keine lange if schleife(die Werte VARIIEREN!!)
> SG DV

Hängt vom MC ab, ob auf jedes Bit einzeln zugegriffen werden kann.
#7261210
Lesenswert?

Über die UART kommt typisch eine Folge von Bytes rein. Damit man weiß, 
welches Byte in der Folge welche Bedeutung hat, implementiert man ein 
Datenprotokoll.
Der Empfänger muß dieses Protokoll dann wieder dekodieren. Danach kann 
man die Bytes oder auch Bits entsprechend auswerten. Man kann sie z.B. 
binär anzeigen, wenn man Lust dazu hat.
(Firma: S-C-I DATA GbR) #7261213
Lesenswert?

Wie wäre es mit [Rotate]
(RRC.b in Assembler)?
Alternativ auch mit dem Bittest befehl?
(BIT.b      #nn,&ADCM in Assembler)

Was aber willst du den genau Einzelne Bits testen?
Oder Umrechnen?

Je nach dem wenn du die XV2 Cpu hast kann sogar ein Befehl grad mehrere 
Bit bearbeiten..... Je nach dem was du machen willst.
Beispiel:
 (RRAM.b  #4,Rn) um ein 4 Bit Nibble zu verschieben, eignet sich 
hervorragend zum Umwandeln vin Hex-> in Asci codes :-)
Ganz ohne Loops oder IF usw.

Link: https://en.m.wikipedia.org/wiki/TI_MSP430#MSP430X_20-bit_extension
OP #7261218
Lesenswert?

Patrick L. schrieb:
> Wie wäre es mit [Rotate]
> (RRC.b in Assembler)?
> Alternativ auch mit dem Bittest befehl?
> (BIT.b      #nn,&ADCM in Assembler)
>
> Was aber willst du den genau Einzelne Bits testen?
> Oder Umrechnen?
>
> Je nach dem wenn du die XV2 Cpu hast kann sogar ein Befehl grad alle 8
> Bit bearbeiten..... Je nach dem was du machen willst.
> Beispiel:
>  (RRAM.b  #4,Rn) um ein 4 Bit Nibble zu verschieben, eignet sich
> hervorragend zum Umwandeln in Hex->Asci codes :-)
>
> Link: https://en.m.wikipedia.org/wiki/TI_MSP430#MSP430X_20-bit_extension

Cch brauche die einzelne bits um je nach Stellung Musik abzuspielen. :)
Und es wäre zu viel Arbeit von 8 bit jede Stellung zu erfassen und als 
if Abfrage abzufragen...

Ich hoffe Ihr versteht etwas darunter xD
Gast #7261222
Lesenswert?

Der Uart schickt dir (also Darth Vader, nicht einem Rechner) Bits?

Dann würde ich dem Uart sagen, er soll mal langsam machen. dann kannst 
du mit Papier und Bleistift die Nullen und Einsen aufschreiben.
Du solltest vielleicht bitten, dass dich dabei keiner stört! Denn sonst 
verpasst du noch ein Bit.
#7261225
Lesenswert?

1
boolean b[8];
2
unsigned char uart;
3

4
b[0] = ((uart & 0x01)!=0);
5
b[1] = ((uart & 0x02)!=0);
6
b[2] = ((uart & 0x04)!=0);
7
b[3] = ((uart & 0x08)!=0);
8
b[4] = ((uart & 0x10)!=0);
9
b[5] = ((uart & 0x20)!=0);
10
b[6] = ((uart & 0x40)!=0);
11
b[7] = ((uart & 0x80)!=0);

Keine IF Abfragen und Schleifen.
(Firma: S-C-I DATA GbR) #7261241
Lesenswert?

Das musst du jetzt erklären?

Als Beispiel:
1
BIC.b      &U0RXBUF,&R12      ;Löscht dir alle Bits die "1" waren im R12
2
BIS.b      &U0RXBUF,&R12      ;Setzt dir alle Bits die "1" waren im R12
3
AND.b      &U0RXBUF,&R12      ;Löscht dir alle Bits die "0" waren im R12
usw meinst du das?
Moderator (Firma: Titel) Persönliche Seite #7261243
Lesenswert?

Darth V. schrieb:
> Ja genau, nur ich würde gerne die Bites wo binär angezeigt werden so
> auslesen dass ich die 0er und 1er einzeln auslesen kann
Zum Glück ist auch dir klar, dass dir da in vielfältiger Weise 
grundlegende Grundlagen fehlen.

Aber sag doch mal, warum du das so machen willst. Was ist das 
eigentliche Problem? Warum willst du da einzelne Bits "auslesen"?

Darth V. schrieb:
> keine lange if schleife(die Werte VARIIEREN!!)
Abgesehen davon, dass es keine if-schleife gibt: was ist so schlimm an 
sich ändernden Werten? Und warum dauert bei dir eine Schleife lange?

> Und es wäre zu viel Arbeit von 8 bit jede Stellung zu erfassen und als
> if Abfrage abzufragen...
Was machst du dir da Gedanken? Die Arbeit muss doch der Controller 
machen...

Darth V. schrieb:
> Und es wäre zu viel Arbeit von 8 bit jede Stellung zu erfassen
Das sind
1. schlimmstenfalls 256 unterschiedliche "Stellungen" und
2. musst du nach ein wenig Nachdenken keine Schleife programmieren, 
sondern kannst einfach mit dem empfangenen Wert über eine Tabelle 
irgendwas direkt auswählen.
OP #7261254
Lesenswert?

> Aber sag doch mal, warum du das so machen willst. Was ist das
> eigentliche Problem? Warum willst du da einzelne Bits "auslesen"?
>

Ich bekomme 128 verschiedene Zustände reingeschickt die per Expander 
über den I2c auf den uC(ATMega328P) geschickt werden. Dass wird per Uart 
auf den RPI geschickt. Jetzt will ich je nach Zustand der 128 Eingänge 
das einzeln auslesen( ich bekomme das in 8 bit sprich einem Byte 
gschickt).
Gast #7261267
Lesenswert?

Ähh, wenn du letztlich aus 128 Musiktiteln auswählen willst, so musst du 
auch alle 128 Möglichkeiten ins Programm reinschreiben.
Ob du das jetzt als if / else Reihe, switchcase  oder als Arrayzugriff 
machst ist völlig egal. Du brauchst ja auch die 128 "Ausgangswerte". 
Woher soll der Controller wissen das Nr. 9 eben gerade Beethoven ist?

Ich, als ziemlicher Anfänger, würde das mit einen switch machen. Das 
finde ich recht übersichtlich. Und, ähh, ja, das sind dann mehr als 260 
Zeilen Code.
Beitrag #7261270 wurde von einem Moderator gelöscht.
(Firma: S-C-I DATA GbR) #7261273
Lesenswert?

Darth V. schrieb:
> Meine Frage dazu ist wie ich es schaffe bei Uart jede einzelne 0 oder 1
> auslesen kann -> keine lange if schleife(die Werte VARIIEREN!!)

Verstehe ich nun als:
wie kann ich verschiedene Bitzustände uder Bitkombinationen
... und nicht einzelne Bits.... auslesen

und das geht definitiv über eine Tabelle am einfachsten.
Gast #7261288
Lesenswert?

Flip B. schrieb:
> oder du lagerst die zuordnungsinformation extern, ein extra header mit
> zuordnungsarray nummer zu dateiname, und der code hohlt sich von dort
> die information anhand des empfangenen index. so wird der code lesbarer
> und hat kein 260 zeilen switch case.

Wenn man es richtig gut machen will, dann packt man eine SQL-Datenbank 
dahinter. Dann werden die Titel und die Nummern in der Datenbank 
verwaltet, und man muß nicht bei jedem neuen Lied den Sourcecode ändern.
Gast #7261395
Lesenswert?

Welche Programmiersprache?
Wenn er 256 Musiktitel abspielen will, sind ihm die einzelnen Bit doch 
wurscht, der Zahlenwert reicht vollkommen. Wenn er jetzt eine 
Datentabelle besitzt, dann braucht er genau 1 Abfrage die dann den Wert 
aus dieser Tabelle holt.

Anselm
Beitrag #7261495 wurde von einem Moderator gelöscht.
Beitrag #7261497 wurde von einem Moderator gelöscht.
Beitrag #7261504 wurde von einem Moderator gelöscht.

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