Привожу кусок кода:
Код
union {
int ival;
unsigned int uival;
byte bval[2];
}tp;
tp.uival = 812;
WriteByteToEEPROM(400, tp.bval[0]);
WriteByteToEEPROM(401, tp.bval[1]);
tp.bval[0]=ReadByteFromEEPROM(400);
tp.bval[1]=ReadByteFromEEPROM(401);
Out_digit_LCD(1,1,(tp.ival)*10,0,8);
Проблема в том, что я читаю либо два раза подряд младший байт, либо два раза подряд старший, хотя при считывании EEPROM с процика в ячейках лежит то, что нужно. Видимо проблема с чтением, но я не смог понять в чем именно. Даже если я писал просто два байта подряд, а потом их считывал, то получал либо первый байт два раза либо второй.
Код
WriteByteToEEPROM(400, 12);
WriteByteToEEPROM(401, 78);
Out_digit_LCD(1,1,(ReadByteFromEEPROM(400))*10,0,8);
Out_digit_LCD(2,1,(ReadByteFromEEPROM(401))*10,0,8);
вот ф-и чтения/записи, азял из даташита на мегу32
Код
void WriteByteToEEPROM(int Address, byte Data)
{
// Wait for completion of previous write
while(EECR & (1<<EEWE))
// Set up address and Data Registers
DisableInterrupts();
EEAR = Address;
EEDR = Data;
/* Write logical one to EEMWE */
EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
EECR |= (1<<EEWE);
EnableInterrupts();
}
byte ReadByteFromEEPROM(int Address)
{
/* Wait for completion of previous write */
while(EECR & (1<<EEWE))
// Set up address register
EEAR = Address;
/* Start eeprom read by writing EERE */
EECR |= (1<<EERE);
// Return data from Data Register
return EEDR;
}
Уже не знаю, тчо делать, подобный код работает на меге 88 без всяких проблем, только функции чтения/записи немного другие, но тоже из даташита.
Заранее спасибо!