Autor Tema: Grabar datos de 16 bits en la eeprom  (Leído 2920 veces)

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

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Grabar datos de 16 bits en la eeprom
« en: 24 de Mayo de 2006, 08:32:41 »
Hola, hola!!

Grabar datos de 8 bits en la memoria interna del 16f84 es fácil con la instrucción de write, igual que leerlos con read eeprom, pero alguien sabe como se graban datos de 16 bits?? Supongo que habrá que indicar que utilizas dos posiciones, pero no tengo ni idea de como hacerlo.

Gracias!

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Grabar datos de 16 bits en la eeprom
« Respuesta #1 en: 24 de Mayo de 2006, 12:15:19 »
Hola:

Vanesa, utilizas basic?

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: Grabar datos de 16 bits en la eeprom
« Respuesta #2 en: 24 de Mayo de 2006, 13:19:28 »
Vaya, como siempre se me ha olvidado que utilizo C, concretamente el compilador CCS. Qué cabeza que tengo... :D

Desconectado LordLafebre

  • Moderador Global
  • DsPIC30
  • *****
  • Mensajes: 3529
    • Micros & micros
Re: Grabar datos de 16 bits en la eeprom
« Respuesta #3 en: 24 de Mayo de 2006, 13:28:37 »
Hola:

No se si CCS tenga una funcion para eso, de lo contrario te tocaria separar en 8 bits y guardarlo en dos posiciones diferentes.

Desconectado Vanesa

  • PIC10
  • *
  • Mensajes: 29
Re: Grabar datos de 16 bits en la eeprom
« Respuesta #4 en: 24 de Mayo de 2006, 13:32:30 »
Sí, supongo que me tocará separar el número en bloques de 8 bits (lo cual tampoco sé como se hace) y guardarlo en dos posiciones, pero esperemos que alguien sepa como grabar los 16 bits a la vez para no tener que complicarme tanto la vida.

Desconectado microcom

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 568
Re: Grabar datos de 16 bits en la eeprom
« Respuesta #5 en: 24 de Mayo de 2006, 19:13:42 »
un numeros de 16bits el valor maximo es 131072  binario decimal.
tienes que dividir el numero tal por 100000 y si el numero es mayor de 100000
el carri se activaria y entonces tienes una centena de 1000. si el carri no se activa entonces el numero es menor que 100000.
y asi sucesivamente.


asi es para multiplicar a 16 bits .es  tedioso
no se si te de la idea de convertir de 16bits a numeros de ocho bits.
tienes que hacer la inversa.

suerte

el valor maximo de este ejemplo  es 500000
para hacer sumas secesivas de ochos bits hasta 32 bits.
hay bitsL bitsH bits_alto
para convertir un numero de 16bits tendra que hacer lo contrario
dividir por 100000 despues por 1000 y sacaras las centenas de mil,. decenas de mil, unidad de mil y asi sucesivamente.
dividir son restas sucesivas.

te anexo algo que te puede servir.

suerte

INICIO
   BSF   STATUS,5
   BCF   STATUS,6
   CLRF   PORTB
   MOVLW   B'00000001'
   MOVWF   PORTA
   BCF   STATUS,5
   CLRF   RESULT_L
   CLRF   RESULT_H
   CLRF   RESULTALTO
      CLRF   YOYO
   ;CLRF   CEN
   ;CLRF   MIL
   ;CLRF   DEC
   ;MOVLW   3
   ;MOVWF   MIL_H
   ;MOVLW   H'E8'
   ;MOVWF   MIL_L
   ;MOVLW   .100
   ;MOVWF   CEN_L
   MOVLW   .0
   MOVWF   VALORH
   MOVLW   .50
   MOVWF   VALORL
   MOVLW   .232
   MOVWF   REFE_L
   MOVLW   .1
   MOVWF   REFE_H
   
COMI   MOVF   VALORH,W
   ADDWF   RESULT_H,1
   BTFSS   STATUS,0
   GOTO   MR
   GOTO   RE

MR   MOVF   VALORL,0
   ADDWF   RESULT_L,1
   BTFSS   STATUS,C
   GOTO   HE
   GOTO   MO
HE   DECFSZ   REFE_L,1
   GOTO   COMI
   MOVF   REFE_H,0
   XORLW   .0
   BTFSS   STATUS,2
   GOTO   KI
TER   GOTO   TER
KI   INCF   YOYO,1
   MOVF   REFE_H,0
   SUBWF   YOYO,0
   XORLW   .1
   BTFSS   STATUS,2
   GOTO   COMI
   GOTO   TER

RE   INCF   RESULTALTO,1
   MOVF   VALORL,0
   ADDWF   RESULT_L,1
   BTFSS   STATUS,0
   GOTO   HE
   GOTO   MO

MO   MOVLW   .1
   ADDWF   RESULT_H,1
   BTFSS   STATUS,0
   GOTO   HE
   INCF   RESULTALTO,1
   GOTO   COMI

END

disculpa el enredo
   
 

Desconectado jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: Grabar datos de 16 bits en la eeprom
« Respuesta #6 en: 24 de Mayo de 2006, 20:25:07 »
En C se hace de la siguiente forma:

nValLow = lValue & 0x00FF;
nValHigh = (lValue & 0xFF00)>>8;

Donde lValue es el número de 16 bits, nValLow el byte bajo del número y nValHigh el byte alto del numero.

Saludos.
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Nichita

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 86
Re: Grabar datos de 16 bits en la eeprom
« Respuesta #7 en: 24 de Mayo de 2006, 20:48:14 »
hola, fijate en este codigo que encontre, las funciones son para escribir y leer numeros de 16bits a/desde la eeprom:

Código: [Seleccionar]
void write_eeprom16(int address1, int address2, int16 value)
{
   int8 lowerhalf = 0;
   int8 upperhalf = 0;

   lowerhalf = make8(value,0);
   write_eeprom(address1,lowerhalf);
   upperhalf = make8(value,1);
   write_eeprom(address2,upperhalf);
}

int16 read_eeprom16(int address1, int address2)
{
   int16 finalvalue = 0;
   int8 lowerhalf = 0;
   int8 upperhalf = 0;

   upperhalf = read_eeprom(address2);
   lowerhalf = read_eeprom(address1);

   finalvalue = make16(upperhalf,lowerhalf);

   return finalvalue;
}
espero te sirva