Forum: Mikrocontroller und Digitale Elektronik Assembler Syntax


von Dieter (Gast)


Lesenswert?

Hallo,

Ich hab eine Frage und zwar ich möchte ein Bit in einem definierten 
Register setzen aber das avr Studio zeigt mir einen Fehler.

Tim1OFISR:
    sbi     DlyZust, up
    ldi     Temp1, Bit2
    OUT     TCCR1B, Temp1
    clr     Temp1
    reti
invalid number ->     DlyZust, up

kann jemand mir helpen:-)

von Εrnst B. (ernst)


Lesenswert?

Dieter schrieb:
> invalid number

Sagt's doch schon.
Statt "DlyZust" muss dort eine Zahl (bit-nummer) stehen.

von Dieter (Gast)


Lesenswert?

??
Aber ich möchte in diesem Register das erste Bit setzen. Ich hab so 
geschrieben


.equ Bit1 = 0
.def DlyZust = r5
....

von 0x42 (Gast)


Lesenswert?

Εrnst B✶ schrieb:
> Dieter schrieb:
>> invalid number
>
> Sagt's doch schon.
> Statt "DlyZust" muss dort eine Zahl (bit-nummer) stehen.

Sollte das nicht "statt up muss dort..." heißen?

von Dieter (Gast)


Lesenswert?

Sorry nicht Bit 1 sondern  up

.equ up

von Εrnst B. (ernst)


Lesenswert?

0x42 schrieb:
> Sollte das nicht "statt up muss dort..." heißen?

Ja, klar. Die Bitnummer ist hinten.

Und wenn DlyZust ein Alias für ein Register ist, muss es dann auch noch 
"SBR" statt "SBI" sein?

von semi (Gast)


Lesenswert?

Ich hab das gleiche Problem gehabt :

Ich möchte die ersten 2 Bits in einem defienierten Register setzen :

.equ Bit0 = 0
.equ Bit1 = 1
.
.
.def FktOff = r16
...

....
sbi FktOff, Bit0


Ich bekomme den gleichen Fehler

von Dieter (Gast)


Lesenswert?

aber ich will das erste Bit(up) von diesem Register "DlyZust" setzen
Wie mache ich das denn ?

Danke

von Karl H. (kbuchegg)


Lesenswert?

Indem du ein paar Dinge realisierst

* SBI ist für I/O Register
  Für normale Register, also die r.. Sachen, ist SBR gedacht

  Also
1
  SBI   PORTB, 0
  aber
1
  SBR   r16, 0

* .def DlyZust = r5
  Die kleiner Register (r0 bis r15, daher auch r5) sind in ihren
  Möglichkeiten eingeschränkt. Man kann nicht alle Operationen
  auf sie anwenden.

* Wenn du nicht genau weißt, was ein Befehl macht und welche
  Nebenbedingungen es gibt, dann stell den Cursor auf den Befehl
  und drücke F1. Dann geht die Hilfe auf und positioniert sich
  gleich auf den Befehl, wo du in aller Ruhe die Details nachlesen
  kannst.

von Dieter (Gast)


Lesenswert?

@Karl Heinz Buchegger
Danke!

von Stefan E. (sternst)


Lesenswert?

Karl Heinz Buchegger schrieb:
> * SBI ist für I/O Register
>   Für normale Register, also die r.. Sachen, ist SBR gedacht
>
>   Also
1
  SBI   PORTB, 0
>   aber
1
  SBR   r16, 0

Allerdings ist das Zweite ein NOP. Das SBR-Äquivalent wäre
1
  SBR   r16, 1<<0

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Stefan Ernst schrieb:
1
   SBR   r16, 0
>
> Allerdings ist das Zweite ein NOP.

Nicht wirklich. Im Gegensatz zu einem NOP setzt SBR=ORI Flags wie [Z]ero 
und [N]egative.

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
Noch kein Account? Hier anmelden.