Forum: Mikrocontroller und Digitale Elektronik Register R0 - R31 bitweise adressierbar?


von Patrick K. (unknown_artist)


Lesenswert?

Hallo!


Trotz Google, SuFu und Handbuch finde ich keine Antwort auf meine Frage:
(Aus einem Uni-Int. Fragenkatalog zur Prüfungsvorbereitung, deswegen 
denke ich, dass diese Frage auf einen im Praktikum verwendeten ATmega16 
bezogen ist)

Welche der Folgenden register sind Bit-Adressierbar?

R0 - R31
PORTA - PORTD
SREG

...

PORTA- PORTD ist klar - Da kann ich ja sbic oder ähnliche Befehle direkt 
auf ein bestimmtes Bit anwenden.

SREG ist auch klar, ich kann ja das Carry bit etc, einzeln setzen,

Aber R0-R31 ?
Vermutlich nicht, sbic oder ähnliches lässt sich ja nicht drauf 
anwenden. Ist das dann das entscheidende Kriterium?

In einem 2007er Beitrag hat Falk Brunner geschrieben:

>Ihr irrt, eure Eminenz. Der AVR HAT bitadressierbare Register, nämlich
>die SFRs 0..31, auf welche die Befehle sbi, cbi, sbis, sbic anwendbar
>sind.

Das sind ja die Special Function Register, aber ich dachte, dass davon 
auch nicht alle Bitadressierbar sind?

Und die R0-R31 liegen ja im Lower-Ram mit der Byte Adressierung 00-7F, 
wovon laut meinem Skript mindestens mal Byte-Addr. 20 - 2F 
Bitadressierbar sind. Dazu gehören aber die R0-R7 nicht, die haben 
Adresse 00-07, darüber kommen noch drei "Bänke", die nicht genauer 
definiert sind, aber zufällig bis Adresse 1F gehen. Sind das meine 
Gesuchten R8-R31?
Demnach wären diese nicht bitadressierbar.

Im AVR Tutorial unter "BITMANIPULATION" gibts einen beispielcode :


>andi r16, 0b11110000    ; löscht Bits 0-3 in r16, andi ist identisch mit
>                        ; cbr funktioniert nur für die Arbeitsregister >r16-r31

Das würde ja aber bedeuten, dass sie hier doch bitadressierbar wären!?


Hoffe mir kann hier jemand weiterhelfen?

Vielen Dank und Grüße,

Patrick

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Es kommt drauf an wie man "Adressierbarkeit" definiert. Für GPRs gibt es 
jau die SBRC, SBRS Befehle, während es selbst für die SFRs, die im 
bitadressierbaren Bereich liegen, nicht möglich ist, zB Bit 0 von R0 zu 
speichern. Es kann lediglich eine 1 oder eine 0 gespeichert werden, 
nicht ein Variabler Wert.

Letztendlcih hängt die Frage auch daran, ob ein 1-Bit breiter Zugriff 
(im Sinne eines 1 Bit breiten Speicherinterfaces) in AVR überhaupt 
vorhanden ist, oder ob die Bit-Befehle lediglich eine API darstellen, um 
Bitzugriffe zu vereinfachen.

von Ralf (Gast)


Lesenswert?

> Und die R0-R31 liegen ja im Lower-Ram mit der Byte Adressierung 00-7F,
> wovon laut meinem Skript mindestens mal Byte-Addr. 20 - 2F
> Bitadressierbar sind. Dazu gehören aber die R0-R7 nicht, die haben
> Adresse 00-07, darüber kommen noch drei "Bänke", die nicht genauer
> definiert sind, aber zufällig bis Adresse 1F gehen. Sind das meine
> Gesuchten R8-R31?
Die AVRs kenne ich nicht (gut), aber dafür den 8051/52 und dessen 
Derivate. Dort gibt es vier Bänke á acht Registern R7-R0, aber beim 
AVR gibt es "nur" eine Bank, dafür mit R31-R0.
Und die laut deinem Skript bitadressierbaren Bytes von 0x20-0x2F sind 
exakt diejenigen, die ein 805x bit-addressieren kann.
Daher werfe ich mal die Frage in den Raum: Kann es sein, dass du einen 
Skript-Wirrwarr hast?

Ralf

von Patrick K. (unknown_artist)


Lesenswert?

Tatsächlich, wenn man im Bildverzeichnis (ganz hinten im Skript!) 
nachsieht, bezieht sich das Modell auf einen ATmel 89Cx51, das Kapitel 
heißt "Der ATmega8" und im Praktikum haben wir einen ATmega16 verwendet.

Nicht besonders gut gelungen ..

Ok. . . jetzt weiß ich gar nichts mehr.

Kan man also nicht pauschal sagen?
Definition gabs bei uns keine "Offizielle". Ich bin auch nicht der 
Einzige, der diese Frage nicht beantworten kann ...
Möglicherweise hat der Fragensteller selbst keine Ahnung.


Nur mal nebenbei - kann ich einen 89Cx51 oder eine 805x eigentlich auch 
mit der gleichen Assemblersprache wie beim AVR programmieren?

von Einer (Gast)


Lesenswert?


von Konstantin K. (mikrokonst)


Lesenswert?

Was ist eigentlich an den R0-R15 anders als an R16-R31? Und warum werden 
im Assembler meistens (oder nur?) R16-R31 verwedet? Kennt jemand eine 
Antwort, ich finde irgendwie nichts.

von Ferkel (Gast)


Lesenswert?

Ewig nichts mehr in Assembler gemacht, aber versuche doch einmal ADD 
r5,#10.
Oder sieh Dir LPM oder MUL an.

von Mikki M. (mmerten)


Lesenswert?

Steht eigentlich alles im Handbuch ;)
R16-R31 erlauben zusätzliche Bitmanipulation und direkte Adressierung.
bei den Registerpaaren R25:R24 R27:R26 R29:R28 R31:R30 gibt`s noch 
zusätzliche 16Bit Befehle

von AVRnixblicker (Gast)


Lesenswert?

@Konstantin K.
hier:
http://www.atmel.com/dyn/resources/prod_documents/doc0856.pdf

Weiß jemand, in welchen AVR-CPUs die neuen Befehle
LAC, LAS, LAT und XCH zur Anwendung kommen?
Xmega-CPUs?

von spess53 (Gast)


Lesenswert?

Hi

>Weiß jemand, in welchen AVR-CPUs die neuen Befehle
>LAC, LAS, LAT und XCH zur Anwendung kommen?

Habe ich mich auch schon gefragt.

>Xmega-CPUs?

Die Befehle tauchen weder im A- noch im D-Manual auf.

Wer weiss, was ATML da vorhat?

MfG Spess

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.