TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: kikecon en 29 de Enero de 2010, 15:13:36
-
hola como estan todos nuevamnte estoy por aki en el foro para hacer laconsulta siguiente he hecho la logica para grabar y escribir en la eeprom interna de un pic 16f873a al momento de hacer correr el programita me sale error no se porque pero el wrew me lo muestra como error ojala me puedan ayudar aki les mando lo que tengo en avance ojo los prototipos los pongo en la .H del programa es po eso que no se leen pero por ahi no pasa el problema trabajo con sourceboost c espero sus comentarios
//pragma_CONFIG_XT_OSC &_WDT_OFF &_PWRTE_ON &_CP_ON &........
//pragma 0x2100 123,0xC2\SOURCE BOOST\INCLUDE PIC 16F873A //EEPROM INTERNO
#include "eeprom.h"
void main()
{
eeprom_write(0x01,123);
eeprom_write(0x03,0xC2);
var1=eeprom_read(0x01);
var1=eeprom_read(0x03);
}
void interrupt()
{
}
void init()
{
}
char eeprom_read(char address)
{
eeadr=address; //puntero
eecon1.EEPGD=0;
eecon1.RD =1;
return eedata;
}
void eeprom_write(char address, char data)
{
while(eecon1.WR==1); //esperar hasta que termino escritura anterior
eeadr=address; //puntero
eedata=data; //puntero
eecon1.EEPGD=0;
eecon1.WREW=1; //habilitar escritura
intcon.GIE=0; //bloquear interrupcion por seguridad: se puede perder la escritura
//secuencia magica
eecon2=0x55;
eecon2=0xAA;
eecon1.WR=1; //activar la escritura
eecon1.WREW=0; //bloquear escritura
intcon.GIE=1; //habilitar interrupciones
}
-
bueno veo que nadie me pudo ayudar con el problema que estaba viendo y en realidad era algo de escritura y que chequeando bien el verdadero datasheet del pic se puede solucionar para algun interesado dejo la logica del pic espero le sirva a alguien. OJO el compilador es sourceboost c
//////////////////EEPROM INTERNA DEL 16F873A////////////////////////////
#include <system.h>
#include "eeprom.h"
char eeprom_read(char);
void eeprom_write(char, char);
void interrupt(void);
void init(void);
void main()
{
char var1;
eeprom_write(0x01,123); //escribe en la direccion 0x01 el dato 123
eeprom_write(0x03,0xC2); //escribe en la direccion 0x03 el dato0xc2
var1=eeprom_read(0x01); //lee lo que se encuentra en la direccion 0x01
var1=eeprom_read(0x03); //lee lo que se encunetra en la direccion 0x03
}
void interrupt()
{
}
void init()
{
}
char eeprom_read(char address)
{
eeadr=address; //puntero
eecon1.EEPGD=0;
eecon1.RD =1;
return eedata;
}
void eeprom_write(char address, char data)
{
while(eecon1.WR==1); //esperar hasta que termino escritura anterior
eeadr=address; //puntero
eedata=data; //puntero
eecon1.EEPGD=0;
eecon1.WREN=1; //habilitar escritura
intcon.GIE=0; //bloquear interrupcion por seguridad: se puede perder la escritura
///////////////////////////////////////////////////
/////////////////secuencia magica/////////////////
/////////////////////////////////////////////////
eecon2=0x55;
eecon2=0xAA;
eecon1.WR=1; //activar la escritura
intcon.GIE=1; //habilitar interrupciones
eecon1.WREN=0; //bloquear escritura
}