Rd,Rr als Register?

Gast #356688
Lesenswert?
• ▲
▼
Hi,
habe ständig beim Compiler den Fehler, Invalid register (ir) und wrong
number (wn). Ich kann nicht entdecken woran es liegt :(. Hab auch schon
die Register höher als 15 probiert. dennoch treten immer noch die Fehler
auf. Im Datenblatt steht bei den Instruction Sets meist immer Rd, oder
Rr. Ich weiss das es Unterschiede zwischen den ersten 15 und den
anderen Registern gibt. Auch das die letzen Register als 16 bit
Adressregister benutzt werden können. Aber ich verstehe nicht die
Bedeutung von Rd und Rr ?!:(

Ein Codeschnipsel mit den Fehlern

.def  neuricht  = r8    ; neuer Richtungstatus
.def  key_press  = r6    ; gedrückte Taste

main:
        ir->ld  neuricht,key_press
  andi  neuricht,0x04      ; Maskieren- nur für Richtung Rechts
  wn->sbis  key_press, 3      ; Taste hoch gedrückt?
  rcall  thoch
  wn->sbis  key_press, 2      ; Taster runter?
  rcall   trunter
  rjmp  main

Hoffe jemand kann mir helfen,
Vielen Dank
daniel
Gast #356692
Lesenswert?
• ▲
▼
Schließe mich Johny an.

Habe dann den Code getestet:
[asm]
.def  neuricht   = r18    ; neuer Richtungstatus
.def  key_press  = r16    ; gedrückte Taste

main:
  mov  neuricht,key_press
  andi  neuricht,0x04      ; Maskieren- nur für Richtung Rechts

  sbrs  key_press, 3      ; Taste hoch gedrückt?
  nop

  sbrs  key_press, 2      ; Taster runter?
  nop

  rjmp  main
[/asm]
Gast #356693
Lesenswert?
• ▲
▼
Hi, Vielen Dank
ich hab es auf die Register r20 und r 21 geänder für zwei befehle
Also muss man bei der registerwahl unterscheiden mit was für werten man
arbeitet. Ob Register oder Konstanten zugewiesen werden.
Ein par Fehler sind schon weniger davon. Habe aber immer noch bei sbis
den Fehler wrong number, hab auch mal probiert key_press auf Register20
zu legen und zu sehen ob der Fehler verschwindet, war aber nicht der
Fall. :(
Ebenso habe ich auch einen Fehler mit
ld Register1,Register2
Ich weiss nicht woran das liegt :(
Aber vielen Dank für die Info, das mit den Registerunterschieden von
r16-r31 und den anderen, wird mir nun immer klarer.

Daniel
Gast #356694
Lesenswert?
• ▲
▼
> sbis /sbic ist nur für Ports und nicht für Register

Das mit den Ports ist Unsinn. sbis und sbic gehen mit allen
I/O-Registern, die im bitadressierbaren Bereich liegen, und das sind
bei weitem nicht nur Portregister. Ansonsten hat Fred recht. Du musst
hier die Befehle sbrs und sbrc verwenden!
Gast #356697
Lesenswert?
• ▲
▼
Du solltest Dir wirklich mal die Befehle ansehen, bevor Du
programmierst (im Instruction Set Manual oder in der Hilfe)! Das
Kopieren eines Wertes von einem Register in ein anderes geht mit mov
und nicht mit ld! ld lädt einen Wert aus dem SRAM!
Gast #356702
Lesenswert?
• ▲
▼
> Ports sind eine Untermenge der I/O Register bezüglich SBIC und
> SBIS

Wenn man jetzt Haare spalten will, dann darf man das auch nicht so
stehenlassen.
1. Die 'Ports' an sich sind keine Register und
2. Es gibt bei den größeren AVRs ne Menge Portregister, die nicht
bitadressierbar sind!

Bitadressierbar sind nur die unteren 32 I/O-Register.

Das soll jetzt nicht klugscheißerisch oder so sein. Ich halte es
einfach für besser, einem Neuling gleich die korrekten Begriffe
nahezubringen, so dass es nicht zu Missverständnissen kommt. Also nimms
mir nicht übel, Fred...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren