Estoy trabajando en la interconexión de 16X2 lcd en modo 4bit con pic18f4550. Los 4 bits más altos (D4, D5, D6, D7) están conectados a PORTA1, A2, A3, A4, pin RAO como RS, RE2 como RW, RE3 como RE3. Estoy impresionado con el siguiente código que no muestra nada. El siguiente código se compila sin ningún error, pero no muestra nada (¿no supone ningún error en mi conexión de hardware)? / * * Archivo: main.c * Autor: tamil * * Creado el 5 de junio de 2013, 11:32 PM * / #incluir
#pragma config FOSC = HS // to select external osc
// CPU System Clock Postscaler:
// [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2 = 48 MHz CPU Clock]
#pragma config CPUDIV = OSC1_PLL2
#pragma config PWRT = ON // 62 ms waiting at start
#pragma config BOR = ON // Brown our Reset enabled (IMPORTANT!!!)
#pragma config BORV = 2 // Reset level = 2,7 V
#pragma config WDT = OFF // watch dog timer off
#pragma config DEBUG = ON,LVP = OFF // debugger on , as per pickit3
#pragma config PBADEN = OFF //PORTB<4:0> pins are configured as digital I/O on Reset
#pragma config MCLRE = ON //MCLR pin enabled; RE3 input pin disabled
// lvp debería estar apagado
#define rs LATAbits.LATA0
#define rw LATEbits.LATE1
#define en LATEbits.LATE2
#define lcdport LATA
void Delay_ms(int ms)
{
int i,j=0;
for(i=0;i<ms;i++)
for(j=0;j<165;j++);
}
void lcdcmd(unsigned char cmdout)
{
lcdport=(lcdport |(cmdout << 1)); //Send command to lcdport=PORTB
rs = 0;
rw = 0;
en = 1;
Delay_ms(1);
en = 0;
}
void lcddata(unsigned char dataout)
{
lcdport=(lcdport | (dataout << 1)); //Send data to lcdport=PORTB
rs=1;
rw=0;
en=1;
Delay_ms(1);
en=0;
}
void dis_data(unsigned char data_value)
{
unsigned char data_value1;
data_value1=(data_value&0xF0);
lcddata(data_value1);
data_value1=((data_value<<4)&0xF0);
lcddata(data_value1);
}
void dis_cmd(unsigned char cmd_value)
{
unsigned char cmd_value1;
cmd_value1 = (cmd_value & 0xF0); // Mask lower nibble because RB4-RB7 pins are being used
lcdcmd(cmd_value1); // Send to LCD
cmd_value1 = ((cmd_value<<4) & 0xF0); // Shift 4-bit and mask
lcdcmd(cmd_value1); // Send to LCD
}
void lcd_ini()
{
dis_cmd(0x02);
Delay_ms(200);// To initialize LCD in 4-bit mode.
dis_cmd(0x28);
Delay_ms(200);// To initialize LCD in 2 lines, 5x7 dots and 4bit mode.
dis_cmd(0x0C);
Delay_ms(200);
dis_cmd(0x06);
Delay_ms(200);
dis_cmd(0x80);
Delay_ms(200);
}
void main ()
{
unsigned char data[]="tamil";
unsigned int x =8;
//unsigned int y = 1;
//unsigned int i=0;
ADCON1=15; // to configure all analog pins as digital i/o
TRISA = 0; // to config port A as o/p
TRISE = 0;// to make it as o/p
lcd_ini();
// LCD initialization
while(data[i]!=' #pragma config FOSC = HS // to select external osc
// CPU System Clock Postscaler:
// [OSC1/OSC2 Src: /1][96 MHz PLL Src: /2 = 48 MHz CPU Clock]
#pragma config CPUDIV = OSC1_PLL2
#pragma config PWRT = ON // 62 ms waiting at start
#pragma config BOR = ON // Brown our Reset enabled (IMPORTANT!!!)
#pragma config BORV = 2 // Reset level = 2,7 V
#pragma config WDT = OFF // watch dog timer off
#pragma config DEBUG = ON,LVP = OFF // debugger on , as per pickit3
#pragma config PBADEN = OFF //PORTB<4:0> pins are configured as digital I/O on Reset
#pragma config MCLRE = ON //MCLR pin enabled; RE3 input pin disabled
')
{
dis_data(data[i]);
Delay_ms(200);
i++;
}
}