Сделал так:
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 lcd_send_data (u08 LCD_DATA)
{
setb(CMD_PORT,RS);
lcd_send_byte (LCD_DATA);
clrb(CMD_PORT,RS);
lcd_io_in();
}
//========================================================================
Не знаю, правильно или нет, компилятор не ругнулся, в симуляторе и в дизассемблере вроде все нормально.