mikrocontroller.net

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


Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :(

Autor: thkais (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Bascom zu kennen, versuche mal:

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

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Olaf (Gast)
Datum:

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

Autor: Nik Bamert (Gast)
Datum:

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

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ThomasB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :'(

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: schneidertobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Olaf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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-

Autor: Nik Bamert (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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- :)

Autor: Ratber (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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. ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.