Forum: Mikrocontroller und Digitale Elektronik auf TIFR Register zugreifen geht nicht


von René (Gast)


Lesenswert?

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

von Fred S. (Gast)


Lesenswert?

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

von Tassilo B. (big_t)


Lesenswert?

Wobei
1
  in reg, TIFR
2
  sbrs reg, 4
die 'umständliche' Form von
1
  sbs TIFR, 4
ist.

Tassilo

von Tassilo B. (big_t)


Lesenswert?

Mist, sollte natürlich
1
sbis TIFR, 4
statt
1
sbs TIFR, 4
heißen.

Tassilo

von Fred S. (Gast)


Lesenswert?

Hi Tassilo,
>   sbs TIFR, 4
"sbs" ist kein dem AVR Assembler oder Assembler-2 bekannter Befehl.

Gruß

Fred

von Fred S. (Gast)


Lesenswert?

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

von Tassilo B. (big_t)


Lesenswert?

@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

von René (Gast)


Lesenswert?

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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von Sven P. (Gast)


Lesenswert?

>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.

von crazy horse (Gast)


Lesenswert?

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