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
este es el ejemplo del hitech, usando su librería.
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
pero tampoco hace nada.
y me guié un poco por el ejemplo en asm que ellos dan que es
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!
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
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!