hier der aktuelle code, leider immernoch ohne erfolg
aber danke schonmal für die hilfe.

habe die BUSY abfrage erstmal rausgenomen und 25ms eingesetzt.


Code:
/*******************************************************************************	
PortPin:	Display	
RB0			= E
RB2			= RS
RB3			= R/W
RB4..RB7	= D4..D7     
*****************************************************************************/


/** I N C L U D E S **********************************************************/

#include <p18f4550.h>
#include <delays.h>


/** D E F I N I T I O N S ****************************************************/

#define PORTLCD 	LATB
#define TRIS_LCD    TRISB
#define LCD_E		PORTBbits.RB0
#define LCD_RS		PORTBbits.RB2
#define LCD_RW		PORTBbits.RB3
#define nop			_asm nop _endasm

//****************************************************************************

#pragma code


void delay100us(unsigned char multiplikator)
// for  PicLSBK (16MHz Taktzyklus = 4 MHz Befehlszyklus)
{		
	Delay10TCYx(40*multiplikator);	//40*10*0,25µs = 100 µs
}


void LCD_BUSY(void)
{
	unsigned char temp1;
//	unsigned char temp2;
	do
	{
		TRIS_LCD = 0xF0; 		// LCD-PORT = high nibbles:eingang; low nibbles:ausgang
//Display abfrage
		LCD_RS = 0; 			// LCD im Befehls-Mode
		LCD_RW = 1; 			// LCD im Lesen-Mode
		LCD_E = 1; 				// Enable (LCD)
		temp1 = PORTLCD;
		temp1 = temp1 & 0xF0; 	// Niederw.Nibble (steuerbits) ausmaskieren
		LCD_E = 0; 				//   toggeln
		
		LCD_E = 1; 				// Enable (LCD)
//		temp2 = PORTLCD;
//		temp2 = (temp2>>4)&0x0f;
//		temp2 = temp1 | temp2; 	// Nibbles verbinden
		LCD_E = 0; 				//   toggeln
	} while (temp1>=0x80);	
		
	delay100us(1);
	LCD_RW = 0; 		// Busy = low: LCD im Schreiben-Mode
	TRIS_LCD = 0x00;     // LCD-PORT = Ausgänge
	PORTLCD  = 0x00;	 // Daten und Steuerleitungen LOW
} 


void LCD_WriteZeichen(unsigned char zeichen)
{
	unsigned char x;
delay100us(250);
//	LCD_BUSY(); 				// Warten bis LCD bereit ist
				

	x = zeichen & 0xf0;
//	LCD_RW = 0; 				// LCD im Schreiben-Mode
	LCD_RS = 1; 				// LCD im Befehl-Mode	
	PORTLCD = x;				//höherwertiges nibbel

nop;
	LCD_E = 1; 					// Enable (LCD)
nop;					
	LCD_E = 0;

delay100us(50);
	x = zeichen;			
	x = (x << 4)& 0xf0;			//niederwertiges nibbel
	LCD_RS = 1; 				// LCD im Befehl-Mode	
	PORTLCD = x;
	
	LCD_E = 1; 					// Enable (LCD)
nop;					
	LCD_E = 0;
nop;
	LCD_RS = 0;
}


void LCD_WriteString(char *String) 
{
	char zeichen;
	
	zeichen = *String;
	while(zeichen !='\0')
	{
		LCD_WriteZeichen(zeichen); 	// zeichen am LC-Display ausgeben
		String++; 					
		zeichen = *String; 			
	}
}

void LCD_WriteRegister(char data) 
{
	unsigned char x;
delay100us(250);
//	LCD_BUSY(); 				// Warten bis LCD bereit ist

	//	LCD_RW = 0; 				// LCD im Schreiben-Mode
	//	LCD_RS = 0; 				// LCD im Befehl-Mode	
					
	x = data & 0xf0;
	PORTLCD = x;				//höherwertiges nibbel

	LCD_E = 1; 					// Enable (LCD)
nop;					
	LCD_E = 0;

delay100us(50);
	x = data;			
	x = (x << 4)& 0xf0;			//niederwertiges nibbel
	PORTLCD = x;
	
	LCD_E = 1; 					// Enable (LCD)
nop;					
	LCD_E = 0;
}



void LCD_Init(void) 
{
// LCD initialisieren

	TRIS_LCD = 0x00;     // LCD-PORT = Ausgänge
	PORTLCD  = 0x00;	 // Daten und Steuerleitungen LOW


	delay100us (150);
	delay100us (150);	// warte über 30ms
	delay100us (100);

	PORTLCD = 0x30;				// Interface auf 8-Bit setzen						
	LCD_E = 1; 					// Enable (LCD)
nop;					
	LCD_E = 0;
	delay100us(50);
								// Interface auf 8-Bit setzen
	LCD_E = 1; 					// Enable (LCD)
nop;					
	LCD_E = 0;
	delay100us(2);
								// Interface auf 8-Bit setzen
	LCD_E = 1; 					// Enable (LCD)
nop;					
	LCD_E = 0;
	delay100us(2);
	
	PORTLCD = 0x20;				// Interface auf 4-Bit setzen
	LCD_E = 1; 					// Enable (LCD)
nop;					
	LCD_E = 0;

	LCD_WriteRegister(0x28);  // 2-zeilig, 5x8-Punkt-Matrix
	LCD_WriteRegister(0x08);  // Display aus	
	LCD_WriteRegister(0x01);  // Display löschen
	LCD_WriteRegister(0x02);  // Kursor nach rechts wandernd, kein Display-Shift
	LCD_WriteRegister(0x0c);  // Display ein  [ 0x0C = ein, 0x08 = aus ] 

}


void main (void)
{
	LCD_Init();
	LCD_WriteZeichen('t');
	LCD_WriteZeichen('e');
	LCD_WriteZeichen('s');
	LCD_WriteZeichen('t');
}