Forum: Mikrocontroller und Digitale Elektronik Ausgang toggeln in ASM


von toggler (Gast)


Lesenswert?

Hallo liebes Forum,

ich habe zwei Makros um einen Pin am Controller "EIN" bzw. "AUS" zu 
schalten.
1
#define set_port_pin_asm(port, bit) \
2
                    __asm__ __volatile__ \
3
                    ("sbi %[io_port], %[io_pin]"::\
4
                    [io_port] "I" (_SFR_IO_ADDR(port)), [io_pin] "i" (bit));
5
6
#define clr_port_pin_asm(port, bit) \
7
                    __asm__ __volatile__ \
8
                    ("cbi %[io_port], %[io_pin]"::\
9
                    [io_port] "I" (_SFR_IO_ADDR(port)), [io_pin] "i" (bit));
Gibt es denn eine Möglichkeit einen Pin auch zu toggel?

Das hier geht leider nicht :.o(
1
#define toggle_port_pin_asm(port, bit) \
2
                              __asm__ __volatile__ \
3
                              ("sbic %[io_port], %[io_pin]\,cbi %[io_port], %[io_pin],sbi %[io_port], %[io_pin]"::\
4
                              [io_port] "I" (_SFR_IO_ADDR(port)), [io_pin] "i" (bit));

Hat jemand einen Vorschlag?

Viele Grüße,
Peter ;o)

von holger (Gast)


Lesenswert?

>Gibt es denn eine Möglichkeit einen Pin auch zu toggel?

#define toggle_port_pin(port, bit) (port ^= (1 << bit))

von Peter II (Gast)


Lesenswert?

Hast du mal ins Datenblatt geschaut ob er das nicht hardwaremäßig schon 
kann?

von Spess53 (Gast)


Lesenswert?

Hi

>Gibt es denn eine Möglichkeit einen Pin auch zu toggel?

Bei neueren AVRs einfach eine 1 in das entsprechende Bit des 
PIN-Register schreiben.

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