This is not a register problem. I get this problem, if the name of the variable in the brackets {} is wrong.
In your case, do you dimmed a variable with name valaue as shown in the error message, or is there a typing error of valaue instead of value
This is not a register problem. I get this problem, if the name of the variable in the brackets {} is wrong.
In your case, do you dimmed a variable with name valaue as shown in the error message, or is there a typing error of valaue instead of value
Viele Grüße
Josef
-------------------------------------------------------------------------------------
DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel
HI!
Hm. The variable I use is a byval-Variable of a function.
It is just like that:
The error message (spelling-corrected...Code:Function Laybus(byval Value As Byte) 'Variable In Register Kopieren: $asm lds R32, {Value} CBI PORTC, 3 SBRC R1, 0 SBI PORTC, 3 $end Asm End Function):
Error: 5 Line: 884 No more space for BIT [VALUE] , in File.....
Isn't ist possible, that there is no farther space?
VLG Tobi
http://www.tobias-schlegel.de
"An AVR can solve (almost) every problem" - ts
Hi,
there is no register r32 (r0 to r31).
You can not use the syntax
lds r31, {value}
for a function/sub parameter or local variable. The address of a parameter or local variable is not known at compile time, so no SRAM address can be generated for {value}. Only the addresses of global variables are known at compile time and can be used with this syntax.
You can work with following way:
loadadr value, X
ld r24, X
loadadr can get the address of parameter/locals from the soft-stack, where the addresses of parameters and local variables are stored at runtime
Viele Grüße
Josef
-------------------------------------------------------------------------------------
DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel
AH!
Yes thanks! Now it works!
Thank you!
best regards,
Tobi
http://www.tobias-schlegel.de
"An AVR can solve (almost) every problem" - ts
Hi!
I have one more question about that...
How can I load a register (R16) to my Value-Variable?
ld X, r16??
I don't think...
VLG Tobi
http://www.tobias-schlegel.de
"An AVR can solve (almost) every problem" - ts
Hallo Tobi,
ich habe gerade eben gemerkt, dass ich da in einem Post auf Englisch geantwortet habe. Das ist wahrscheinlich passiert, als ich auch gleichzeitig das Forum auf http://www.mcselec.com/forum offen hatte in Kombination mit der englischen Fehlermeldung in Deinem Post. Ich bitte um Vergebung, falls sich da jemand daran gestört hat.
Der Umkehrbefehl ist:
st X, r16
Wenn Du Dich etwas weiter in ASM-Programmierung vertiefen willst, empfehle ich Dir, die ASM-Befehlsbeschreibung von ATMEL http://www.atmel.com/dyn/resources/p...ts/DOC0856.PDF herunterzuladen und Dir mal die möglichen Befehle anzuschauen.
Weiters ist in jedem Datenblatt zu den AVR ziemlich hinten eine Auflistung der Befehle, welche dieser Prozessor beherrscht mit einem Hinweis, was dieser macht. Damit hast schon die Grundlagen für die ASM-Programmierung.
Viele Grüße
Josef
-------------------------------------------------------------------------------------
DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel
HI!
Ich hab mir schon überlegt, ob ich dich fragen soll, ob es da vllt. Login-Probleme gibt...
ah.. st store.. danke ;D
danke für den Tip, mein ASM reicht gerade mal zum Ports ein und ausschalten...
Englisch stört mich generell nie, da muss man mal den Grips anstrengen!
Danke dann nochmal!
VLG Tobi
http://www.tobias-schlegel.de
"An AVR can solve (almost) every problem" - ts
Hi!
Da das mit dem Schreiben so gut klappt, habe ich das gleich mal auch mit dem Lesen versucht.
Folgender Code...:
Compiler schluckt's, liefert aber nur Datenmüll.Code:Function Readbus() 'Den Wert vom Bus lesen Dim Value As Byte Ddrb = &B00000000 'Alles Eingänge Ddrc = &B11111100 'Umschaltung, dass es keine Crashes gibt. $asm in R17, pinc CBR R16, 0b00000001 SBRC R17, 1 SBR R16, 0b00000001 CBR R16, 0b00000010 SBRC R17,0 SBR R16, 0b00000010 in R17, pinb CBR R16, 0b00000100 SBRC R17, 5 SBR R16, 0b00000100 CBR R16, 0b00001000 SBRC R17, 4 SBR R16, 0b00001000 CBR R16, 0b00010000 SBRC R17, 3 SBR R16, 0b00010000 CBR R16, 0b00100000 SBRC R17, 2 SBR R16, 0b00100000 CBR R16, 0b01000000 SBRC R17, 1 SBR R16, 0b01000000 CBR R16, 0b10000000 SBRC R17, 0 SBR R16, 0b10000000 Loadadr Value , X st X, r16 $end Asm Readbus = Value End Function
Ich habe ja den verdacht, dass ich vlaue diesmal mit einer lds(nur andersherum) ähnlcihen funktion laden muss, oder?
Nochmal Danke!
VLG Tobi
http://www.tobias-schlegel.de
"An AVR can solve (almost) every problem" - ts
hallo tobi, warum nimmst du die langsame "funktion".
nimm eine "sub" die ist etwas schneller. nimm ein "goto" und das ist noch schneller. wenn du mit ein varptr die sram-adresse einer variable erfragst, bekommst du die variable am schnellsten über die direkte adressenanfrage.
habe ich mit fastavr-basic herausbekommen, wo ich mir den asm-source-code
angeschaut habe.
mfg pebisoft
Ich nehme mal an, dass diese Funktion irgendwo mit
Declare Function ReadBus () as Byte
deklariert ist.
Warum Du das B-Port mitauf Input stellst, ist nicht ersichtlich. Das C-Port wird mitDdrb = &B00000000für die Pins 2-7 auf Output und die Pins 0-1 auf Input gestellt.Ddrc = &B11111100
Im nachfolgenden Code scheinst aber alle 8 vom Port C eingelesenen Bits auszuwerten.
Und nun zu Deiner eigentlichen Fragestellung.
Einen Funktionswert kann Du auf folgende Weise:
loadadr readbus, X
st X, r16
zurückgeben. Das obige Beispiel ist für den Fall, dass ReadBus einen Rückgabewert vom Type BYTE hat.
Du kannst den Funktionsnamen wie einen Variablennamen mit loadadr verwenden.
Ich gehe mal davon aus, dass diese Funktion primär einen experimentellen Charakter hat, um diverse Möglichkeiten zu testen. Befasse Dich mal mit dem Bascom Simulator, damit kannst Du Schritt für Schritt verfolgen, was in den einzelnen Registern und Speicherstellen passiert. Damit kannst Du nach herzenslust experimentieren, weil Du auch während der Simulation die Input-Pins im Pegel verändern kannst.
Viele Grüße
Josef
-------------------------------------------------------------------------------------
DOS-File System für BASCOM-AVR auf http://members.aon.at/voegel
Lesezeichen