Вы бы хоть книжку для начала какую - нибудь почитали. Впрочем, Вы что, на асме никогда функциями не пользовались ? void lcd_send_byte (u08 LCD_DATA);// для начала объявляем функцию
//впрочем, если она описана ранее, чем вызывается, можно этого не делать
void lcd_send_byte (u08 LCD_DATA)
{
DATA_DDR = (DATA_DDR | 0xF0);
setb(CMD_PORT, EN);
DATA_PORT = (DATA_PORT & 0x0F) | (LCD_DATA & 0xF0);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
clrb(CMD_PORT, EN);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
setb(CMD_PORT, EN);
DATA_PORT = (DATA_PORT & 0x0F) | (LCD_DATA << 4);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
clrb(CMD_PORT, EN);
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
//=======================================================================
void lcd_send_com (u08 LCD_DATA)
{
clrb(CMD_PORT, RS);
lcd_send_byte (LCD_DATA); // Это то, чего Вам не хватало для полного //счастья
lcd_io_in();
}
//========================================================================
//========================================================================
void Init_LCD (void)
{
_delay_ms(20);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x20);
_delay_us(50);
lcd_send_com_nibble(0x28);
_delay_us(50);
lcd_send_com(0x01);
_delay_ms(5);
lcd_send_com(0x06);
_delay_us(50);
lcd_send_com(0x0C);
_delay_us(50);
}