سلام
من در برنامه که در کدویژن هست زیر می خوام یک عدد را که بیشتر از یک بایت هست رو در eeprom خارجی بریزم و بخونم ولی عدد رو درست نمایش نمی دهد
من از ال سی دی شیشه ای استفاده می کنم و تابع dispaly برای نوشتن در ال سی دی هست
برنامه
[left]
وقتی عدد یک بایت رایت می کنم و به این صورت رایت می کنم و می نویسم
write_eeprom(250,3);
m=(read_eeprom(3));
درست رایت می کند ونمایش مدهد
ولی عدد مثل 10رو 778 نمایش می دهد
یعنی خانه های 0و1و2 را با اعدد 256 و خانه 3 را با عدد 10 پر می کند
امیدوارم بتونید کمکم کنید
من در برنامه که در کدویژن هست زیر می خوام یک عدد را که بیشتر از یک بایت هست رو در eeprom خارجی بریزم و بخونم ولی عدد رو درست نمایش نمی دهد
من از ال سی دی شیشه ای استفاده می کنم و تابع dispaly برای نوشتن در ال سی دی هست
برنامه
[left]
void write_eeprom(unsigned char data,unsigned int address);
unsigned char read_eeprom(unsigned int address);
void display(void);
int t; //main & lcd function
int x[12]; //main & lcd function
//unsigned char read_data; // eeprom fanction
long int m,n;
int d;
// Declare your global variables here
void main(void)
n=3000;
d=n;
i2c_init();
write_eeprom(0,0);
write_eeprom(n&0xff000000>>24,0);
write_eeprom(0,1);
write_eeprom(n&0x00ff0000>>16,1);
write_eeprom(0,2);
write_eeprom(n&0x0000ff00>>8,2);
write_eeprom(0,3);
write_eeprom(n&0x000000ff,3);
//write_eeprom(250,3);
while (1)
{
t=0;
من وقتی عدد رو می خونم 987 نشون می دهد!!!!!unsigned char read_eeprom(unsigned int address);
void display(void);
int t; //main & lcd function
int x[12]; //main & lcd function
//unsigned char read_data; // eeprom fanction
long int m,n;
int d;
// Declare your global variables here
void main(void)
n=3000;
d=n;
i2c_init();
write_eeprom(0,0);
write_eeprom(n&0xff000000>>24,0);
write_eeprom(0,1);
write_eeprom(n&0x00ff0000>>16,1);
write_eeprom(0,2);
write_eeprom(n&0x0000ff00>>8,2);
write_eeprom(0,3);
write_eeprom(n&0x000000ff,3);
//write_eeprom(250,3);
while (1)
{
t=0;
[right][pre]
[center][center][center]m=(long int)(read_eeprom(0)<<24)|(read_eeprom(1)< <16)|(read_eeprom(2)<<8)|(read_eeprom(3)) ;
x[t]=m%10; // Unit number
display();
t++;
for (t=1;t<=7;t++) // until last position lcd
{
m=m/10;
if (m<10)
{
x[t]=m;
}
else
{
x[t]=m%10;
}
display();
}
t=0;
x[t]=m%10; // Unit number
display();
t++;
for (t=1;t<=7;t++) // until last position lcd
{
m=m/10;
if (m<10)
{
x[t]=m;
}
else
{
x[t]=m%10;
}
display();
}
t=0;
}
}
void write_eeprom(unsigned char data,unsigned int address)
{
i2c_start();
i2c_write(0xAE);
i2c_write(address& 0xFF00>>8);
i2c_write(address & 0X00FF);
i2c_write(data);
i2c_stop();
delay_ms(10);
}
unsigned char read_eeprom(unsigned int address)
{
unsigned char data_read;
i2c_start();
i2c_write(0xAE);
i2c_write(address& 0xFF00>>8);
i2c_write(address & 0X00FF);
i2c_start();
i2c_write(0xAF);
data_read=i2c_read(0);
i2c_stop();
return data_read;
}
}
void write_eeprom(unsigned char data,unsigned int address)
{
i2c_start();
i2c_write(0xAE);
i2c_write(address& 0xFF00>>8);
i2c_write(address & 0X00FF);
i2c_write(data);
i2c_stop();
delay_ms(10);
}
unsigned char read_eeprom(unsigned int address)
{
unsigned char data_read;
i2c_start();
i2c_write(0xAE);
i2c_write(address& 0xFF00>>8);
i2c_write(address & 0X00FF);
i2c_start();
i2c_write(0xAF);
data_read=i2c_read(0);
i2c_stop();
return data_read;
}
وقتی عدد یک بایت رایت می کنم و به این صورت رایت می کنم و می نویسم
write_eeprom(250,3);
m=(read_eeprom(3));
درست رایت می کند ونمایش مدهد
ولی عدد مثل 10رو 778 نمایش می دهد
یعنی خانه های 0و1و2 را با اعدد 256 و خانه 3 را با عدد 10 پر می کند
امیدوارم بتونید کمکم کنید
دیدگاه