TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: micro_pepe en 14 de Julio de 2006, 07:37:32

Título: Separar long en dos int
Publicado por: micro_pepe en 14 de Julio de 2006, 07:37:32
Hola, me gustaria saber si se puede separar un long en dos int en CCS.

Gracias.
Título: Re: Separar long en dos int
Publicado por: RedPic en 14 de Julio de 2006, 08:26:06
  long val
  int pLow, pHigh;

  pLow  = val;
  pHigh = val>>8;

Título: Re: Separar long en dos int
Publicado por: micro_pepe en 14 de Julio de 2006, 08:34:15
Muchas gracias, es justo lo que necesitaba.

Saludos.
Título: Re: Separar long en dos int
Publicado por: pantera en 18 de Julio de 2006, 16:54:03
Hola Pepe necesito hacer lo mismo que es separa un long en dos datos bytes. Pero me preguntaba si te funciono bien lo que respondio RedPic. No es por desconfiar claro pero me gustaria saber si te funciono

Es evidente que funcionara. pero mas vale
Título: Re: Separar long en dos int
Publicado por: RedPic en 18 de Julio de 2006, 17:42:27
¡¡¡ Hombres de poca fé !!! ¿¿¿ por qué dudáis ???

A mi me funciona perfectamente ...  :(

Código: C
  1. void write_eeprom_16bits(int address, long* val){
  2.    int pLow, pHigh;
  3.    printf("write_eeprom_16bits( address=%u, val=%lx)\r\n",address,val);
  4.    pLow  = val;
  5.    pHigh = val>>8;
  6.    printf("write_eeprom( address=%u, val=%x)\r\n",address,pHigh);
  7.    write_eeprom(address,pHigh);
  8.    delay_ms(12);
  9.    ++address;
  10.    printf("write_eeprom( address=%u, val=%x)\r\n",address,pLow);
  11.    write_eeprom(address,plow);
  12.    delay_ms(12);
  13. }
  14.  
  15. long read_eeprom_16bits(int address){
  16.    int  pLow, pHigh;
  17.    long result;
  18.    printf("read_eeprom_16bits( address=%u)\r\n",address);
  19.    pHigh  = read_eeprom(address);
  20.    printf("read_eeprom( address=%u) = %x\r\n",address,pHigh);
  21.    ++address;
  22.    pLow  = read_eeprom(address);
  23.    printf("read_eeprom( address=%u) = %x\r\n",address,pLow);
  24.    result=(pHigh<<8);
  25.    result+=pLow;
  26.    return result;
  27. }

(http://picmania.garcia-cuervo.com/images/PICC_EEPROM_16Bits_Dump.JPG)

Título: Re: Separar long en dos int
Publicado por: jfh900 en 18 de Julio de 2006, 19:34:36
Y por que no utilizar las funciones que trae el propio CCS, make8, para separar los bytes que se quieran y make16 y make32 para la operación contraria.

Un saludo.
Título: Re: Separar long en dos int
Publicado por: RedPic en 18 de Julio de 2006, 19:52:53
Si, Jesús, es muy bueno utilizar los elementos que un compilador te pone a tu disposición ...  :P

pero si alguien me pregunta cómo hacer algo que es trivial en C (usar el operador shift << ) prefiero hacerlo paso a paso y lo mas estandar posible para que nuestro amigo sepa qué está haciendo y como y porqué.

Como ves lo he descrito en mi ejemplo de esa forma, incluso con una monitorización mediante printf para que pueda ver los resultados intermedios. Prefiero hacerlo así antes que tirar de una función específica del compilador, o incluso de una librería de utilidad como puede ser la eeprom_int como apareció en otro hilo, que sería como utilizar una caja negra que hace lo que te hace falta.

Pretendo así que nuestros amigos no solo solucionen su problema concreto sino que además aprendan algo de C que nunca viene mal.  :mrgreen:
Título: Re: Separar long en dos int
Publicado por: jfh900 en 18 de Julio de 2006, 20:20:40
Totalmente de acuerdo Diego. Pero no hay que olvidar las funciones existentes, muchas veces no se utilizan por que se desconocen. Lo importante es saber como. por que y para que se utilizan las funciones y los comandos y uno elegir el que mas le convenga en cada caso. Por cierto no pongo en duda tus inestimables explicaciones y ejemplos educativos que son enormemente interesantes y aclaratorios y que espero sigamos contando con ellos. Y puestos a pedir podriamos comparar el código generado por el shift y el generado por el make8, haber si realmente merece la pena de usarlo o directamente utilizamos el metodo tradicional.

Un saludo.
Título: Re: Separar long en dos int
Publicado por: pantera en 19 de Julio de 2006, 11:36:47
RedPic No creas que no tengo fe en ti. Si se que eres una persona que sabe un buen de los micros gracias por replicar el post y ya nunca volvere a dudar de ti .... jeeee . Gracias por ayudarme a ser un poco menos ignorante .............Gracias  Hombre

 :-)El Rock es Cultura :-)