PIC18F452 Eeproma 32bit Değer Yazma/Okuma Sorunu

Başlatan Bahadır AYDINOĞLU, 07 Ağustos 2015, 10:55:18

Bahadır AYDINOĞLU

Merhaba arkadaşlar,
Bir elektronik kartın kalibrasyonunu yazılımsal ayarlamaya çalışıyorum. Yazılımın ilgili kısmı aşağıda;

struct   C_struct         // Structure for Calibration
{
   int32	A;  
   int32	B;  
   int32      C;
   
};

union   C_Union
{
   struct   C_struct   Cs;
   int32    Cx[3];
}Cal;

.
.
.
.
.
void Save()
{
int   i;
int   j;
 

	lcd_putc("\f Saving");
	write_eeprom(100,Mode);
	write_eeprom(101,Run_Mode);

	for(i=0;i<10;i++)
	{
		for(j=0;j<4;j++)
		{
		write_eeprom(i*8 + j*2      ,   *(&Mem[i][j])       );
		write_eeprom(i*8 + j*2 + 1   ,  *(&Mem[i][j] + 1)   );
		}
	}
      
	for(i=0;i<Par_Count;i++)
	{
		write_eeprom(50 + i , Param.Par[i]);
	}
	for(i=0;i<3;i++)
	{
		write_eeprom(120+i*3 + 0,  	*(&Cal.Cx[i])       );
		write_eeprom(120+i*3 + 1,	*(&Cal.Cx[i] + 1)   );
		write_eeprom(120+i*3 + 2,	*(&Cal.Cx[i] + 2)   );		
	}
	delay_ms(500);
}

void Load()
{
int   i;
int   j;

	if(read_eeprom(0) != 0xFF) 
	{
		lcd_putc("Loading");
		Mode       = read_eeprom(100);
		Run_Mode   = read_eeprom(101);
		
		for(i=0;i<10;i++)
		{
			for(j=0;j<4;j++)
			{
			*(&Mem[i][j] )       =	read_eeprom(i*8 + j*2       );
			*(&Mem[i][j] + 1 )   =	read_eeprom(i*8 + j*2 + 1   );
			}
		}
      
		for(i=0;i<Par_Count;i++)
		{
			Param.Par[i]   = read_eeprom(50 + i);
		}
		for(i=0;i<3;i++)
		{
		*((unsigned char)&Cal.Cx[i])     =   	read_eeprom(120 +i*3      );
		*((unsigned char)&Cal.Cx[i]+1) =	read_eeprom(120 +i*3 + 1  );
		*((unsigned char)&Cal.Cx[i]+2) =	read_eeprom(120 +i*3 + 2  );
		*((unsigned char)&Cal.Cx[i]+3) =	read_eeprom(120 +i*3 + 3  );
					
		}
		delay_ms(500);
	}
	else
	{
		Mode      = 0;
		Run_Mode   = 1;

		Param.P.BackLight         = 1;      
		Param.P.Auto_Off         = 1;
		Param.P.Back_Light_Off_Time   = 10;
		Param.P.Auto_Off_Time      = 10;
		Param.P.Auto_Wait         = 50;
		
		Cal.Cs.A	= 420444; 
		Cal.Cs.B	= 412477;
	        Cal.Cs.C	= 2500;
		

		for(i=0;i<=9;i++)
			Mem[i][2] =   40;
		Save();
	}
}


Structure ve Union kısmında belirtilen değişkenleri eeproma yazmada sıkıntım var.

Cal.Cs.A   = 420444;
Cal.Cs.B   = 412477;
Cal.Cs.C   = 2500;

Yukarda belirttiğim değerler yerine saçma sapan değerler çıkıyor. Yazılımın diğer kısımlarında problem yok.

İlgilenir ve yardımcı olursanız çok çok sevinirim.

necati

[email]entegreterbiyecisi@yahoo.com[/email]

Bahadır AYDINOĞLU

Kütüphanesini kontrol ederek çözdüm teşekkür ederim.