PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Byte umkehren



Nordi^
10.07.2007, 18:41
Hallo, ich habe folgendes Problem:
Ich empfange eine Bitfolge bei der das minderwertige Bit zuerst empfangen wird. Um mit dieser Bitfolge weiter zu rechnen müsste ich die Bitfolge umkehren, so das aus der Bitfolge z.B. 1000 = 8 die Folge 0001 = 1 (es soll nämlich eine 1 sein) rauskommt.

Kann mir jemand einen Tip geben wie ich das hinbekomme?

Gruß Nordi

zumgwadrad
10.07.2007, 18:52
Hi,
gibt es in Bascom Arays, also Felder?
Dann lies des Byte Bit für Bit in eines ein, Invertiere es mit ner einfachen if und Speicher des in nem Ausgangsarray!
Nicht schön aber einfach!

coCo
10.07.2007, 18:55
Hi,
kann man in Bascom die einzelnen Bits net direkt ansprechen?
Ich dachte in etwa so: (byte1 = empfangenes Byte)
Byte2.1 = Byte1.4
Byte2.2 = Byte1.3
usw.

MfG

Rofo88
10.07.2007, 18:58
@coCo ja das geht


Y = 0
For X = 7 To 0 Step -1
Byte2.x = Byte1.y
Incr Y
Next X

kolisson
21.07.2007, 00:21
versuchts doch mal mit dem rotate befehl:

'The ROTATE statement preserves all the bits

'so for a byte when set to 128, after a ROTATE, LEFT , the value will

'be 1

stefan_Z
21.07.2007, 14:19
versuchts doch mal mit dem rotate befehl:
'The ROTATE statement preserves all the bits
'so for a byte when set to 128, after a ROTATE, LEFT , the value will
'be 1

Ja, das ist doof geschrieben in der Hilfe... Bei 128/1 klapps natürlich. Aber mit 11010000 kommt dann z.B. 10100001 raus!
ROTATE verschiebt die Bits einfach (cool für Lauflichter ;- ) )

Was du machen willst ist ein logisches NOT.
Versuche mal Variable1 = NOT Variable1

PicNick
21.07.2007, 15:18
Wenn die Aufgabe lautet
B.0 = A.7
B.1 = A.6
B.2 = A.5
...
B.7 = A.0
geht das am besten mit kurzem Inline-Assembler, weil du da ganz einfach über das Carry-Bit arbeiten kannst, was Bascom so nicht zuläßt


$asm
LDS r24, {A}
LDS r25, {B}
;------------------ 8 mal --------------
ROL R24
ROR R25
;------------------------
STS {B}, R25
$end asm

Ob 8-mal hintereinander oder eine Schleife, hängt davon ab, ob du Platz oder lieber Zeit sparen willst.

Dirk
21.07.2007, 20:14
Hallo Nordi,

wenn du eine serielle Bitfolge empfängst, brauchst du doch kein Byte umzukehren, sondern nur die einzelnen empfangenen Bits in der richtigen Reihenfolge in das Byte hineinschieben.
Wenn bei dir das LSB zuerst ankommt, must du halt nach rechts (von links nach rechts) hineinschieben. Das LSB ist dann nach 8x schieben auch am LSB des Bytes angekommen.

Gruß Dirk