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 :(
Ohne Bascom zu kennen, versuche mal: Lowbyte = Word AND 255 Highbyte = INT (Word/256)
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
... wer für so eine Operation einen Divisionsoperator benutzt, sollte eigentlich verhauen werden ;o)
Wenn du's besser weisst, dann sag doch wie du das machen würdest. Bluffen kann jeder ;)
... 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.
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?
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
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
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 :'(
... 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.
Schonmal drangedacht, dass der Bascom compiler das /256 einfach wegoptimiert und da entweder ne Schiebeperation hinbaut oder gelich die Adresse vom High-Byte ? :) Tobias
... 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-
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- :)
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.