Archiv verlassen und diese Seite im Standarddesign anzeigen : High und Lowbyte errechnen
Mr-400-Volt
28.01.2007, 16:27
Hallo, ich habe folgendes Problem. Ich habe z.b. eine Zahl von 10737.4189, die ich in ein 14Bit high und 14Bit lowbyte zerlegen muß. Wie könnte ich das mit Bascom machen? Die Befehle HIGH und LOW erzeugen ja ein 16Bit Byte?????
Danke !!!
Die Zahl ist ja wohl in einem long mit 32 Bit enthalten
Du kannst die oberen 14 byte um 2 Bit nach oben shiften, sodaß sie sich im High -Word befinden
dadurch erhältst du zwei 16-Bit Zahlen, die jeweils die unteren bzw. oberen 14 Bit enthalten.
Mr-400-Volt
28.01.2007, 17:40
Also es ist so. Ich muß zwei 16 bit worte seriell übertragen, wobei die bit´s 15 und 16 steuercodes enthalten, und die anderen 14 bit´s das jeweilige high und low eines wertes. Wie erhalte ich nun die richtigen 16 bit worte ?
Mr-400-Volt
28.01.2007, 17:49
In dem Beispiel unten kann ich unter Frequenz eintragen was ich will, das Flsb und Fmsb ändert sich nicht....
Frequenz = 2000
Freq = Frequenz
Freq = Freq / Mclk
Freq = Freq * Parameter
Flsb = Low(freq)
Shift Freq , Left , 2
Fmsb = High(freq)
Fsend = &B0100000000000000 + Flsb
Gosub Send
Fsend = &B0100000000000000 + Fmsb
Gosub Send
Das ist ein Programmiergefummel.
DIM Zahl as LONG
DIM ausgabe as WORD
Zahl = nnnnnnnnn
DIe_LOWER_14:
ausgabe = zahl AND &H00003FFF
ausgabe = ausgabe + steuerzeichen
SEND (ausgabe) ' wie auch immer
DIe_HIGHER_14:
shift ausgabe, RIGHT, 14 ' zahl 14 Bit nach rechts schieben
ausgabe = zahl AND &H00003FFF ' so wie oben
ausgabe = ausgabe + steuerzeichen '
SEND (ausgabe) ' wie auch immer
Geht eleganter, aber so ist es wohl verständlicher
Steuerzeichen einfügen kommt drauf an, wo und wie die daherkommen
"senden" weiß ich auch nicht, was du da für eine Methode hast
Mr-400-Volt
28.01.2007, 17:56
Das ist die Send Routine........
Send:
Reset Fsync
Shiftout Sdata , Sclk , Fsend , 0
Set Fsync
Return
Mr-400-Volt
28.01.2007, 18:09
Also so ............
Frequenz = 1000
Freq = Frequenz
Freq = Freq / Mclk
Freq = Freq * Parameter
'----------- in freq steht die Zahl um die es geht
Flsb = Freq And &H00003FFF
Flsb = Flsb + &B01
Shift Freq , Right , 14
Fmsb = Freq And &H00003FFF
Fmsb = Fmsb + &B01
Ah so. Na dann machst du erst
shiftout sdata, sclk, ausgabe , 0, 14 ' 14 bit raus
shiftout sdata, sclk, ctl-bits , 0, 2 ' 2 steuerbit raus
Mr-400-Volt
28.01.2007, 18:21
Das geht leider nicht, da von dem angesteuertem Bauteil zwei 16 bit worte hintereinander erwartet werden, von denen die ersten beiden ein register beinhalten, und die 14 nachfolgenden den wert
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.