KILLERJC, lo decía porque si al arrancar hay una pequeña fluctuación, por ejemplo de 3V, y el BORV esta a 2.5V igual te esta reseteando varias veces el PIC y eso proboca que el contador de programa pase a borrar la EEPROM como le pasaba a elreypic2.
Entonces tu caso seria bajarle el BORV pero no le veo sentido es otra cosa distinta , al reiniciar deberia ir a parar el PC con 00h, elreypic comento que le saltaba justo a la rutina de la EEPROM y me parecio algo super raro, es como si hubiera elegido esa posicion de memoria de datos para saltar (o tal ves estaba saltando aleatoriamente siempre pero eso significa hasta el punto de llegar a omitir la configuracion de puertos y modulos, y que ademas en algun momento no hubiera funcionado el dispositivo como debia). Puede que le sucedio a el, pero que te suceda a vos igual, quiero decir que ocurra el mismo salto a la parte de la programacion de la EEPROM, en donde esa rutina puede estar en un lugar aleatorio de la memoria del PIC no se como calcularlo pero diria que las posibilidades son remotas.
Mirando el diagrama de reset
Todas activan el mismo "reset", estan todas en una OR, tanto el POR, como el BOR, el oscilador tienen que realizar 1024 ciclos antes de habilitarse el integrado, el PWRT son 65.5ms , dentro de todo eso un pico de tension deberia estar bien.
On power-up, the WREN bit is cleared. In addition, writes to the EEPROM are blocked during the Power-up Timer period (TPWRT, parameter 33, Table 28-12). The write initiate sequence and the WREN bit together help prevent an accidental write during brown-out, power glitch or software malfunction.
Tenes un reset de PWRT + OSC , es decir 65.5ms + 1024*Tosc. Si no mal vi el diagrama de tiempo. Mas la secuencia de escritura, es decir para escribir en la EEPROM tenes que escribir ciertos datos antes de poder cargar el verdadero valor, esto te lleva a que sea el codigo que lo hace o algo referido a la programacion externa, al menos es lo unico que se me ocurre xD
Sigo sin poder entender el por que deberia de borrarte la EEPROM. Pero lo borra.
En fin si podes prescindir del pin de MCLR ponele un reset largo como dijo elreypic.
Podrias tambien, hacer un pequeño script que revise los valores de la EEPROM y si te encontras con que se borraron preguntar por los bits de BOR / POR / RI / TO, etc y que muestre cuales son, asi determinar cuando es que ocurre eso. Y si esta vinculado al reset. Son todos casos de debuggeo para saber que es realmente lo que paso, como dije lo mas simple es probar lo de elreypic.
Pense en la programacion por que es la unica manera que se me vino a la cabeza que se pudiera borrar la EEPROM xD.