Hallo, ich möchte gern ein Flag im TIFR Register abfragen Timer1 Match A also Bit 4 Ich will das nicht mit einem IR machen sondern mit einer Schleife loop: sbis TIFR, 4 rjmp loop aber das AVR Studio gibt mir einen Fehler aus Kann ich direkt auf das Register in der Form zugreifen? Controller ist ein Maga 16
Hi René, SBIS/C funktioniert nur für die unteren 32 I/O-Register. Je nach AVR geht es so: loop: in reg, TIFR sbrs reg, 4 rjmp loop oder so (bei AVRs, bei denen TIFR im "memory mapped" Bereich liegt): loop: lds reg, TIFR sbrs reg, 4 rjmp loop Gruß Fred
Wobei
1 | in reg, TIFR |
2 | sbrs reg, 4 |
die 'umständliche' Form von
1 | sbs TIFR, 4 |
ist. Tassilo
Mist, sollte natürlich
1 | sbis TIFR, 4 |
statt
1 | sbs TIFR, 4 |
heißen. Tassilo
Hi Tassilo, > sbs TIFR, 4 "sbs" ist kein dem AVR Assembler oder Assembler-2 bekannter Befehl. Gruß Fred
Tassilo Böhr wrote: > Mist, sollte natürlich >
1 | > sbis TIFR, 4 |
2 | > |
> ...
Genau das ging ja bei René nicht, da TIFR beim Mega16 bei 0x38 liegt,
also oberhalb der unteren 32 I/O-Adressen, und demnach nicht mit
sbis/sbic zugänglich ist.
Gruß
Fred
@Fred Das ist mir schon klar, ich wollte bloß anfügen, daß eine in/sbrs-Kombination 'umständlicher' ist als sbis. Daß das in diesem Fall aufgrund der Adresse nicht geht, hast du ja schon geschrieben... Tassilo
Danke euch es geht. Verwirrend ist wenn man in TIFR ein bit löschen will muß man eine 1 auf das entsprechende Bit schreiben. Aber naja letztendlich geht es so wie es soll.
René wrote: > Verwirrend ist wenn man in TIFR ein bit löschen will muß man eine 1 auf > das entsprechende Bit schreiben. Warum? Du benutzt doch auch Windows, und wenn du das anhalten willst, musst du über ,,Start'' gehen. ;-) http://www.nongnu.org/avr-libc/user-manual/FAQ.html#faq_intbits
>Verwirrend ist wenn man in TIFR ein bit löschen will muß man eine 1 auf >das entsprechende Bit schreiben. Das ist zwar verwirrend, aber ziemlich praktisch. Stell dir vor, du müsstest eine "0" reinschreiben. Ohne dann die anderen Bits versehentlich zu beeinflussen müsstest du dann so vorgehen, denn du weißt ja nicht, wie die Bits momentan gesetzt sind: 1. Register einlesen 2. Bit löschen 3. Register schreiben Aber so wie es Atmel umgesetzt hat, brauchste nur die "1" an die richtige Stelle zu schreiben, es ist egal, was an den andren Stellen steht.
nun ja, wenn schon bitadressiert, könnte man da ja auch ne 0 hinschreiben. Verstehe den SInn deines postings nicht.
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.