Moin moin!

Hab mein LCD-Display zumindest mal initialisiert bekommen. Glaub ich wenigstens. Nach Ablauf dieses Programms

Code:
// Ansteuerung eines 16*2-Zeichen LCDs (44780-kompatibel)

#include <avr\io.h>

#define CPU_CK		8000000
#define LCD			PORTB

#define DB4			0
#define DB5			1
#define DB6			2
#define DB7			3
#define ENABLE		4
#define RW			5
#define RS			6
#define CONTRAST	7

void waitus(int d) {			// Feste Anzahl von Mikrosekunden warten
	int i,a;
	for(i=0;i<(d/(CPU_CK/1000));i++) {
		a=i;					// Eigentlich "asm:nop", Syntax??
	}
}

void init(void) {
	DDRB	= 0xFF;
//-------------------------------------------------------------------------------------------
	waitus(15000);
	LCD		=  (1<<ENABLE);
	LCD		|= (1<<DB4)|(1<<DB5);					// DB4 und DB5 setzen
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
//-------------------------------------------------------------------------------------------
	waitus(5000);
	LCD		= (1<<ENABLE);
	LCD		|= (1<<DB4)|(1<<DB5);					// DB4 und DB5 setzen
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
//-------------------------------------------------------------------------------------------
	waitus(1000);
	LCD		=  (1<<ENABLE);
	LCD		|= (1<<DB4)|(1<<DB5);					// DB4 und DB5 setzen
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
//-------------------------------------------------------------------------------------------
	waitus(1000);
	LCD		=  (1<<ENABLE);
	LCD		|= (1<<DB5);						// DB5 setzen (4bit-Modus aktivieren)
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
//-------------------------------------------------------------------------------------------
	waitus(1000);
	LCD		=  (1<<ENABLE);
	LCD		|= (1<<DB5);						// DB5 setzen (4bit-Modus)
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
	
	waitus(1000);
	LCD		=  (1<<ENABLE);
	LCD		|= (1<<DB7);						// DB7 setzen (2-zeiliges Display)
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
//-------------------------------------------------------------------------------------------
	waitus(1000);
	LCD		=  (1<<ENABLE);
	waitus(1000);						// Leeres Nibble
	LCD		&= ~(1<<ENABLE);
	
	waitus(1000);
	LCD		=  (1<<ENABLE);
	LCD		|= (1<<DB7)|(1<<DB6)|(1<<DB5);	// Display on, Cursor on
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
//-------------------------------------------------------------------------------------------
	waitus(1000);
	LCD		=  (1<<ENABLE);
	waitus(1000);						// Leeres Nibble
	LCD		&= ~(1<<ENABLE);
	
	waitus(1000);
	LCD		=  (1<<ENABLE);
	LCD		|= (1<<DB4);				// Clear Display
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
//-------------------------------------------------------------------------------------------
	waitus(1000);
	LCD		=  (1<<ENABLE);
	waitus(1000);						// Leeres Nibble
	LCD		&= ~(1<<ENABLE);
	
	waitus(1000);
	LCD		=  (1<<ENABLE);
	LCD		|= (1<<DB6)|(1<<DB5);		// Increment Cursor after writing
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
}

int main(void) {
	init();
//-------------------------------------------------------------------------------------------
	waitus(15000);
	LCD		=  (1<<ENABLE)|(1<<RS);
	LCD		|= (1<<DB5)|(1<<DB4);		// Erstes Nibble=0x3
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
	
	waitus(1000);
	LCD		=  (1<<ENABLE)|(1<<RS);
	waitus(1000);						// Zweites Nibble=0x0, zusammen "0"
	LCD		&= ~(1<<ENABLE);
//-------------------------------------------------------------------------------------------
	waitus(15000);
	LCD		=  (1<<ENABLE)|(1<<RS);
	LCD		|= (1<<DB6);				// Erstes Nibble=0x4
	waitus(1000);
	LCD		&= ~(1<<ENABLE);
	
	waitus(1000);
	LCD		=  (1<<ENABLE)|(1<<RS);
	LCD		|= (1<<DB7)|(1<<DB6)|(1<<DB5);	// Zweites Nibble=0xE, zusammen "N"
	waitus(1000);						
	LCD		&= ~(1<<ENABLE);
}
im ATm16 zeigt mein Display einen Cursor in der ersten Zeile auf Position eins. Von der Initialisierung her sollte das auch stimmen, bloss wird anscheinend der Code in main() nicht ausgefuehrt. Da sollte naemlich eine "0" und ein "N" geschrieben werden, der cursor ruehrt sich aber kein Stueck.

Kann mal jemand drueberschauen? Ich hab schon son leichten Tunnelblick und find den Fehler nich...

Danke,

Nils