Доброе время суток

Написал программу которая должна переписывать данные во Flash МК. Но к сожалению правильно она не работает.
После первого старта программа стирает 0 страницу, записывает туда данные - все нормально, но последующие попытки записи увенчались провалом - то есть запись идет не с того адреса, который я подаю, а опять с нулевого. Количество страниц для записи лежит в EEPROM-е, сами данные вычитываються из внешней памяти.
CODE
for (i=FirstPageForWrite ; i < FirstPageForWrite + ((EEPROM_read(aCNTPaketHigh)<<8) + EEPROM_read(aCNTPaketLow));i++) {
Page_To_Buffer(i,1);
Buffer_Read_Str(1,0,264,BufferPtr);
if (BufferPtr[261]==0)
cByte_Paket = 256;
else
cByte_Paket = BufferPtr[261];
tCRC = 0;
for (j = 0;j < cByte_Paket;j++) {
tCRC += BufferPtr[j];
}
pCRC = (CharHex(BufferPtr[256] >> 4) * 16 + CharHex(BufferPtr[256] & 0x0F)) * 256 ;
pCRC += CharHex(BufferPtr[257] >> 4) * 16;
pCRC += CharHex(BufferPtr[257] & 0x0F);
if (pCRC == tCRC) {
addrWR = ((BufferPtr[258] >> 4) * 100000 ) + ((BufferPtr[258] & 0x0F) * 10000 );
addrWR += ((BufferPtr[259] >> 4) * 1000 ) + ((BufferPtr[259] & 0x0F) * 100 );
addrWR += ((BufferPtr[260] >> 4) * 10 ) + ((BufferPtr[260] & 0x0F) * 1 );
//addrWR = atoi(BufferPtr[258]) * 1000 + atoi(BufferPtr[259]) * 100 + atoi(BufferPtr[260]);
_PAGE_ERASE( addrWR );
_WAIT_FOR_SPM();
tempaddress = addrWR;
kk = 0;
do {
data = BufferPtr[kk+1] << 8 | BufferPtr[kk];
_WAIT_FOR_SPM();
_FILL_TEMP_WORD(addrWR,data);
(addrWR)+=2; // Select next word in memory.
kk+=2;
} while(kk < cByte_Paket); // Loop until all bytes written.
_PAGE_WRITE(addrWR);
_WAIT_FOR_SPM();
_ENABLE_RWW_SECTION();
}
}
В чем может быть дело?
Заранее благодарен

Да прибудет с Вами удача
Причина редактирования: Последний раз форматирую исходник и переношу тему. Moderator.