PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : High und Lowbyte errechnen



Mr-400-Volt
28.01.2007, 15: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 !!!

PicNick
28.01.2007, 16:33
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, 16: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, 16: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

PicNick
28.01.2007, 16:54
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, 16:56
Das ist die Send Routine........


Send:
Reset Fsync
Shiftout Sdata , Sclk , Fsend , 0
Set Fsync
Return

Mr-400-Volt
28.01.2007, 17: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

PicNick
28.01.2007, 17:13
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, 17: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