Hola . Tengo unas dudas acerca del tema que estan tratando. Soy nuevo y estoy realizando un pequeño trabajo, en el cual tengo que leer, escribir y guardar datos de tipo short, int, long, int32, y float usando un teclado, un pic 18F452 y una LCD en una memoria EEprom externa. Les adjunto lo que llevo del programa, ojala alguien pueda ayudarme con lo que me falta.
#include <18F452.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES WDT128 //Watch Dog Timer uses 1:128 Postscale
#FUSES XT //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOOSCSEN //Oscillator switching is disabled, main oscillator is source
#FUSES NOBROWNOUT //No brownout reset
#FUSES BORV20 //Brownout reset at 2.0V
#FUSES PUT //Power Up Timer
#FUSES STVREN //Stack full/underflow will cause reset
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT //Program memory not write protected
#FUSES NOWRTD //Data EEPROM not write protected
#FUSES NOWRTB //Boot block not write protected
#FUSES NOWRTC //configuration not registers write protected
#FUSES NOCPD //No EE protection
#FUSES NOCPB //No Boot Block code protection
#FUSES NOEBTR //Memory not protected from table reads
#FUSES NOEBTRB //Boot block not protected from table reads
#use delay(clock=4000000)
#include <stdlib.h>
#include <2408.c>
#include<external_eeprom.c>
#define LCD_DATA_PORT getenv("SFR:PORTC")
#include <LCD.C>
#define use_portb_kbd TRUE
#include <KBD.C>
short Dato_short;
int Direccion_EEPROM_short[5];
char Caracter,Tecla;
int Indice;
int Direccion_EEPROM;
int Cantidad_Datos;
int Posicion_bit;
void Teclado_Libre()
{
do {
Tecla = kbd_getc();
}
while(Tecla!='\0');
}
void Recibe_Tecla()
{
do
{
Caracter=kbd_getc();
}while(Caracter==0);
}
void main()
{
set_tris_a(0x3F);//0011 1111
set_tris_b(0xE0);//1110 0000
set_tris_c(0x00);//0000 0000
set_tris_d(0x00);//0000 0000
set_tris_e(0x07);//0000 0111
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
lcd_init();
kbd_init();
port_b_pullups(TRUE);
lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc("1) Escribir Dato");
lcd_gotoxy(1,2);
lcd_putc("2) Leer Dato");
Indice=0;
while(TRUE)
{
Recibe_Tecla();
if(Caracter!=0)
{
if(Caracter=='1')
{
Teclado_Libre();
lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc("1)Short 2)Int 3)Long");
lcd_gotoxy(1,2);
lcd_putc("4)int32 5)Float");
A1:
Recibe_Tecla();
if( (Caracter>='1') && (Caracter<='5') )
{
if(Caracter=='1')
{
lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc("Ingrese Dato short");
lcd_gotoxy(1,2);
lcd_putc("y presione *");
A2:
Recibe_Tecla();
if( (Caracter>='0') && (Caracter<='1') )
{
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(LCD_PUTC"Dato: %c",Caracter);
if(Caracter=='1')
{
Dato_short=True;
}
else
{
Dato_short=False;
}
A3:
Recibe_Tecla();
if(Caracter=='*')
{
lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc("Ingrese Direccion");
lcd_gotoxy(1,2);
lcd_putc("EEPROM: ");
Cantidad_Datos=0;
do
{
Recibe_Tecla();
printf(LCD_PUTC"%c",Caracter);
Direccion_EEPROM_short[Cantidad_Datos]=Caracter;
Cantidad_Datos++;
}while(Cantidad_Datos<=2);
Direccion_EEPROM=atoi(Direccion_EEPROM_short);
delay_ms(2000);
lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc("Ingrese Posicion");
lcd_gotoxy(1,2);
lcd_putc("del bit: ");
A4:
Recibe_Tecla();
if( (Caracter>='0') && (Caracter<='7') )
{
printf(LCD_PUTC"%c",Caracter);
Posicion_bit=Caracter-0x30;
write_int1_ext_eeprom(Direccion_EEPROM, Posicion_bit, Dato_short);
lcd_putc('\f');
lcd_gotoxy(1,1);
lcd_putc("Dato short Escrito");
delay_ms(2000);
}
else
{
goto A4;
}
}
else
{
goto A3;
}
}
else
{
goto A2;
}
}
}
else
{
goto A1;
}
}
if(Caracter=='2')
{
}
}
}
}