portpin toggeln

Gast #2473556
Lesenswert?

es ist ein mega8
wie ich einen normalen Pin toggele weiss ich
zb.



ISR(TIMER2_OVF_vect)
{
 kanalblinktime++;
  if(kanalblinktime == 10)
  {
    PORTD ^=  (1 << PD2);}
  }
}

meine Frage war wie ich das mit oben ganannter Schreibweise machen 
könnte
den Pin kann ich ja so ein ausschalt
K1LED_ON();  an
K1LED_OFF(); aus
das geht ja aber wie geht das in der schreibweise zu toggeln
#2473563
Lesenswert?

Man kann Bitvariablen definieren, dann ist das einfacher zu schreiben 
und auch besser lesbar:
1
// Access bits like variables
2
struct bits {
3
  uint8_t b0:1, b1:1, b2:1, b3:1, b4:1, b5:1, b6:1, b7:1;
4
} __attribute__((__packed__));
5
#define SBIT_(port,pin) ((*(volatile struct bits*)&port).b##pin)
6
#define  SBIT(x,y)       SBIT_(x,y)
7

8

9

10
#define LED0   SBIT(PORTB, PB3)
11

12

13
void toggle_led0()
14
{
15
  LED0 = !LED0;
16
}


Peter

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren