Autor Tema: duda con make8 y make 16  (Leído 5316 veces)

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

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
duda con make8 y make 16
« en: 24 de Agosto de 2007, 15:54:13 »
Amigos : necesito guardar en la eeprom de un pic 16f648  un valor de 16 bits. como solo admite valores enteros de 8 bits , hice lo siguiente:

            low  =  make8 ( pare , 1 ) ;         // pare es la variable que tengo que guardar , ahora cuando pongo el 1 , deja los 8 bits de la izq o de la derecha en low?

            high =  make8 ( pare , 0 ) ;       // en este caso , al poner 0 de corrimiento deja en high los 8 bits de la izquierda?
       
            write_eeprom ( 0 , low ) ;            // guarda parte  derecha de pare en memoria?

            delay_ms ( 15 ) ;

            write_eeprom ( 1 , high ) ;            // guarda parte  izquierda   de pare en memoria?

            delay_ms ( 15 ) ;       
     
            pare = make16 ( read_eeprom ( 0x00 ) , read_eeprom ( 0x01 )); // lesta bien recompuesta la variable de 16 bits?

           Desde ya gracias!

Desconectado Marttyn

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1835
    • IDEAA
Re: duda con make8 y make 16
« Respuesta #1 en: 26 de Agosto de 2007, 23:59:34 »
segun la ayuda del CCS:
Citar
Syntax:
 i8 = MAKE8(var, offset)
 
Parameters:
 var is a 16 or 32 bit integer.

offset is a byte offset of 0,1,2 or 3.
 
Returns:
 An 8 bit integer
 
Function:
 Extracts the byte at offset from var. Same as: i8 = (((var >> (offset*8 )) & 0xff) except it is done with a single byte move.
 
Examples:
 int32 x;
 int y;

 y = make8(x,3);  // Gets MSB of x

del ejemplo entiendo que el offset va de derecha a izquierda... por lo que si haces make8 con offset 0 a un int16 te devolvera los LSB (los de la derecha). si lo haces con offset 1, te devuelve los MSB, es decir los de la izquierda.

el codigo deberia quedar asi:
Código: C
  1. low  =  make8 ( pare , 0 ) ;     //guarda en LOW los 8 bits menos significativos de PARE
  2. high =  make8 ( pare , 1 ) ;     //guarda en HIGH los 8 bits mas significativos de PARE
  3.  
  4. write_eeprom ( 0x00 , high ) ;   //guarda parte izquierda de PARE en memoria
  5.  
  6. delay_ms ( 15 ) ;
  7.  
  8. write_eeprom ( 0x01 , low ) ;    //guarda parte derecha de PARE en memoria
  9.  
  10. delay_ms ( 15 ) ;      
  11.  
  12. pare = make16 ( read_eeprom ( 0x00 ) , read_eeprom ( 0x01 )); //restaura PARE con lo que esta guardado en memoria

espero haber ayudado
salu2
La gente ve las cosas que existen y se pregunta por qué.
Yo prefiero imaginar lo que no existe y preguntarme por qué no.

Desconectado fastyx2

  • PIC16
  • ***
  • Mensajes: 109
Re: duda con make8 y make 16
« Respuesta #2 en: 27 de Agosto de 2007, 09:34:38 »
graciass Marttyn!

La duda , despues de leer la ayuda 50 veces era como se consideraba el offset : si de derecha a izquierda o de izquierda a derecha.
Ahora que me lo aclaraste lo voy a probar!

Desconectado BADAJOSsoldier

  • PIC10
  • *
  • Mensajes: 9
Re:duda con make8 y make 16
« Respuesta #3 en: 19 de Febrero de 2023, 20:53:16 »
Hay alguna funcion similar para XC8? o nada de nada.... Un saludo

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:duda con make8 y make 16
« Respuesta #4 en: 20 de Febrero de 2023, 04:57:43 »
Lo que yo uso es esto:

Código: C
  1. write_eeprom(0,variable16 >> 8);    // byte msb
  2. delay_ms(30);
  3. write_eeprom(1,variable16);   // byte lsb

  Y para leer:

Código: C
  1. variable16 = read_eeprom(0) * 256 + read_eeprom(1);

  O usando una unión.

 Procuro tirar de funciones de ccs lo menos posible.
« Última modificación: 20 de Febrero de 2023, 05:39:39 por remi04 »