Hallo zusammen! Ich suche eine effektive Lösung um auf dem AVR Einzel-Bitoperationen durchzuführen. Ich will z.B. Portpin PIND,4 mit dem Bit GPIOR0,0 EXOR verknüpfen. (Nach Jahren 8051 bin ich leider etwas verwöhnt) Danke! misc
PIND ist read only, Du kannst nur PORTD ändern: if( GPIOR0 & 1<<0 ) PORTD ^= 1<<4; Peter
Hallo Peter! Das Ergebnis wollte ich auch nicht wieder auf dem Port ausgeben, sondern in diesem Fall z.B. ins Carry schreiben. Egal. Mich interessiert auch mehr, wie man das halbwegs elegant in Assembler schreibt. Bitoperationen sind ja scheinbar keine Stärke der AVR.. misc
Man muß da etwas um die Ecke denken:
1 | |
2 | in r16, GPIOR0 |
3 | sbic PIND, 4 |
4 | inc r16 |
5 | lsr r16 ;C = GPIOR0.1 XOR PIND.4 |
Peter
In 8051 ist das aber auch nicht viel einfacher: [AVRASM] mov c, GPIOR0.0 jnb PIND.4, l1 cpl c l1: [/AVRASM Peter
Ups, Klammer vergessen: In 8051 ist das aber auch nicht viel einfacher:
1 | mov c, GPIOR0.0 |
2 | jnb PIND.4, l1 |
3 | cpl c |
4 | l1: |
Peter
Was im Fall von EXOR richtig ist, sonst eher nicht so. Dann werd ich mal ein bischen schieben.. Danke! misc
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.