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 funciones 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 configurado los fuses de diferentes maneras, pero nada.
Agradezco que me ayuden a solucionar este detalle porque hace parte de un proyecto.
Estas funciones 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 configurado los fuses de diferentes maneras, pero nada.
Agradezco que me ayuden a solucionar este detalle porque hace parte de un proyecto.
Código:
/*
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;
}
}