Forum: Mikrocontroller und Digitale Elektronik word -> 2*byte


von Nik Bamert (Gast)


Lesenswert?

Hi!

Gibt's in Bascom eine Funktion um eine Word Variable in 2 Bytes
aufzuteilen? Oder  kann man während der Laufzeit herausfinden in
welchen Registern die Word Variable gespeichert ist und so nachher die
Register einzeln lesen? Ich müsste nämlich 16-Bittrig adressieren
können...(Ram)

MFG Nik

P.s. in der Hilfe hab ich schon nachgeschaut, aber nur string-byte und
umgekehrt gefunden :(

von thkais (Gast)


Lesenswert?

Ohne Bascom zu kennen, versuche mal:

Lowbyte = Word AND 255
Highbyte = INT (Word/256)

von Nik Bamert (Gast)


Lesenswert?

Vielen Dank!

Ich habs nun mit einer kleinen Änderung hingekriegt und in ein
Testprogramm eingebaut;
$regfile "m16def.dat"
Dim wordvariable As Word
Dim lowbyte As Byte
Dim highbyte As Byte
Dim u As Single ' variable als zwischenspeicher

wordvariable = 500 ' als beispiel 500 für die wordvariable

lowbyte = wordvariable And 255
U = wordvariable / 256
highbyte = Int(u)

'folgendes kann weggelassen werden, dient aber zur anzeige auf dem
LCD
Disp:
Cls
Home
Lcd lowbyte
Lowerline
Lcd highbyte
End

von Olaf (Gast)


Lesenswert?

... wer für so eine Operation einen Divisionsoperator benutzt, sollte
eigentlich verhauen werden ;o)

von Nik Bamert (Gast)


Lesenswert?

Wenn du's besser weisst, dann sag doch wie du das machen würdest.
Bluffen kann jeder ;)

von Olaf (Gast)


Lesenswert?

... bei einer solchen Division bietet sich doch wohl eine
Schiebe-Operation an, nicht? Wer weiß schon wie der Ausdruck
"U = wordvariable / 256" übersetzt wird? Eine Division könnte -je
nach µC- etwas ineffizient (Codeumfang, Laufzeit) sein.

von Nik Bamert (Gast)


Lesenswert?

Ach so. Ich verwende einen Atmega16...
Für andere mag die Geschwindigkeit eine grössere Rolle spielen.
Bei mir in diesem Fall eben nicht :)
Aber wie meinst du das mit der Schiebeoperation?

von Dieter (Gast)


Lesenswert?

Hallo Nik

Probier es doch mal so.

Dim L As Word At &H60
Dim L_low As Byte At &H60 Overlay
Dim L_high As Byte At &H61 Overlay

Bascom Hilfe "DIM"


MFG

Dieter

von ThomasB (Gast)


Lesenswert?

hi:
geht es vieleicht so ?
dim a as byte:dim b as byte
a=low(&Hea31)  'lowbyte aus Hex EA31
b=High(&Hea31) 'Highbyte aus Hex EA31
print a;" ";b
end

mfg ThomasB

von Nik Bamert (Gast)


Lesenswert?

Danke :) geht auch :)

Ich habs vorher mal ähnlich versucht. Und zwar indem ich den Reg.
Inhalt per asm in das eine byte verschoben habe und das zweite byte vom
word ins zweite byte-variabel-register. Hat dann aber nicht
funktioniert. Kompilierungsfehler :'(

von Olaf (Gast)


Lesenswert?

... dass man eine Division durch bitweises Rechtsschieben erreichen kann
weißt du doch sicher? Auch in BASIC sollte das möglich sein (ich kenne
mich mit BASIC nicht aus). Soll heißen:
1 x nach rechts schieben => Division druch 2,
2 x nach rechts schieben => Division druch 4,
3 x nach rechts schieben => Division druch 8,
usw.

von schneidertobi (Gast)


Lesenswert?

Schonmal drangedacht, dass der Bascom compiler das /256 einfach
wegoptimiert und da entweder ne Schiebeperation hinbaut oder gelich die
Adresse vom High-Byte ? :)

Tobias

von Olaf (Gast)


Lesenswert?

... ja immer schön auf die Optimierung verlassen! Wird nur eine Frage
der Zeit sein bis du damit Schiffbruch erleidest. Nachdenken kann nicht
schaden; vielleicht kann man das aber von BASIC-"Programmierern"
nicht verlangen ;o)

-end of discussion-

von Nik Bamert (Gast)


Lesenswert?

doch sehr wohl kann man nachdenken von Basic Programmierern erwarten.
Doch wenn ich keinen Platzsparen muss und die Geschwindigkeit keine
grosse Rolle spielt, kann ich das ja machen wie ich das möchte.
Ok, bei z.b. C müsste ich mehr Nachdenken. Nur schon wegen der Logik
dieser Sprache...nun ja du magst das selbe von Basic denken...
Ich muss auch nicht immer wieder bekannt geben das Basic besser sei als
irgendetwas anderes..Obwohl das MEINE Ansicht ist. Aber einige haben
Anscheinend nix besseres zu tun als andere Programmierer zu beleidigen.
Ich denke das bezieht sich auf diese die es in einer Sprache versuchen,
dabei nicht weiterkommen und ja nicht zugeben wollen, das sie nicht
weiterkommen...mag ja irre idiotisch klingen, aber mir scheint sowas
einem Minderwertigkeitskomplex zu ähneln...

-end of discussion- :)

von Ratber (Gast)


Lesenswert?

@Olaf

Kann es sein das du nur Streit suchst ?

Anstatt dich über Anfänger lustig zu machen kannste entweder Helfen
oder einfach die Klappe halten.

Rumhöhnen kannste bei deiner Alten und "end of discussion" ist erst
dann wenn entweder keiner mehr was dazu zu sagen hat oder alle einen
Konsens gefunden haben. ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.