با سلام به همه عزیزان من یک eeprom 24c512 دارم که میخواهم عدد بزرگی رو مثلا 562400 درون اون بنویسم با اعداد زیر 512 مشکلی ندارم ولی اعداد بزرگ رو نمیتونم بنویسم وبخونم نمونه برنامه ام هم این است
if(key_enter==0){
rtc_get_time(&hour,&minute,&second);
//time=minute*100+hour*10000;
time=257;
write_eeprom(time,1);
rtc_get_date(&week_day,&day,&month,&am p;year);
write_eeprom(day,2);
}
if(key_down==0){
write_eeprom(20,1);
delay_ms(50);
}
read_data=read_eeprom(1);
if(key_up==0){
lcd_clear();
lcd_gotoxy(0,0);
time=read_eeprom(1);
//time=time/10000;
sprintf(buffer,"Time:%02d",time);
lcd_puts(buffer);
delay_ms(100);
}
}
}
//------------------------
void write_eeprom(unsigned long int data,unsigned int address)
{
i2c_start();
i2c_write(write_address_bus);
i2c_write((address & 0xff00)>>8); //high byte address
i2c_write((address & 0x00ff)); //low byte address
i2c_write(data);
i2c_stop();
delay_ms(10);
}
//--------------------------
unsigned long int read_eeprom(unsigned int address)
{
unsigned long int data_read;
i2c_start();
i2c_write(write_address_bus);
i2c_write((address & 0xff00)>>8); //high byte address
i2c_write((address & 0x00ff)); //low byte address
i2c_start();
i2c_write(read_address_bus);
data_read=i2c_read(0);
i2c_stop();
return data_read;
}
if(key_enter==0){
rtc_get_time(&hour,&minute,&second);
//time=minute*100+hour*10000;
time=257;
write_eeprom(time,1);
rtc_get_date(&week_day,&day,&month,&am p;year);
write_eeprom(day,2);
}
if(key_down==0){
write_eeprom(20,1);
delay_ms(50);
}
read_data=read_eeprom(1);
if(key_up==0){
lcd_clear();
lcd_gotoxy(0,0);
time=read_eeprom(1);
//time=time/10000;
sprintf(buffer,"Time:%02d",time);
lcd_puts(buffer);
delay_ms(100);
}
}
}
//------------------------
void write_eeprom(unsigned long int data,unsigned int address)
{
i2c_start();
i2c_write(write_address_bus);
i2c_write((address & 0xff00)>>8); //high byte address
i2c_write((address & 0x00ff)); //low byte address
i2c_write(data);
i2c_stop();
delay_ms(10);
}
//--------------------------
unsigned long int read_eeprom(unsigned int address)
{
unsigned long int data_read;
i2c_start();
i2c_write(write_address_bus);
i2c_write((address & 0xff00)>>8); //high byte address
i2c_write((address & 0x00ff)); //low byte address
i2c_start();
i2c_write(read_address_bus);
data_read=i2c_read(0);
i2c_stop();
return data_read;
}
دیدگاه