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 !!!
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.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
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 ?
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.
Code: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
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Das ist die Send Routine........
Send:
Reset Fsync
Shiftout Sdata , Sclk , Fsend , 0
Set Fsync
Return
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
Code:shiftout sdata, sclk, ausgabe , 0, 14 ' 14 bit raus shiftout sdata, sclk, ctl-bits , 0, 2 ' 2 steuerbit raus
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
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
Lesezeichen