Forum: Mikrocontroller und Digitale Elektronik Bitoperationen mit AVR


von Michael Schmidt (Gast)


Lesenswert?

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

von Peter Dannegger (Gast)


Lesenswert?

PIND ist read only, Du kannst nur PORTD ändern:

if( GPIOR0 & 1<<0 )
  PORTD ^= 1<<4;


Peter

von Michael Schmidt (Gast)


Lesenswert?

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

von Peter Dannegger (Gast)


Lesenswert?

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

von Peter Dannegger (Gast)


Lesenswert?

In 8051 ist das aber auch nicht viel einfacher:

[AVRASM]
        mov     c, GPIOR0.0
        jnb     PIND.4, l1
        cpl     c
l1:
[/AVRASM


Peter

von Peter Dannegger (Gast)


Lesenswert?

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

von Michael Schmidt (Gast)


Lesenswert?

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