Как задать нужные значения для eeprom?
Ответ:
[Вернуться в категорию "Вопросы и ответы по программированию на C для микроконтроллеров PIC."]
В ряде случаев нужно предварительно заполнить EEPROM константами, которые будут использоваться в дальнейшем при работе программы. Для этого в исходный текст программы нужно включить следующее определение (например для заполнения 32 байт, начиная с адреса 0):
__EEPROM_DATA (0x41, 0xA0, 0x42, 0xA1, 0xE0, 0x45, 0xA3, 0xA4); __EEPROM_DATA (0xA5, 0xA6, 0x4B, 0xA7, 0x4D, 0x48, 0x4F, 0xA8); __EEPROM_DATA (0x50, 0x43, 0x54, 0xA9, 0xAA, 0x58, 0xE1, 0xAB); __EEPROM_DATA (0xAC, 0xE2, 0xAD, 0xAE, 0x20, 0xAF, 0xB0, 0xB1);
^^ два символа подчеркивания!!!
Этот текст нужно включать вне какой-либо функции. Память заполняется последовательно, поэтому, если нужно вставить данные по определенному адресу, предыдущие адреса нужно заполнить любой константой. В результирующий hex-файл будет включена необходимая для записи EEPROM информация и программатор запишет ее.
Есть альтернативный способ, позволяющий записывать данные по любому адресу (код любезно предоставлен Владимиром Раздолиным, rasdolin@mail.ru):
#define __EEPROM_FILL(w) asm(" psect eedata,delta=2,abs,ovrld"); asm(" org 2100h");
asm(" rept 256"); asm(" db " #w); asm(" endm")
#define __EEPROM_STRING(offs,w) asm(" psect eedata,delta=2,abs,ovrld"); asm(" org 2100h+"#offs); asm(" irpc __arg, "#w); asm(" db '__arg'"); asm(" endm")
далее в тексте пишем:
__EEPROM_FILL( 0 ); // всю EEPROM заполнили нулями __EEPROM_STRING( 0x10, my_string ); // по смещению 0x10 записали строку
Не забудьте, при необходимости, изменить размер EEPROM в определении asm(" rept 256");, где 256 - размер в байтах. [Вопросы и ответы по программированию на C для микроконтроллеров PIC.]
|