Hey sternst,
vielen Dank für den Schubser, der Wald und die vielen Bäume.... 
Code:
struct LED
{
volatile unsigned char *ddr;
volatile unsigned char *port;
uint8_t pin;
};
void InitLed(struct LED *led)
{
*led->ddr |= 1<<(*led).pin;
}
void LedOn(struct LED *led)
{
*led->port |= 1<<(*led).pin;
}
void main()
{
struct LED led1 = {&DDRA, &PORTA, PA0};
struct LED led2 = {&DDRA, &PORTA, PA1};
InitLed(&led1);
InitLed(&led2);
}
Ich habe außerdem den Weg von oberallgeier probiert:
Code:
#define SetBit(ADDR,BIT) (ADDR |= (1<<BIT))
#define ClrBit(ADDR,BIT) (ADDR &= ~(1<<BIT))
#define TglBit(ADDR,BIT) (ADDR ^= (1<<BIT))
#define Led_1_An() SetBit(PORTA,PA0)
#define Led_1_Aus() ClrBit(PORTA,PA0)
#define Tgl_Led_1() TglBit(PORTA,PA0)
#define Led_2_An() SetBit(PORTA,PA1)
#define Led_2_Aus() ClrBit(PORTA,PA1)
#define Tgl_Led_2() TglBit(PORTA,PA1)
Bei meinem aktuellen Projekt werde ich die define-Variante verwenden, doch die Flexibilität der Structs ist mir für Projekte wichtig, wo ich während des Betriebs Pins konfigurieren können möchte ohne den Microcontroller neu programmieren zu müssen, außerdem bietet sich hier noch eine "verkettete Liste" an. 
Viele Grüße,
Crazy
Lesezeichen