#include<16F887.h>
//#include<stdlib.h>
#fuses INTRC,MCLR,NOLVP,NOPROTECT,NOWDT
#use delay(clock=20000000)
#use fast_io(C)
#use fast_io(D)
#use i2c(master,SDA=PIN_C4,SCL=PIN_C3)
#include"lcd.c"
#include"24256.c"
#define EEPROM_ADDRESS long int
#define EEPROM_SIZE 32768
char cadena[30]="hola mundo como esta";
char cadena2[11]="aaaaaaaaaa";
char cadena3[11]="bbbbbbbbbb";
char cadena4[11]="cccccccccc";
int f=0x5A;
long int address=0;
void configure()
{
set_tris_C(0);
set_tris_D(0);
output_C(0);
output_D(0);
init_ext_eeprom();
lcd_init();
}
// Esta funcion escribe los bytes de un solo caracter, proporcionando un direccion inicial y los bytes,
//donde la direccion inicial posee el numero de bytes que contiene dicho caracter
void write2ext_eeprom(address, char character)
{
long int i;
long int lim;
lim=20;
for(i>0;i<=lim;i++)
{
if(lim==0){
}
write_ext_eeprom(address,*character);
character++;
address++;
}
}
void main()
{
configure();
lcd_putc("\fEscribiendo...");
//write2ext_eeprom(0,cadena2);
//write2ext_eeprom(41,cadena3);
//write2ext_eeprom(392,cadena4);
write2ext_eeprom(254,cadena);
lcd_putc("\fFin de\nescritura...");
}
PD: el codigo no fue hecho por mi lo copie de otro tema solo lo he modificado#include<16F887.h>
//#include<stdlib.h>
#fuses INTRC,MCLR,NOLVP,NOPROTECT,NOWDT
#use delay(clock=20000000)
#use fast_io(C)
#use fast_io(D)
#use i2c(master,SDA=PIN_C4,SCL=PIN_C3)
#include"lcd.c"
#include"24256.c"
#define EEPROM_ADDRESS long int
#define EEPROM_SIZE 32768
/*********************************************************************************************
ETIQUETAS
*********************************************************************************************/
//Direcciones
char cadena[30]="hola mundo como esta";
char cadena2[11]="aaaaaaaaaa";
char cadena3[11]="bbbbbbbbbb";
char cadena4[11]="cccccccccc";
int f=0x5A;
// Tabla de caracteres en EEPROM interna ****************************************************
// El primer byte de cada letra indica el numero de bytes que componen el caracter
void configure()
{
set_tris_C(0);
set_tris_D(0);
output_C(0);
output_D(0);
init_ext_eeprom();
lcd_init();
}
// Esta funcion escribe los bytes de un solo caracter, proporcionando un direccion inicial y los bytes,
//donde la direccion inicial posee el numero de bytes que contiene dicho caracter
void write2ext_eeprom(int16 address, char character)
{
long int i;
long int lim;
lim=20;
for(i>0;i<=lim;i++)
{
if(lim==0){
}
write_ext_eeprom(address,*character);
character++;
address++;
}
}
void main()
{
configure();
lcd_putc("\fEscribiendo...");
//write2ext_eeprom(0,cadena2);
//write2ext_eeprom(41,cadena3);
//write2ext_eeprom(392,cadena4);
write2ext_eeprom(250,cadena);
lcd_putc("\fFin de\nescritura...");
}
void write2ext_eeprom(int16 address, char character)
{
long int i;
long int lim;
lim=20;
for(i>0;i<=lim;i++)
{
if(lim==0){
}
write_ext_eeprom(int16 address,*character);
character++;
address++;
}no no, asi no, me refiero a la funcion, seguramente este en este archivo: #include"24256.c"
#define EEPROM_ADDRESS long int
#define EEPROM_SIZE 32768#define EEPROM_SDA PIN_C4
#define EEPROM_SCL PIN_C3
#include <24256.h>si, todo eso lo mire yo, sin embargo cuando dijo que solo escribia bien hasta 256bytes por eso me extrañe, porque un char se que son 8bits y que el maximo es 255 asi que lo primero que pense es eso.
Hola creo que no me he dado a entender bien sobre el problema, lo que pasa es que si me graba todos los caracteres lo malo es que en la memoria eeprom solo me graba hasta la FF y de la 100 en adelante no graba nada..
ese es el problema
y tengo otra dudita para que sirve el * en character???
#include<16F887.h>
//#include<stdlib.h>
#fuses HS,MCLR,NOLVP,NOPROTECT,NOWDT
#use delay(clock=20000000)
#use fast_io(C)
#use fast_io(D)
#use i2c(master,SDA=PIN_C4,SCL=PIN_C3)
#include"lcd.c"
#define EEPROM_SDA PIN_C4
#define EEPROM_SCL PIN_C3
#include"24256.c"
/*********************************************************************************************
ETIQUETAS
*********************************************************************************************/
//Direcciones
char cadena[30]="hola mundo como esta";
char cadena2[11]="aaaaaaaaaa";
char cadena3[11]="bbbbbbbbbb";
char cadena4[11]="cccccccccc";
int f=0x5A;
// Tabla de caracteres en EEPROM interna ****************************************************
// El primer byte de cada letra indica el numero de bytes que componen el caracter
void configure()
{
set_tris_C(0);
set_tris_D(0);
output_C(0);
output_D(0);
init_ext_eeprom();
lcd_init();
}
// Esta funcion escribe los bytes de un solo caracter, proporcionando un direccion inicial y los bytes,
//donde la direccion inicial posee el numero de bytes que contiene dicho caracter
void write2ext_eeprom(int16 address, char character)
{
do{
write_ext_eeprom(address++,*character++);
}while(*character!='\0');
}
void main()
{
configure();
lcd_putc("\fEscribiendo...");
write2ext_eeprom(253,cadena);
lcd_putc("\fFin de\nescritura...");
}void write_ext_eeprom(int16 address, BYTE data)
{
short int status;
i2c_start();
i2c_write(0xa0);
i2c_write(address>>15);
i2c_write(address);
i2c_write(data);
i2c_stop();
i2c_start();
status=i2c_write(0xa0);
while(status==1)
{
i2c_start();
status=i2c_write(0xa0);
}
}
///////////////////////////////////////////////////////////////////////////
//// (C) Copyright 1996,2003 Custom Computer Services ////
//// This source code may only be used by licensed users of the CCS C ////
//// compiler. This source code may only be distributed to other ////
//// licensed users of the CCS C compiler. No other use, reproduction ////
//// or distribution is permitted without written permission. ////
//// Derivative programs created using this software in object code ////
//// form are not restricted in any way. ////
///////////////////////////////////////////////////////////////////////////