Autor Tema: pasar 8bit a 16 bit  (Leído 11290 veces)

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

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
pasar 8bit a 16 bit
« en: 16 de Mayo de 2009, 11:32:12 »
Hola grupo, tengo dos variables de 8 bit, hay forma de pasar los valores de estas 2 variables, una a la parte baja y otra a la parte alta de una variable de 16 bit ?, pues he tratado de utilizar la función swap pero veo que solo funciona en 8 bit

gracias.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: pasar 8bit a 16 bit
« Respuesta #1 en: 16 de Mayo de 2009, 11:35:24 »
Primero iguala la variable de 16 a la de 8 y haz un desplazamiento de ocho bits con la función << y después simplemente utiliza swap como dices o una or
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: pasar 8bit a 16 bit
« Respuesta #2 en: 16 de Mayo de 2009, 11:44:10 »
si utilizas CCS usa la función 

i16 = MAKE16(varhigh, varlow)

ejemplo

Código: [Seleccionar]
long x;

int hi,lo;

x = make16(hi,lo); 
LAS MALVINAS SON ARGENTINAS!

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: pasar 8bit a 16 bit
« Respuesta #3 en: 16 de Mayo de 2009, 11:47:07 »
Jaja, yo lo hubiera hecho con mascaras y rotacion de bits. Las cosas q uno se entera de CCS cada dia :P Estaba pensando en pasarme a c18, pero la verdad q va a costar jeje.
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado cerebro

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 735
Re: pasar 8bit a 16 bit
« Respuesta #4 en: 16 de Mayo de 2009, 12:04:36 »
Jaja, yo lo hubiera hecho con mascaras y rotacion de bits. Las cosas q uno se entera de CCS cada dia :P Estaba pensando en pasarme a c18, pero la verdad q va a costar jeje.
saludos!

 :shock:  yo estaba meditando justo sobre eso en estos días, como una introducción al c30 dentro de "algúnnn" tiempo...
LAS MALVINAS SON ARGENTINAS!

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: pasar 8bit a 16 bit
« Respuesta #5 en: 16 de Mayo de 2009, 12:05:10 »
Estuve probando otros métodos para armarla pero MAKE16 es la más rápida y compacta que se puede usar.

Código: [Seleccionar]
.................... //MAKE16
.................... var16=MAKE16(varhigh,varlow);
0024:  MOVF   23,W
0025:  MOVWF  21
0026:  MOVF   22,W
0027:  MOVWF  20

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: pasar 8bit a 16 bit
« Respuesta #6 en: 16 de Mayo de 2009, 13:31:56 »
Mil gracias a todos por estos aportes tan oportunos,
efectivamente con la función make16 logré obtener lo que necesitaba.

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: pasar 8bit a 16 bit
« Respuesta #7 en: 16 de Mayo de 2009, 14:29:30 »
Jaja, yo lo hubiera hecho con mascaras y rotacion de bits. Las cosas q uno se entera de CCS cada dia :P Estaba pensando en pasarme a c18, pero la verdad q va a costar jeje.
saludos!

 :shock:  yo estaba meditando justo sobre eso en estos días, como una introducción al c30 dentro de "algúnnn" tiempo...

Lo que pasa es q fui al seminario de microchip la semana pasada, y todos los ejemplos q dieron de USB y ethernet estaban hechos en c18. Y a simple vista se ve mucho mas facil trabajar dichos stacks en c18 q en CSS. Y no esta de mas aprender a usar otro compilaodr :wink:
saludos!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado RICHI777

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1498
Re: pasar 8bit a 16 bit
« Respuesta #8 en: 16 de Mayo de 2009, 15:20:20 »
Hola, si el compilador no tiene esta función se puede construir una macro.

Código: C
  1. /* Make an word with High byte and Low byte */
  2. #define MAKEWORD( High, Low )                                     \
  3.            (( word ) (((( word )( High )) << 8 ) +                \
  4.             (( word )( Low ))))                                   \

Saludos !

Desconectado ASTROCAR

  • PIC24F
  • *****
  • Mensajes: 664
Re: pasar 8bit a 16 bit
« Respuesta #9 en: 16 de Mayo de 2009, 22:28:15 »
Hola buenas tardes y que funcion habra para separarla ahora en caso contrario a variables de  8 bit en proton es super sencillo voy a revisar la ayuda de ccs para ver que ofrece.

Saludos y esta super bien el dato de como unir variables de 8bit a una variable de 16bit.
Atten.
Alexander Santana.
Venezuela-Barcelona.
EL APRENDER ES NADA; MEJOR ES COMPARTIR EL APRENDIZAJE

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: pasar 8bit a 16 bit
« Respuesta #10 en: 16 de Mayo de 2009, 23:56:54 »
Código: C
  1. int Data_High, Data_Low;
  2. long Datalong;
  3.  
  4. Data_High=make8(Datalong,1);
  5. Data_Low=make8(Datalong,0);
« Última modificación: 16 de Mayo de 2009, 23:59:41 por Suky »
No contesto mensajes privados, las consultas en el foro

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: pasar 8bit a 16 bit
« Respuesta #11 en: 22 de Marzo de 2012, 20:10:55 »
He echo lo siguiente segun se indica en este hilo:

Código: [Seleccionar]
Frecuencia = aux_frec[2];
Frecuencia = Frecuencia << 8;
Frecuencia = Frecuencia | aux_frec[1];
Frecuencia = Frecuencia << 8;
Frecuencia = Frecuencia | aux_frec[0];

Funciona, pero estoy usando Hi-Tech, y me gustaría saber si existe alguna función como la "MAKE16(varhigh, varlow)" de CCS, pero para H-Tech, y 32 bit.

Un abrazo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: pasar 8bit a 16 bit
« Respuesta #12 en: 22 de Marzo de 2012, 22:41:14 »
union {
char BYTE[2];
int DBYTE;
}tal;

tal.BYTE[0]=; contiene 8bits
tal.BYTE[1]=; 8bits
tal.DBYTE contiene los 16bits de byte[0] y [1].

es muchisimo mas sencillo, muchisimo mas optimizado ya que no se usa desplazamientos de bits ninguno (funciones adicionales), el compilador lo traduce a asm moviendo unicamente los bytes en la memoria.

para 32bits por 8bits seria BYTE[4] y en vez de int seria long, antes de nada mirar si es cierto que en el hitech los longs son de 32bits y los chars de 8bits, lo digo porque a veces cambia y yo estoy acostumbrado a C18, C30, C32
« Última modificación: 22 de Marzo de 2012, 22:43:49 por MerLiNz »

Desconectado micro_pepe

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3206
Re: pasar 8bit a 16 bit
« Respuesta #13 en: 23 de Marzo de 2012, 11:38:32 »
OK, de esa forma me he ahorrado un 4% de memoria  :-/ :-/

Un abrazo.
Se obtiene más en dos meses interesandose por los demás, que en dos años tratando de que los demás se interesen por ti.

新年快乐     的好奇心的猫死亡

Desconectado Simon21

  • PIC18
  • ****
  • Mensajes: 302
Re: pasar 8bit a 16 bit
« Respuesta #14 en: 30 de Mayo de 2012, 19:05:19 »
Buenas, interesante lo que hacen con el make16.
Ahora tengo una consulta, si quisiera unir 3 variables de 8 bits
para formar una de 24 bits ??

por ejemplo:

int8 a, b, c;

int32 variable=0;

// variable= (a, b, c); Quiero formar la "variable" uniendo a, b, c y d  :lol:

Que sucede con los bits que sobran ?? me refiero a que si uso 24 van a sobrar 8, por ello
lo que hice fue iniciarla a cero, para asegurarme que los que quedan libres sean efectivamente
cero.

Saludos a todos :) :)
« Última modificación: 30 de Mayo de 2012, 19:10:28 por Simon21 »
INGENIERIA ELECTRONICA
UNIVERSIDAD TECNOLOGICA NACIONAL