PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Word-Konstante in Inline-Assembler lesen



Mitch64
27.03.2009, 13:04
Hallo,

kurze Frage.
Ich verwende BascomAVR und schreibe ein paar Inline-Assembler-Routinen für ATMega-Controller.

Ich stehe vor dem Problem, eine in Basic definierte Konstante (16 Bit)
in der Assembler-Routine in die Register einzulesen.

AVR Studio macht das so
ldi r24,Low(Konstant_Name)
ldi r25,High(Konstant_Name)

Leider funktioniert das Low() und High() mit Konstanten in Bascom nicht.
Wie macht man das in nun Bascom?

Mitch.

PicNick
27.03.2009, 13:48
Ich weiss im Moment nix Besseres, aber immerhin, es funzt


Const Konstant_name = 20000

Const Kons_h = Konstant_name / 256

$asm
ldi r24, Konstant_name
ldi r25, kons_h
$end Asm

Mitch64
27.03.2009, 13:56
Die Idee ist ja schon mal brauchbar!
Naja besser als kein High-Byte.

Mir wäre als Alternative noch eingefallen, anstelle der Konstanten eine Variablen zu verwenden:



Dim Var_Konstante as Word

Var_Konstante=&h1234

LDI r24,{Var_Konstante}
LDI r25,{Var_Konstante+1}

PicNick
27.03.2009, 14:03
Logo, geht auch, braucht aber Memory und Code.

Der Bascom-Assembler ist halt eine dünne Sache.

Vitis
27.03.2009, 19:15
nimm doch overlay variablen ?

Mitch64
27.03.2009, 20:23
eigentlich wollte ich eine Konstante verwenden.
Aber ist auch eine Möglichkeit um ans Ziel zu kommen.

oe9vfj
28.03.2009, 07:26
In BASCOM-Inline-Assembler kann/muss man LByte und HByte verwenden, also z.B.:


Const c1 = &H1234

ldi r16, lbyte(c1)
ldi r17, hbyte(c1)

Mitch64
28.03.2009, 10:39
Super!!!

Genau das habe ich gesucht! Vielen Dank.
Es funzt wunderbar!