Autor Tema: escritura eeprom  (Leído 1683 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado aiioli

  • PIC10
  • *
  • Mensajes: 8
escritura eeprom
« en: 13 de Julio de 2009, 05:17:01 »
hola!
tengo una pequena duda,
tengo que escribir el valor de un contador en una direccion de la eeprom. antes siempre habia tenido que escribir valores menores de 255, con lo que haciendo un contador y guardando el valor en EEDAT, lo guardaba en una posicion de memoria, por ejemplo en la 0xF0 (valor que guardaba en la variable EEADR)

pero claro, en esa direccion, puedo guardar máximo hasta FF, pero si tengo que guardar un numero mayor? cómo lo hago? cómo guardo un valor de un contador que cuente mas que 255 en más posiciones de memoria?

utilizo un pic 16f886
« Última modificación: 13 de Julio de 2009, 06:05:02 por aiioli »

Desconectado aiioli

  • PIC10
  • *
  • Mensajes: 8
Re: escritura eeprom
« Respuesta #1 en: 13 de Julio de 2009, 05:57:19 »
estoy muy, muy perdido.....

se puede por ejemplo crear una variable de 2 bytes, a la que siempre q entro en la subrutina voy sumandole 1, y siempre guardo la parte baja en EEDAT y ejecuto la subrutina de escribir eeprom y luego guardo la parte alta de esa variable , vuelvo a guardarla en EEDAT y vuelvo a ejecutar la subrutina de escribir eeprom hacia otra direccion?

quiero un contador hasta 8000 (1F40 en hexadecimal) con lo que quiero que se guarde el 1F en una posicion de memoria y el 40 en la siguiente...

es ya lo unico q se me ocurre.....

como declaro esa "variable" contador?
« Última modificación: 13 de Julio de 2009, 06:04:45 por aiioli »

Desconectado aiioli

  • PIC10
  • *
  • Mensajes: 8
Re: escritura eeprom
« Respuesta #2 en: 13 de Julio de 2009, 07:27:58 »

una ayudita?
estoy que me tiro de los pelos!

he definido una variable unsigned int contador
ahora quiero la guardar la parte alta en EEDAT, cómo lo hago?
EEDAT = contador.Word.Highword?

ni idea....aqui os pego mis estructuras/uniones:

Código: [Seleccionar]
typedef struct
{             
    unsigned char Bit0:1;
    unsigned char Bit1:1;
    unsigned char Bit2:1;
    unsigned char Bit3:1;
    unsigned char Bit4:1;
    unsigned char Bit5:1;
    unsigned char Bit6:1;
    unsigned char Bit7:1;
} Flags;


typedef union
{
    unsigned char   Byte;   
    Flags           Bits;
} Flagregister;


typedef union
{
    unsigned char   Byte;   
    Flags           Bits;
} Portregister;


typedef struct
{             
    unsigned char Highbyte;
    unsigned char Lowbyte;
} DW_Bytes;


typedef union
{
    unsigned int Word;   
    DW_Bytes     Byte;
}Integer_Register;


typedef struct
{
    unsigned char HighWord_HighByte;   
    unsigned char HighWord_LowByte;   
    unsigned char LowWord_HighByte;   
    unsigned char LowWord_LowByte;   
}DW_Words;


typedef union
{
    unsigned long Word_long;   
    DW_Words   Word;
}Integer_Register_32_Bit;


typedef struct
{
    unsigned int HighWord;   
    unsigned int LowWord;   
}DW_Word_16_Bit;


typedef union
{
    unsigned long Word;   
    DW_Word_16_Bit Word_16_Bit;
}Word_32_Bit;

Desconectado aiioli

  • PIC10
  • *
  • Mensajes: 8
Re: escritura eeprom
« Respuesta #3 en: 13 de Julio de 2009, 08:31:01 »

por favooooooooooooor........

si el contador vale por ejemplo 43981 (ABCD), al guardarlo en una posicion de memoria, me guarda solo la parte baja (CD). logico, porque la direccion de memoria q le he dado solo es un byte....pero como decirle q lo guarde todo?

dios....tengo que conseguir esto YA!

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: escritura eeprom
« Respuesta #4 en: 13 de Julio de 2009, 16:01:27 »
Hola.

Yo lo hago asi:

Código: C#
  1. int16 NCaracter=0;//Variable de 16 bits
  2. int8 EECont=0;//Contador
  3.  
  4. write_eeprom(EECont++,NCaracter>>8);
  5. write_eeprom(EECont++,NCaracter);
El papel lo aguanta todo

Desconectado aiioli

  • PIC10
  • *
  • Mensajes: 8
Re: escritura eeprom
« Respuesta #5 en: 14 de Julio de 2009, 03:02:23 »
mil gracias! me acabas de salvar la vida ;)