TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: bigluis en 29 de Enero de 2010, 01:12:53

Título: Mejorando driver lcd.c de ccs
Publicado por: bigluis en 29 de Enero de 2010, 01:12:53
Revisando la librería de ccs para manejar el lcd he encontrado que se le pueden hacer las siguientes mejoras.

Las siguientes líneas

Código: [Seleccionar]
     lcd_send_nibble(n >> 4);
      lcd_send_nibble(n & 0xf);

pueden ser cambiadas por estas

Código: [Seleccionar]
  lcd_send_nibble(swap(n));
   lcd_send_nibble(swap(n));

Las líneas anteriores producen un ahorro de 6 líneas en assambler.

Y las siguientes lineas

Código: [Seleccionar]
void lcd_gotoxy(BYTE x, BYTE y)
{
   BYTE address;

   if(y!=1)
      address=LCD_LINE_TWO;
   else
      address=0;
    
   address+=x-1;
   lcd_send_byte(0,0x80|address);
}

pueden ser cambiadas por estas

Código: [Seleccionar]
#define lcd_gotoxy(x,y)  lcd_send_byte(0,0x80+ 0x40 * ( #if y < 3 y-1) #else y-3) + 0x14 #endif +(x-1))

La línea anterior es un macro que nos permite trabajar con lcd de 4 lineas, y ahorraremos como 20 lineas en assambler, pero tiene la desventaja que tenemos que modificar la funcion getc cambiando la linea

Código: [Seleccionar]
lcd_gotoxy(x,y);
por las siguientes líneas

Código: [Seleccionar]
   if(y<3)
      y=0x40 *(y-1);
   else
      y=0x40 * (y-3) + 0x14;
   lcd_send_byte(0,0x80+ y +(x-1));

Pero siempre obtendremos un ahorro de código y por lo tanto una mejora en el rendimiento del programa.