Hallo, versuche gerade auf dem Atmega48 das TWI in Betrieb zu nehmen. Aber leider scheitere ich schon ganz am Anfang. Im Datenblatt ist eine ausführliche Erklärung inklusive Beispielcode. Ab Seite 221 http://www.atmel.com/Images/doc2545.pdf Kopiere ich den ersten Codeabschnitt krieg ich allerdings eine Fehlermeldung. ldi r16, (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) out TWCR, r16 führt zu: i2c.asm(3): error: Operand 1 out of range: 0xbc Woran liegt das?
Hi
>Woran liegt das?
Im Datenblatt ist ein allg. Beispiel. Beim ATMega48 liegen aber die
Adressen der TWI-Register außerhalb des Bereichs, der mit 'in/out'
adressierbar ist.
Einfach in/out durch lds/sts ersetzen.
MfG Spess
Vielen dank Spess, habs verstanden. Ich war nur sehr verwundert, dass der Beispielcode aus dem Datenblatt nicht geht. Wäre es füre einen allgemeinen Beispielcode nicht wesentlich sinnvoller immer lds und sts zu verwenden? Mit den beiden Befehlen kann ich doch auch die in out Register ansprechen?
Hi >Wäre es füre einen >allgemeinen Beispielcode nicht wesentlich sinnvoller immer lds und sts >zu verwenden? Nein. Dann stimmen die Adress-Konstanten aus den Include-Dateien nicht. Die IO-Adressen für in/out gehen von $00..$3F. Für sts/lds haben die gleichen Register die Adressen $20...$5F. Ein anderer Grund wäre u.U. das lds/sts im Gegensatz zu in/out 2 Takte und 2 Word Code benötigen. 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.