Цитата(glebka @ Jul 5 2006, 13:03)

Уррра.заработалою.
Код
unsigned char EEPromRead( unsigned int Addr )
{
//Setup adress register
EEAR=(Addr&0xFF);
//start EEPOM read by writing EERE
SetBit(EECR,0);
//Return data from Data register
return EEDR;
}
void EEPromWrite( unsigned int Addr, unsigned char Val )
{
macroGlobalIntDisable;
EEAR = Addr; // Load address
EEDR = Val; // Load data to be written
//Set logical one to EEMPE
SetBit(EECR,2);
//Set logical one to EEPE
SetBit(EECR,1);
macroToggleWatchdog;
while(EECR&(1<<EEPE)){};
macroGlobalIntEnable;
return;
}
Я пишу на ассемблере, но дело не в этом. Я когда-то тоже писал в EEPROM несколько байт подряд, ждал предыдущей записи. Когда байтов было 2 - все ОК. Но когда стало 4 - не работало. Я долго парился пока не обнаружил, что просто повторно срабатывает прерывание (запись шла внутри прерывания) - слишком долго это все.
Короче я сделал такую вещь - небольшая структура типа буфера, похожая на стек (но не совсем стек, скорее куча), состоит из тела, указателя, размера.
Тело - содержит пакеты из трех байт, два байта адрес и один байт данные, размер тела = 3*N байт, где N-размер тела в пакетах;
Указатель - 2 байта, содержат адрес вершины кучи;
Размер - 1 байт, содержит количество положенных пакетов в кучу. Если =0 - куча пустая.
Подпрограммы такие: ПОЛОЖИТЬ_В_КУЧУ и ОБСЛУЖИТЬ_КУЧУ. В начале программы кучу инициализировать - указатель на начало тела, размер=0.
ПОЛОЖИТЬ_В_КУЧУ вызывается в любом месте программы, где надо записать в EEPROM очередное число. Берет адрес, данные, ложит в кучу по указателю, передвигает указатель на 3, увеличивает размер на 1. На время работы с кучей запретить прерывания.
ОБСЛУЖИТЬ_КУЧУ вызывается сравнительно редко по прерыванию, проверяет размер кучи если =0 ничего не делает, иначе проверяет завершилась ли предыдущая запись в EEPROM, если нет - ничего не делает, если да - берет из кучи по указателю данные, адрес, направляет в регистры EEPROM, запускает запись, передвигает указатель на 3 обратно, уменьшает размер на 1. Все.
Вот такая штука значительно облегчила мне жизнь