Microcontroladores - PROBLEMA DE ESCRITURA EEPROM PIC18F452

   
Vista:

PROBLEMA DE ESCRITURA EEPROM PIC18F452

Publicado por David (1 intervención) el 16/12/2008 23:01:52
Hola mis amigos programadores. Tengo un problema de escritura de EEPROM del PIC18F452. No puedo hacer que se guarden los datos en la eeprom utilizando la funcion EEPROM_WRITE(). Por el contrario la funcion EEPROM_READ() si funciona. Esto lo he comprobado porque al inicializar la memoria con __EEPROM_DATA() se guardan los datos que le paso como argumentos, pero cuando trato de cambiarlos con EEPROM_WRITE() no lo logro y permanencen iguales.

Estas funcionnes las he utilizado con exito programando el PIC16F877 con HI-TECH PICC LITE v.9.5.
Lo que pasa es que estoy pasando dicho programa al PIC18F452 porque tiene mas memoria y necesito incluir mas funcionalidades a un proyecto que estoy desarrollando.

La simulacion con proteus funciona bien. Pero al programar el micro, no funciona como debe ser. Estoy programando con WinPic800 y JDM.

Ya he confugurado los fuses de diferentes maneras, pero nada.

Agradezco que me ayuden a solucionar este detalle porque hace parte de un proyecto.

/*
PROGRAMA PARA PROBAR LAS FUNCIONES DE ESCRITURA Y LECTURA DE LA EEPROM DEL
MICROCONTROLADOR PIC18F452

EDITADO CON:
MPLAB IDE v7.01,
COMPILADOR HI-TECH PICC18 PRO 9.63
*/

#include <htc.h>
#include "delay.h"

//Fuses Configuration
__CONFIG(1, XT); //
__CONFIG(2,BORDIS & WDTDIS); //BORDIS=brown out reset disabled, WDTDIS=watch dog timer disabled
//__CONFIG(3,CCP2RC1); //--------------
__CONFIG(4,DEBUGDIS & LVPDIS & STVRDIS); //DEBUGDIS=debug disabled, LVPDIS=low voltage programmin disabled
__CONFIG(5,UNPROTECT); //unprotected
__CONFIG(6,WRTEN); //
__CONFIG(7,TRU); //all unprotected including boot block

#define bit_set(var,bitno) ((var) |= 1 << (bitno)) //para escanear bits
#define bit_clr(var,bitno) ((var) &= ~(1 << (bitno)))
#define testbit(data,bitno) ((data>>bitno)&0x01) //testear bit

unsigned char DATO=0;

__EEPROM_DATA(0, 0, 0, 0, 0, 0, 0, 0); //INICIALIZAR LA EEPROM

void
main(void)
{
int i=0;

TRISD = 0; //PUERTO D COMO SALIDA
PORTD =0;

PORTD = 0x02; //ENCENDER EL LED EN RD0

for(i=0; i<10 ; i++) //RETARDO DE UN SEGUNDO APROX.
DelayMs(100);

PORTD = 0x00; //APAGAR EL LED EN RD0

EEPROM_WRITE(0,0x11);
EEPROM_WRITE(1,0x22);
EEPROM_WRITE(2,0x33);
EEPROM_WRITE(3,0x44);

DelayMs(10);

DATO = EEPROM_READ(0); //LEER LA DIRECCION O DE LA EEPROM

while(1){
if(DATO == 0x11) //SI LA VARIABLE LEIDA CORRESPONDE AL VALOR , SE ENCIENDE EL FLASHEA
{
PORTD = 0x02;
DelayMs(100);
PORTD = 0x00;
DelayMs(100);
}
else
PORTD = 0x02;
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder