Hi Mikerj - when I write a character I don't check for busy flag - it works ok without delays at the moment.
Hi Dannyf - I'm obviously having problems spotting the obvious. Any clues?

Thanks guys.
Single character write code;
====================
void LCD_char(char char2LCD)
{
RS_PIN=1; //sending data
RW_PIN=0; //write to lcd
DATA_PORT = char2LCD; //character = LCD data port
StrobeE_PIN();
RS_PIN=0; //restore RS_PIN to low state
} // end of LCD_char()
When writing the string, the busy flag is checked prior to writing to the lcd;
=====================================================
void LCD_string(char *buffer)
{
while(*buffer) // Write data to LCD up to null
{
while(LCD_busy()); // Wait while LCD is busy
LCD_char(*buffer);
buffer++; // Increment buffer
}
return;
}
This is my busy flag code;
==================
unsigned char LCD_busy(void)
{
RW_PIN = 1; // Set the control bits for read
RS_PIN = 0;
DelayFor18TCY();
E_PIN = 1; // Clock in the command
DelayFor18TCY();
// 8-bit interface
if(DATA_PORT&0x80) // Read bit 7 (busy bit)
{ // If high
E_PIN = 0; // Reset clock line
RW_PIN = 0; // Reset control line
return 1; // Return TRUE
}
else // Bit 7 low
{
E_PIN = 0; // Reset clock line
RW_PIN = 0; // Reset control line
return 0; // Return FALSE
}
}