Escrita na Eeprom interna PIC se "perde"

Pessoal, estou tendo o seguinte problema, estou querendo gravar 12 variáveis, na memória eeprom interna do pic, quando eu chamo a rotina para gravação através de um botão, as variáveis são gravadas na Eeprom, mas, o programa se perde, tendo que ser ressetado o pic 18F452 clock 8MHz.
Após o resset o programa volta a funcionar normalmente, e atualiza o lcd com os mesmos valores que estavam antes da gravação na eeprom.
Segue uma parte do código se alguém puder me ajudar eu agradeço
Foi escrito no Mikroc 6.2
void escreve_eeprom()
{
Eeprom_Write(0x10,fator_u);
Delay_ms(10);
Eeprom_Write(0x11,fator_d);
Delay_ms(10);
Eeprom_Write(0x12,un);
Delay_ms(10);
Eeprom_Write(0x13,dz);
Delay_ms(10);
Eeprom_Write(0x14,ct);
Delay_ms(10);
Eeprom_Write(0x15,ml);
Delay_ms(10);
Eeprom_Write(0x16,dzml);
Delay_ms(10);
Eeprom_Write(0x17,end0);
Delay_ms(10);
Eeprom_Write(0x18,end1);
Delay_ms(10);
Eeprom_Write(0x19,end2);
Delay_ms(10);
Eeprom_Write(0x1A,end3);
Delay_ms(10);
Eeprom_Write(0x1B,end4);
Delay_ms(10);
Eeprom_Write(0x1C,end5);
Delay_ms(10);
}
do
{
if (Ps2_Key_Read(&dados, &especial, &down)) { //Foi pressionada alguma tecla?
if (down && (dados == 1)) trata_cursor(); //Sim, verifica se foi F1, caso verdadeiro
if (down && (dados == 2)) trata_fator(); //Sim, verifica se foi F2, caso verdadeiro
}
if (down && dados) { //Se foi selecionado um caracter alfa numérico
trata_teclado(); // e no LCD estiver a tela 1 Chama Sub-Rotina trata_teclado
}
atualiza_lcd();
x=0;
if (Usart_Data_Ready()) {
rx_endereco();
}
if (Button(&PORTB, 0, 10, 1)) j = 1;
if (j && Button(&PORTB, 0, 10, 0))
{
INTCON = 0; //Desabilita interrupção global e a de periféricos
escreve_eeprom();
j=0;
INTCON = 0b11010000; //Habilita interrupção global e a de periféricos
}
}
while(1); // Loop
}

Após o resset o programa volta a funcionar normalmente, e atualiza o lcd com os mesmos valores que estavam antes da gravação na eeprom.
Segue uma parte do código se alguém puder me ajudar eu agradeço
Foi escrito no Mikroc 6.2
void escreve_eeprom()
{
Eeprom_Write(0x10,fator_u);
Delay_ms(10);
Eeprom_Write(0x11,fator_d);
Delay_ms(10);
Eeprom_Write(0x12,un);
Delay_ms(10);
Eeprom_Write(0x13,dz);
Delay_ms(10);
Eeprom_Write(0x14,ct);
Delay_ms(10);
Eeprom_Write(0x15,ml);
Delay_ms(10);
Eeprom_Write(0x16,dzml);
Delay_ms(10);
Eeprom_Write(0x17,end0);
Delay_ms(10);
Eeprom_Write(0x18,end1);
Delay_ms(10);
Eeprom_Write(0x19,end2);
Delay_ms(10);
Eeprom_Write(0x1A,end3);
Delay_ms(10);
Eeprom_Write(0x1B,end4);
Delay_ms(10);
Eeprom_Write(0x1C,end5);
Delay_ms(10);
}
do
{
if (Ps2_Key_Read(&dados, &especial, &down)) { //Foi pressionada alguma tecla?
if (down && (dados == 1)) trata_cursor(); //Sim, verifica se foi F1, caso verdadeiro
if (down && (dados == 2)) trata_fator(); //Sim, verifica se foi F2, caso verdadeiro
}
if (down && dados) { //Se foi selecionado um caracter alfa numérico
trata_teclado(); // e no LCD estiver a tela 1 Chama Sub-Rotina trata_teclado
}
atualiza_lcd();
x=0;
if (Usart_Data_Ready()) {
rx_endereco();
}
if (Button(&PORTB, 0, 10, 1)) j = 1;
if (j && Button(&PORTB, 0, 10, 0))
{
INTCON = 0; //Desabilita interrupção global e a de periféricos
escreve_eeprom();
j=0;
INTCON = 0b11010000; //Habilita interrupção global e a de periféricos
}
}
while(1); // Loop
}



