проблемая такая, что при зиписи или при чтении в eeprom он записывает или читает младшую.все переменный и функции объявлены в другом файлею Ввот код программы:
void write_preset(void)
{
if (Device.CurrentPreset < Device.PresetsRange)
{
// Device.AzimuthToPreset - азимут, который надо записать (16 бит)
// Device.CurrentPreset - номер пресета для записи текущего азимута (8 бит)
eeprom_address = Device.CurrentPreset * 2;
byte_eeprom = (uint8_t) Device.AzimuthToPreset ;
write_byte_to_eeprom (eeprom_address, byte_eeprom);
eeprom_address = Device.CurrentPreset * 2 + 1;
byte_eeprom = (uint8_t) (Device.AzimuthToPreset >> 8) ;
write_byte_to_eeprom (eeprom_address, byte_eeprom);
}
else
{
Device.ErrorNumber = 0x11;
}
}
void read_preset(void)
{
if (Device.CurrentPreset < Device.PresetsRange)
{
// Device.AzimuthFromPreset - азимут, который читаем (16 бит)
// Device.CurrentPreset - номер пресета, который читаем (8 бит)
eeprom_address = Device.CurrentPreset * 2;
Device.AzimuthFromPreset = (uint8_t) (read_byte_from_eeprom (eeprom_address));
eeprom_address = Device.CurrentPreset * 2 + 1;
Device.AzimuthFromPreset |= ((uint8_t) (read_byte_from_eeprom(eeprom_address) << 8));
}
else
{
// Device.ErrorNumber = Device.CurrentPreset;
Device.ErrorNumber = 0x11;
}
return Device.AzimuthFromPreset;
}
// ========================================
// служебные функции работы с EEPROM ===
// ========================================
// запись байта в EEPROM
void write_byte_to_eeprom(uint16_t eeprom_address,uint8_t byte_eeprom)
{
// ждём завершения предыдущей записи
// (пока в бите EEWE 1, ничего не делаем)
while (EECR & 0x02);
asm("cli");
/* Set up Address and Data Registers */
/*EEARH = (uint8_t) (eeprom_address >> 8) ; // устанавливаем адрес
EEARL = (uint8_t) (eeprom_address );*/
EEAR = eeprom_address;
EEDR = byte_eeprom; // загружаем
EECR=0x04; // устанавливаем флаг разрешения записи ( в разряд EEMWE ставим 1)
EECR = 0x02; // записываем, для этого в разряд EEWE устанавливаем 1
asm("sei");
}
// чтение байта из EEPROM
uint8_t read_byte_from_eeprom (uint16_t eeprom_address)
{
while (EECR & 0x02); // ждём завершения предыдущей записи
asm("cli");
/*EEARH = (uint8_t) (eeprom_address >> 8); // устанавливаем адрес
EEARL = (uint8_t) eeprom_address ;
*/ EEAR = eeprom_address;
// выполняем чтение, устанавливаем в EERE 1
EECR =0x01;
byte_eeprom = EEDR;
asm("sei");
return byte_eeprom;
}