реклама на сайте
подробности

 
 
> проблема c eeprom atmega8535
martyr
сообщение Nov 16 2005, 07:42
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 20-09-05
Пользователь №: 8 755



проблемая такая, что при зиписи или при чтении в 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;

}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:50
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016