И может это все былобы не так сложно еслибы не было так легко.
Засада крылась в отсутствие предпоследней строки а именно LCD_DATA = RS;
привожу рабочую процедуру.
Код
void send_lcd_reg_2wire(unsigned char send_data, BOOL RS)
{
unsigned int i;
//if (RS!=0) // переключение типа данные/инструкции
// LCD_DATA = 1; // Данные
//else // иначе
LCD_DATA = 0; // команда
LCD_E = 1; // Начать прием
//PORTB.3 = RS;
for (i=0; i<8; i++) // цикл на 8 итераций
{
if ((send_data & 0x80) == 0x80) // если 7-й бит == 1 (т.е. грузим сначала старший бит)
LCD_DATA = 1; // запись 1 в линию данных
else // иначе
LCD_DATA = 0; // запись 0 в линию данных
#asm("nop"); // задержка для установления уровня
LCD_CLK = 1; // передний фронт CLK
#asm("nop"); // выдержка времени CLK
LCD_CLK = 0; // задний фронт CLK
send_data = send_data << 1; // сдвиг данных на 1 бит влево
}
delay_us(255) ;
LCD_DATA = RS;
LCD_E = 0; // завершить прием
}