Hallo Stomper,

ich bin ja selbst noch nicht fit in C. Der Code in Deinem ersten Posting ist ja richtig. Für mich ist der nur nicht sehr leserlich. Abgesehen davon, dass Du Port C und B aufsteigend indizierst und Port D absteigend.

Die Portinitialisierung sieht bei mir anders aus, wenn ich einen kompletten Port initialisiere, bei einzelnen Bits mach ich es wie Du. Meine Initialisierung funktioniert natürlich - sinngemäß - ebenso wie Deine. Überleg mal bitte, ob Du das vielleicht übersichtlicher findest:
Code:
/* Vorgesehene/belegte Anschlüsse am (ATMega168)-L168:
               ==================                     
           /RESET   1   28   PC5,(SCL)             
        RxD,(PD0)   2   27   PC4,(SDA)             
        TxD,(PD1)___3   26___PC3                   
              PD2   4   25   PC2, LCD 24x2, pin for RS line
              PD3   5   24   PC1, LCD 24x2, pin for RW line
              PD4___6   23___PC0, LCD 24x2, pin for ENABLE line
              VCC   7   22   GND                   
              GND   8   21   AREF                  
       XTAL1  PB6___9   20___VCC                   
       XTAL2  PB7  10   19   PB5, Eingang/Taster = SCK gegen GND
              PD5  11   18   PB4, LCD 24x2, pin for 4bit data bit 0
              PD6__12   17___PB3, LCD 24x2, pin for 4bit data bit 1
              PD7  13   16   PB2  LCD 24x2, pin for 4bit data bit 2
              PB0  14   15   PB1  LCD 24x2, pin for 4bit data bit 3       */
/* ============================================================================== */


.... das oben steht im Codeheader meines Mainmoduls, im main fängt es etwa so an ....


// Pins/Ports als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups aktivieren (1)
// Port B und Port C für LCDisplay angepasst:
  DDRB  = 0b00011110;   // siehe aktuelle Anschlussbelegung oben
        //    A  => PB5=SCK kann als Tastereingang benutzt werden, PullUpB5 = high
  PORTB = 0b11100001;   //    und Port/Pull Ups (1)  aktivieren
                        
  DDRC  = 0b01111111;   // Kein PC7-Pin bei m168PU, PortC bedient im L168
  PORTC = 0b00000000;   //   die 3 LCD-Steuerbits
                        
  DDRD  = 0b11110000;   // Nur RxD und TxD aktiv
  PORTD = 0b00001111;   //    Pull Ups aktivieren
Wie gesagt, es sind persönliche Ansichten und es ist nur Kosmetik. Die Anschlussbelegung im Code ist natürlich eher überflüssig, ich mache es trotzdem so. Ich finde meine Art der Portinitialisierung übersichtlicher und je übersichtlicher, desto weniger Fehlermöglichkeit *gggg*.

Viel Erfolg weiterhin.