Hallo, hat jemand einen Lösungsansatz für folgendes Problem: Ich habe auf einem ATtiny84 10 Byte im Sram unter einer Variable reserviert. Das entspricht 80 Bits. Ich möchte nun eine Funktion Schreiben, welche ein Bit in dieser Variable auf 0 oder 1 setzt. Das zu bearbeitende Bit soll mit einem anderen Register gewählt werden. Ich Programmiere mit Assembler und AVR Studio 4.
Geoffrey M. wrote: > Hallo, > hat jemand einen Lösungsansatz für folgendes Problem: Ich habe auf einem > ATtiny84 10 Byte im Sram unter einer Variable reserviert. Das entspricht > 80 Bits. Ich möchte nun eine Funktion Schreiben, welche ein Bit in > dieser Variable auf 0 oder 1 setzt. Das zu bearbeitende Bit soll mit > einem anderen Register gewählt werden. Ich Programmiere mit Assembler > und AVR Studio 4. Z-Pointer auf das erste SRAM Byte Index Register sichern Das 'Index' Register durch 8 teilen (3 mal nach rechts schieben) das Zwischenergebnis zum Z-Pointer dazuaddieren -> der Z-Pointer enthält schon mal die Byte Adresse des zu manipulierenden Bytes Index Register wiederherstellen und modulo 8 rechnen (mit 0x07 verunden). Damit hast du die Bitnummer des zu manipulierenden Bits im Byte. In einer Schleife nun das Index Register um 1 bis auf 0 erniedrigen und gleichzeitig in einem zweiten Register eine 1 nach links schieben -> die 1 steht dann an der Bitposition deren Nummer vorher im Indexregister war. Effektiv wird dadurch 1 << Index bestimmt, wobei Index variabel ist. Somit hast du: Eine Maske die eine 1 an einer Bitposition enthält und im Z-Pointer die SRAM Adresse an der diese Maske anzuwenden ist. Zum Setzen des Bits: mittels Z-Pointer das Byte holen und mit der Maske verodern. Byte über den Z-Pointer zurückschreiben. Zum Löschen des Bits: die Maske komplementieren (COM). Wieder das Byte über den Z-Pointer holen. Durch verunden mit der jetzt invertierten Maske das eine Bit auf 0 setzen und das Ergebnis über den Pointer zurückschreiben.
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.