
entao a rotina....seria assim ......mas num funfa

o que esta errado ???
sabendo-se que
cpp code
#define LCD_EN RB0
#define LCD_RS RB1
#define LCD_RW RB2
#define LCD_D4 RB4 //data
#define LCD_D5 RB5 //data
#define LCD_D6 RB6 //data
#define LCD_D7 RB7 //data
unsigned char lcd_read(void)
{
unsigned char data = 0;
TRISB = 0xF0; // configure the datas pins as inputs
LCD_RS = 0; // command
LCD_RW = 1; // pin rw in 1 to read
LCD_EN = 1;
if (RB7) data |= 0x80; //else data|= 0x00; // lê os quatro bits mais significativos
if (RB6) data |= 0x40; //else data|= 0x00;
if (RB5) data |= 0x20; //else data|= 0x00;
if (RB4) data |= 0x10; //else data|= 0x00;
LCD_EN = 0; // dá um pulso na linha enable
nop();
LCD_EN = 1;
if (RB7) data |= 0x08; //else data|= 0x00; // lê os quatro bits menos significativos
if (RB6) data |= 0x04; //else data|= 0x00;
if (RB5) data |= 0x02; //else data|= 0x00;
if (RB4) data |= 0x01; //else data|= 0x00;
LCD_EN = 0; // desabilita o display
LCD_RW = 0; // volta para write
TRISB = 0x00;
return data; // retorna o byte lido
}
void lcd_write(unsigned char c, unsigned char rs)
{
while(lcd_read( )& 0x80); // 1=busy / 0=ready
if(rs) LCD_RS=1; else LCD_RS=0; // data or command
if(c & 0x80) LCD_D7 = 1; else LCD_D7 = 0;
if(c & 0x40) LCD_D6 = 1; else LCD_D6 = 0;
if(c & 0x20) LCD_D5 = 1; else LCD_D5 = 0;
if(c & 0x10) LCD_D4 = 1; else LCD_D4 = 0;
LCD_STROBE;
if(c & 0x08) LCD_D7 = 1; else LCD_D7 = 0;
if(c & 0x04) LCD_D6 = 1; else LCD_D6 = 0;
if(c & 0x02) LCD_D5 = 1; else LCD_D5 = 0;
if(c & 0x01) LCD_D4 = 1; else LCD_D4 = 0;
LCD_STROBE;
LCD_RS=0; //0=>comando 1=>data
LCD_RW=0; //0=>write 1=>read
//Delay(40);
}