Hallo, ich möchte ein ASM-File von der Codesammlung mit AVR-Studio 4.12 assemblieren und erhalte folgende Fehlermeldungen: >C:\src\Timer_test\Timer_test.asm(41): error: Operand(s) out of range in 'ldi >r18,0x100' >C:\src\Timer_test\Timer_test.asm(71): error: Operand(s) out of range in 'ldi >r18,0x100' Die Fehler bezieht sich auf folgende Zeile im Quelltext: > ldi prescaler, debounce wobei Prescaler oben mit r18 und debounce mit 256 Definiert wird. Frage: Nutzt jemand einen Assembler der es zulässt 16Bit Werte in 8Bit-Register zu schreiben und wenn ja, welches Byte wird dann tatsächlich übertragen, High oder Low-Byte ? Übrigens handelt es sich um Beitrag "Die genaue Sekunde / RTC" Gruss Jürgen
Hi, also zunächst kannst du nicht 9 bit in ein 8 bit-Register speichern, da es nur 8 bit hat. Du kannst aber 9 bit in zwei 8 bit-Register speichern dazu musst du die Zahl zerlegen. debounce hat bei deinem Beispiel den Wert 256 = 0b100000000 Wenn du nun die unteren 8 bits in das Register R18 speichern willst: ldi R18, LOW(debounce); R18 = 0b00000000 Und so speicherst du die oberen bits (also in deisem Falle die 0b1) nind Regsiter R19: ldi R19,HIGH(debounce); R19 = 0b00000001 Ich hoffe ich habe dir damit geholfen. Somit kannst du also Konstante Zahlen bis 16 bit in zwei Register speichern. Gruß Marc
Das ist mir alles vollkommen klar ;-) Mir geht es nicht um die Aufteilung von 16Bit Zahlen in 2 Register, sondern um die Syntax. Nochmal: Da es anscheinend Assembler gibt die den Befehl "ldi r16,$100" zulassen, möchte ich wissen was in R16 landet, $00 oder $01
Es landet 0 im Register. Es landet immer Modulo 256 in einem 8bit Register.
Diese Fehlermeldung wurde erst sehr spät in den AVR Assembler aufgenommen. Für den neuen Assembler muß daher die korrekte Syntax lauten:
1 | ldi prescaler, low(debounce) |
Peter
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.