noch mal mit funktion void enable (void)

Code:
/** 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  // verzögerung 0,25µs

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

#pragma code

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

void enable(void)
{
   LCD_E = 1;                // Daten übernehmen
   delay100us(3);
   LCD_E = 0;
}

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
		
		enable();
	} 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(200);
//	LCD_BUSY(); 				// Warten bis LCD bereit ist
				
	LCD_RW = 0; 				// LCD im Schreiben-Mode
	LCD_RS = 1; 				// LCD im Befehl-Mode

	x = zeichen & 0xf0;
	x = x | LCD_RS;	
	PORTLCD = x;				//höherwertiges nibbel

	nop;
	enable();
delay100us(50);					//5ms warten nach den 1.nibble

	x = zeichen;			
	x = (x << 4)& 0xf0;			//niederwertiges nibbel
	x = x | LCD_RS;
	PORTLCD = x;
	
	enable();
delay100us(50);					//5ms warten nach den 2.nibble
	LCD_RS = 0;
}


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

void LCD_WriteRegister(unsigned char data) 
{
	unsigned char x;
delay100us(200);
//	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


	enable();

delay100us(50);					//5ms warten nach den 1.nibble
	x = data;			
	x = (x << 4)& 0xf0;			//niederwertiges nibbel
	PORTLCD = x;

	enable();	
delay100us(50);					//5ms warten nach dem 2.nibble
}



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						
	enable();
	
	delay100us(50);				//warte 5ms
								
			 					// Interface auf 8-Bit setzen
	enable();					// Enable (LCD)					

	delay100us(2);				//warte 200µs
								
	enable(); 					// Interface auf 8-Bit setzen
								// Enable (LCD)				

	delay100us(2);				//warte 200µs
	
	PORTLCD = 0x20;				// Interface auf 4-Bit setzen
	enable();					// Enable (LCD)
						
	LCD_WriteRegister(0x28);  // 2-zeilig, 5x8-Punkt-Matrix
	LCD_WriteRegister(0x08);  // Display aus	
	LCD_WriteRegister(0x01);  // Display löschen
	LCD_WriteRegister(0x06);  // Kursor nach rechts wandernd, kein Display-Shift
	LCD_WriteRegister(0x0f);  // Display ein  [ 0x0C = ein, 0x08 = aus ] 
}


void main (void)
{
   LCD_Init();
	
	LCD_WriteZeichen('t');
	LCD_WriteZeichen('x');
}