TODOPIC

Microcontroladores PIC => Primeros pasos - Iniciación a los microcontroladores => Mensaje iniciado por: Vanesa en 24 de Mayo de 2006, 08:32:41

Título: Grabar datos de 16 bits en la eeprom
Publicado por: Vanesa 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!
Título: Re: Grabar datos de 16 bits en la eeprom
Publicado por: LordLafebre en 24 de Mayo de 2006, 12:15:19
Hola:

Vanesa, utilizas basic?
Título: Re: Grabar datos de 16 bits en la eeprom
Publicado por: Vanesa 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
Título: Re: Grabar datos de 16 bits en la eeprom
Publicado por: LordLafebre 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.
Título: Re: Grabar datos de 16 bits en la eeprom
Publicado por: Vanesa 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.
Título: Re: Grabar datos de 16 bits en la eeprom
Publicado por: microcom 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
   
 
Título: Re: Grabar datos de 16 bits en la eeprom
Publicado por: jfh900 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.
Título: Re: Grabar datos de 16 bits en la eeprom
Publicado por: Nichita 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