Hallo was heißt in assembler quelltexten sowas: ldi temp, 1<<TOIE1 für was steht das 1<<TOIE1? das lässt sich nämlich mit nachdenken nicht entschlüsseln. luxx
Das ist eine 1, die um TOIE1 Stellen nach links verschoben wird. Bsp. Wenn zb. TOEI1 (ein Makro) den Wert 3 hat, dann wird die 1 um 3 Stellen nach links verschoben. Binaer gesehen: 1 0000 0001 3 Stellen nach links 0000 1000 Kuerzer ausgedruckt. 1 << TOIE1 ist ganz einfach eine Binaerzahl, in der das Bit mit der Nummer TOIE1 gesetzt ist.
Das Bit 'TOIE1' ist im Datenblatt erklärt und in der Include-Datei des AVRs definiert. Bei Abfragen (sbrs. sbrc sbis, sbic) und bei Bitmanipulation an I/O-Registern (sbi, cbi) braucht man die Bitnummer (0..7), also den Wert, der hinter dem Namen (z.B. TOIE1 Timer-Overflow-Interrupt-Enable-1) verbirgt. Beim Laden und einigen Operationen (ldi, sbr, cbr, cpi, andi, ori...) braucht man aber nicht die Bitnummer (0..7) sondern die Bitmaske (0..255). Und diese erreicht man durch das Linksschieben von Einsen um den Bitwert. Diese Schieberei macht aber nicht der AVR, sondern der Assembler, es kostet also keinerlei AVR-Ressourcen. Es ist also nur eine andere Schreibweise für 'Setze in temp das Bit Nummer toie1 und lösche alle anderen Bits in temp. Wenn man sich erstmal daran gewöhnt hat, dann ist der ASM-Quelltext dadurch lesbarer. Man sieht dann sofort, dass damit der Interrupt für Timer1-Überlauf eingeschaltet wird. Hätte man dafür 'ldi 0b_irgendwas' geschrieben, dann müsste man jedesmal im Datenblatt nachschlagen, welches Bit mit welcher Bedeutung gemeint war. ...
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.