PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Negative Zahlen bei Datenübertragung mit Byte



wolfgang köck
16.02.2006, 09:30
hi,

ich übertrage daten mit den protokoll SNAP mit folgenden aufbau:

preamble, sync, hdb2, hdb1, dab, sab, db16, db15, ..., db01, crc2, crc1

das funktioniert ja prima.

nun hab ich aber das problem mit negativen zahlen.

ich muß in bascom integer definieren, jedoch hat integer
mehr als 8 bit (1 byte)

wie kann ich diese integer-zahl in ein vorzeichenbehaftetes byte umwandeln bzw. umgekehrt.

der komplizierte weg ist

if integer-zahl <0 then
set minus
byte-zahl.0=not integer-zahl.0
byte-zahl.1=not integer-zahl.1
.....
byte-zahl.6=not integer-zahl.6
byte-zahl.7=minus
else
reset minus
byte-zahl.0=integer-zahl.0
byte-zahl.1=integer-zahl.1
.....
byte-zahl.6=integer-zahl.6
byte-zahl.7=minus
end if

vielen dank für eure hilfe im voraus!

Gruß Wolfgang

PicNick
16.02.2006, 10:19
Da brauchst du keine Umstände zu machen. DEr Wertebereich muß sich natürlich ausgehen, in ein signed Byte gehen eben nur -128 bis +127
aber wenn du diesen Wert im Bascom als Integer verwendest, brauchst du dann nur schicken "signedByte" = LOW(integerzahl)
das sind die passenden Bit's schon drin
Umgekehrt:
du kriegst ein signed byte rein und willst ein Integer draus machen:
if Inputbyte.7 = 1 then
integerzahl = MAKEINT( Inputbyte, &HFF)
else
integerzahl = MAKEINT( Inputbyte, &H00)
end if

wolfgang köck
16.02.2006, 12:43
hi,

danke für die schnelle antwort.

die +/- information steckt doch auch bei der integerzahl im msb oder??

wie bekomm ich diese dem mit bei

"signedByte" = LOW(integerzahl) ??

macht das bascom intern??

Gruß Wolfgang

PicNick
16.02.2006, 12:51
Ist einfach: die Zahl -128 schaut in einem Bascom -Integer so aus
&HFF80 ( wie gesagt, mehr als -128 geht nicht)
schickst du also das low ---> ist das &H80 , d.h. das Vorzeichenbit ist ohnehin richtig gesetzt
&HFF80 = &H80 = dezimal -128
&HFFFF = &HFF = dezimal -1
usw

wolfgang köck
17.02.2006, 12:29
Hallo,

möcht micht herzlich bedanken, funktioniert prima.

habs zwar geschafft mit SNAP die Daten zu übertragen, aber bei negativen zahlen war es dann vorbei.

jetzt funkts perfekt, nochmals DANKE!!

Gruß Wolfgang