Escribir en memoria eeprom interna de pic???

Hola amigos del foro! Soy nuevo por acá! bueno, he revisado varios de los tópicos tratados por acá pero no había posteado nada.

Soy nuevo programando microcontroladores, he estado aprendiendo poco a poco, ahora quisiera poder escribir en la memoria eeprom interna del pic. Estoy siguiendo el ejemplo que da el compilador que uso (hitech c) y no entiendo porque no escribe en la memoria eeprom :cry:

este es el ejemplo del hitech, usando su librería.

Código:
#include <htc.h>
void
main (void)
{
unsigned char data;
unsigned int address = 0x0010;
data=eeprom_read(address);
eeprom_write(address, data);
}


es simple, pero no escribe, el bit WR se queda en 1 y nunca regresa a 0. Esto me pasa con los 2 pic que e estado trabajando, 16f88 y 18f25k20.

luego intenté guiarme por la datasheet del 25k20 en la sección de eeprom, y por lo que entendí así debería ser la secuencia sin usar la librería del hitech



Código:
void main (void)
{
EEADR=0x00;
EEDATA=0x0F;
EECON1bits.EEPGD=0;
EECON1bits.CFGS=0;
EECON1bits.WREN=1;
INTCONbits.GIE=0;
EECON2=0x55;
EECON2=0x0AA;
EECON1bits.WR=1;
INTCONbits.GIE=1;

pero tampoco hace nada.


y me guié un poco por el ejemplo en asm que ellos dan que es

Código:
MOVLW DATA_EE_ADDR_LOW ;
MOVWF EEADR ; Data Memory Address to write
MOVLW DATA_EE_ADDR_HI ;
MOVWF EEADRH ;
MOVLW DATA_EE_DATA ;
MOVWF EEDATA ; Data Memory Value to write
BCF EECON1, EEPGD ; Point to DATA memory
BCF EECON1, CFGS ; Access EEPROM
BSF EECON1, WREN ; Enable writes
BCF INTCON, GIE ; Disable Interrupts
MOVLW 55h ;
 MOVWF EECON2 ; Write 55h
 MOVLW 0AAh ;
MOVWF EECON2 ; Write 0AAh
BSF EECON1, WR ; Set WR bit to begin write
BSF INTCON, GIE ; Enable Interrupts
; User code execution
BCF EECON1, WREN ; Disable writes on write complete (EEIF set)


Pero no se nada de assembler, bueno esa es mi duda, soy nuevo y tal vez sea una tontería pero desconozco que es lo que está faltando!

Les agradesería bastante su ayuda! :apreton:
 
Bueno, en respuesta a mi propia duda, el código estaba bien, lo que sucedió fue que, como yo simulo en mplab y voy corriendo la simulación paso a paso, cuando llegaba a la parte de la escritura tarda un poco en empezar a escribirse la eeprom, pero ese poco haciendolo paso a paso (ciclo por ciclo) es una eternidad, por lo que creía que no estaba haciendo nada. (esperaba que fuera como escribir datos en una variable de memoria de datos).

Puede ser que este error que cometí le sirva de ayuda a otro que también se esté iniciando en esto. Saludos!
 
Atrás
Arriba