Страница 1 из 1
Работа с EEPROM
Добавлено: Чт мар 22, 2012 09:50:09
EmDmAl
Здраствуйте. Написал код на Си (AVR Studio 4.19 + AVR Toolchain 3.3.0)для занесения в энергонезависимую память(весь код приводить смысла нет).
Код: Выделить всё
...
unsigned int addres[2]={0x80, 0x81};//Aдрес
unsigned char kodbut[2]={0xF7, 0xEF};//Код
...
int main(void) {
eeprom_write_block(kodbut, addres, 2);
...
}
При запуске в Proteus 7 и пошаговой отладки, по заданным адресам (0x80, 0x81) код (0xF7, 0xEF) не записывается, а записывается по адресу (0x60, 0x61).
Подскажите кто-нибудь сталкивался с подобной проблемой?
Re: Работа с EEPROM
Добавлено: Чт мар 22, 2012 10:01:03
Flasher
Здравствуйте. Учите Си.
Re: Работа с EEPROM
Добавлено: Чт мар 22, 2012 10:10:08
EmDmAl
Flasher писал(а):Здравствуйте. Учите Си.
Согласен, можно конечно написать цикл и использовать код занесения из даташита микроконроллера. Но хочется использовать встроенные ф-ии. Подскажите как надо.
Re: Работа с EEPROM
Добавлено: Чт мар 22, 2012 10:40:20
Flasher
Чтобы что-то использовать, нужно знать КАК это использовать. Прочитайте про данную встроенную функцию.
Re: Работа с EEPROM
Добавлено: Чт мар 22, 2012 11:39:35
EmDmAl
Flasher писал(а):Чтобы что-то использовать, нужно знать КАК это использовать. Прочитайте про данную встроенную функцию.
Подробна информация по этой и подобным ф-ям
http://avr-libc.narod.ru/group__avr__ee ... 56a1620574 и
http://samou4ka.net/page/chtenie-i-zapi ... odolzhenie.
Если я ошибаюсь поправьте меня.
unsigned int addres[2]={0x80, 0x81}; - мы объявляем буфер(массив) из адресов по которым надо записать необходимые биты;
unsigned char kodbut[2]={0xF7, 0xEF}; - объявляем буфер(массив из битов) необходимых данных, эти 2 массива должны по кол-ву элементов соответствовать друг другу.
eeprom_write_block(kodbut, addres, 2); или eeprom_write_block(kodbut, addres, sizeof(kodbut)); - записываем данные массива kodbut по адресу addres размером в 2(sizeof(kodbut)) байта. Вот впринципе как я думаю эту ф-ию использовать.
Re: Работа с EEPROM
Добавлено: Чт мар 22, 2012 11:53:13
a_skr
Подробна информация по этой и подобным ф-ям
http://avr-libc.narod.ru/group__avr__ee ... 56a1620574 и
http://samou4ka.net/page/chtenie-i-zapi ... odolzhenie.
Если я ошибаюсь поправьте меня.
unsigned int addres[2]={0x80, 0x81}; - мы объявляем буфер(массив) из адресов по которым надо записать необходимые биты;
unsigned char kodbut[2]={0xF7, 0xEF}; - объявляем буфер(массив из битов) необходимых данных, эти 2 массива должны по кол-ву элементов соответствовать друг другу.
eeprom_write_block(kodbut, addres, 2); или eeprom_write_block(kodbut, addres, sizeof(kodbut)); - записываем данные массива kodbut по адресу addres размером в 2(sizeof(kodbut)) байта. Вот впринципе как я думаю эту ф-ию использовать.
вторым аргументом Вы передаете
адрес в ОЗУ массива addres. функция принимает только начальный адрес в EEPROM как значение, а не адрес в ОЗУ на массив с адресами в EEPROM!
Код: Выделить всё
unsigned char address = 80;
unsigned char kodbut[2]={0xF7, 0xEF};
eeprom_write_block(kodbut, address, 2);
вроде так. и еще, у Вас EEPROM больше 128 байт?
Re: Работа с EEPROM
Добавлено: Чт мар 22, 2012 14:36:56
EmDmAl
a_skr писал(а):
вторым аргументом Вы передаете
адрес в ОЗУ массива addres. функция принимает только начальный адрес в EEPROM как значение, а не адрес в ОЗУ на массив с адресами в EEPROM!
Код: Выделить всё
unsigned char address = 80;
unsigned char kodbut[2]={0xF7, 0xEF};
eeprom_write_block(kodbut, address, 2);
Спасибо огромное теперь я понял где ошибался
a_skr писал(а):вроде так. и еще, у Вас EEPROM больше 128 байт?
Размер у меня EEPROM=1024байт. И еще с какого адреса можно писать в EEPROM?