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
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.
> 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
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?
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.
Ewig nichts mehr in Assembler gemacht, aber versuche doch einmal ADD r5,#10. Oder sieh Dir LPM oder MUL an.
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
@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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.