#define LCD_DATA_PORT PORTD
#define LCD_TYPE 2

#ifndef EEPROM_SDA

#define EEPROM_SDA  PIN_B6
#define EEPROM_SCL  PIN_B7

#endif

#include <lcd.c>
#include <kbd.c>
#include <stdlib.h>     //Para que funcione atoi, atof,...
#include <2464.c>

void  get_string(char * s,int max)  //Permite obtener valores del teclado
{                                   
   int len;
   char c;
   max--;
   len=0;
   c=0;
   do
   
      {
      c=kbd_getc();
      if ((c>= ' ')&&(c<='~')&&(c!='#'))
         if (len<max)
         {
            s[len++]=c;
            lcd_putc(c);
         }
      }
   while (c!='#');
   s[len]=0;
   c=0;
}


void main()
{

   int8 out,in,a,r,dir2;
   char d,dir[4],dat[8];
   
   lcd_init();
   init_ext_eeprom();
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
  

  while (true)
   {
   if (r==0)
   {
   lcd_gotoxy(3,1);
   printf(lcd_putc,"PROYECTO");   //Inicio, muestra nombre y materia
   lcd_gotoxy(2,2);
   printf(lcd_putc,":) senaforo :(");
   delay_ms(3000);
   printf(lcd_putc,"\f");                 //Limpia pantalla
   
   }
   r=1;
   if (r==1)
   {
   printf(lcd_putc,"\f");
   lcd_gotoxy(1,1);
   printf(lcd_putc,"read 1) write 2)");   //Muestra menu de inicio
        
   do
      {
         d=kbd_getc();                    //Obtiene instruccion
         if(d=='1')
            a=1;
         if(d=='2')
            a=2;
      }
      while((d!='1')&&(d!='2'));          //Mensaje de error
      
      lcd_gotoxy(1,2);
      printf(lcd_putc,"%d",a);
      delay_ms(3000);
      
      switch(a)
      {
      case (1):                           //Eleccion lectura
         printf(lcd_putc,"\f");           //Limpia pantalla
         lcd_gotoxy(1,1);
         printf(lcd_putc,"Direccion=");   
         get_string(dir,4);               //Obtiene direccion para leer
         lcd_gotoxy(1,2);
         dir2=atoi(dir);
         in=read_ext_eeprom(dir2);         //Lectura a la memoria
         printf(lcd_putc,"Dato=%u",in);   //Imrime dato contenido en direccion
         delay_ms(1000);
         break;
      case (2):
         printf(lcd_putc,"\f");           //Eleccion escritura
         lcd_gotoxy(1,1);
         printf(lcd_putc,"Direccion=");   
         get_string(dir,4);               //Obtiene direccion a ser escrita
         lcd_gotoxy(1,2);
         printf(lcd_putc,"Dato=");        
         get_string(dat,8);               //Otiene valor de dato
         out=atoi(dat);
         dir2=atoi(dir);
         write_ext_eeprom(dir2,out);       //Escritura a la memoria
         delay_ms(10);
         break;
      }
   
   }
   }
}