PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Dezimal nach Dual und dann ein Bit auswerten



Duesentrieb
23.05.2015, 20:45
Hallo,
ich habe eine etwas komplizierte Farge die vielleicht doch nicht so schwer ist.

Ich möchte den Status einzelner Bits ausweren.
Leider liegen diese Bits zunächst nur in einer Binärzahl vor.
Nun möchte z.B. aus der Zahl 82 erkennen, ob das Bit 2hoch6 (64) enthalten ist. Wie müsste ich dazu in Bascom eine Formel schreiben?

021aet04
23.05.2015, 21:27
Ich kenne mich in Bascom nicht aus, sollte aber mit variablenvergleich funktionieren.
In C wäre das z.b. If(variable && (1«6)){......}

MfG Hannes

Duesentrieb
23.05.2015, 21:46
Hallo Hannes,

gut möglich dass es so einfach ist. Leider kann ich mit C nichts anfangen :(

malthy
23.05.2015, 21:55
Hey,

mir ist nicht 100%ig klar worauf Du hinaus willst. Wenn es Dir einfach nur darum geht, möglichst unkompliziert einzelne Bits in einer Variablen abzufragen, bietet BASCOM ja eine Punktnotation. Also so zB:



if variable.6 = 1 then
' wenn das siebte Bit der Variable variable gesetzt ist, tue irgendwas
endif


Hilft Dir das?

Gruß
Malte

Michael
23.05.2015, 21:56
If Byte.6 = 1 Then
Machwas
End If

Gruß, Michael

Sauerbruch
23.05.2015, 22:01
Hi Düsentrieb,

das geht mit Bascom ganz einfach: Mit dem Namen Deiner Byte-Variablen, einem Punkt und einer Ziffer zwischen 0 und 7 kannst Du jedes einzelne der 8 Bits ansprechen. Du kannst die Bits so setzen, löschen, ihren Wert auf eine andere Bit-Variable übertragen, oder auch ganz einfach auf ihren Wert (1 oder 0) überprüfen.

Kleines Beispiel:



Dim Zahl as Byte
Zahl = ....

If Zahl.6 = 1 then... else.... 'Überprüft das 6. Bit auf seinen Wert


Oder



Dim Zahl as Byte
Dim MyBit as Bit

Zahl = ...

MyBit = Zahl.6 'Das Bit MyBit übernimmt den Wert des 6. Bits von Zahl


War es das, was Du suchst?

Gruß,

Daniel

Duesentrieb
23.05.2015, 22:13
Hallo an alle,

erst mal vielen Dank für eure Unterstützung.
Leider ist es das aber nicht gewesen.
Ich versuche es noch mal anders zu erklären.

Ich habe 8 Schalte die ich abfrage. Um den Zustand der 8 zu übertragen (CAN) wandle ich die 8 Zustande in eine Dezimalzahl um.
Beispiel:
S1 - S2 - S3 - S4 - S5 - S6 - S7 - S8
1 2 4 8 16 32 64 128
1 0 1 0 0 0 1 0 = 1+4+64 = 69

Nun möchte ich auswerten ob mein Schalter 7 gesetzt ist.
Dazu müssten alle übertragenen Werte ausgewerte werden die >63 und <128 sind

Ich glaube dass ich jetzt die Lösung beim Schreiben selbst gefunden habe =;

malthy
23.05.2015, 22:21
Hi,

also entweder verstehe ich Dich nicht, oder Du hast es noch nicht ganz verstanden :-) Was Du machen willst müsste so gehen wie wir drei geschrieben haben. Wenn die Zustände Deiner Schalter in einem Byte stehen, dann kannst Du doch einfach abfragen ob das siebte Bit gesetzt ist, eben genau so wie oben dargestellt. Ob das Byte jetzt von einem Port kommt, über igrendeinen Bus oder aus einem Zufallsgenerator spielt dabei keine Rolle ...

Gruß
Malte

Duesentrieb
23.05.2015, 22:33
Hallo Malte,

jetzt habe ich aber wirklich auf dem Schlauch gestanden. Ihr habt alle Recht und ich habs jetzt kapiert
Danke euch!

oberallgeier
24.05.2015, 08:20
...
Beispiel:
S1 - S2 - S3 - S4 - S5 - S6 - S7 - S8
1 2 4 8 16 32 64 128
1 0 1 0 0 0 1 0 = 1+4+64 = 69 ...
... jetzt habe ich aber wirklich auf dem Schlauch gestanden. Ihr habt alle Recht und ich habs jetzt kapiert ...Vermutlich ist Dein Beispiel nur so - zum Verständnis - und Du kennst die übliche Bitanordnung von Dualzahlen. Dabei werden die Bits von rechts nach links numeriert, rechtes Bit ist das nullte, und Deine Zahlenfolge binär 1010 0010 hat den Wert dezimal 162
(die Stellenwerte im Einzelnen 128 0 32 0 0 0 2 0). Erst das "spiegelbildliche" Byte binär 0100 0101 ergibt dann Deinen Wert dez 69.

Duesentrieb
24.05.2015, 10:50
Hallo Oberallgeier,
du hast natürlich recht!

grüße
Daniel