TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: NelsonPIC en 01 de Julio de 2004, 09:44:00

Título: Suma de dos int8
Publicado por: NelsonPIC en 01 de Julio de 2004, 09:44:00
necesito realizar la suma de dos int8 y dejarlo en un int16,
he utilizado el siguiente codigo

int8 dato1;
int8 dato2;
int16 dato3;

main

dato1=0xff;
dato2=0xff;

while(true)

dato3=dato1<<8 + dato2

el resultado deberia ser 0xffff pero el resultado es 0x00ff,
si alguien conoce como resolver el tema, por favor me lo haga saber


Nelson
Título: RE: Suma de dos int8
Publicado por: Ginho_rj en 01 de Julio de 2004, 10:58:00
Escrito originalmente por NelsonPIC
necesito realizar la suma de dos int8 y dejarlo en un int16,
he utilizado el siguiente codigo

int8 dato1;
int8 dato2;
int16 dato3;

main

dato1=0xff;
dato2=0xff;

while(true)

dato3=dato1<<8 + dato2

el resultado deberia ser 0xffff pero el resultado es 0x00ff,
si alguien conoce como resolver el tema, por favor me lo haga saber


Nelson



int8 dato1;
int8 dato2;
int16 dato3;

main
{
dato1=0xff;
dato2=0xff;

while(true)

dato3=(dato1<<8) + (dato2 & 65535)


}

Título: RE: Suma de dos int8
Publicado por: pikman en 01 de Julio de 2004, 23:24:00
Hola,  mira el manual de CCS pagina 97

debes usar MAKE16 aqui tienes el ejemplo del manual

long x;

int hi,lo;

x = make16(hi,lo);

 

creo que no es precisamente una suma lo que pretendes si entiendo bien, esto funciona, y tambien puedes usar otras opciones como MAKE8 o MAKE32 te recomiendo mirar el manual, o sencillamente el help del compilador,

saludos

ARIEL

 
Título: RE: Suma de dos int8
Publicado por: pocher en 02 de Julio de 2004, 01:57:00
Si lo que quieres es sumar 2 enteros y cabe la posibilidad de que haya desbordamiento (resultado mayor que 255) yo lo haría así:

   int16 dato1,dato2,dato3;

   dato1=0xff;
   dato2=0xff;
   
   dato3=dato1+dato2;


Título: RE: Suma de dos int8
Publicado por: Sispic en 02 de Julio de 2004, 05:15:00
si pocher , es la forma correcta , no entendia la pregunta .
 
Título: RE: Suma de dos int8
Publicado por: pikman en 02 de Julio de 2004, 19:10:00
Bueno, NElson explica que quiere sumar dos variables de 8 bits y dice

var1=0xff
var2=0xff

entonces var1+var2= 0x1fe  

pero el dice deberia ser 0xffff, entonces no es una suma lo que se pretende.

para esto hay que usar MAKE16 o lo que explica Ghino que es basicamente lo mismo que hace la funcion, entonces NElson que es lo que quieres hacer?.

saludos

Ariel
Título: RE: Suma de dos int8
Publicado por: cHiPmAn en 03 de Julio de 2004, 03:35:00
Holas,

desconozco el compilador que usais. Yo lo haria así:

unsigned char i;    // Parta baja Lo
unsigned char k;   // Parte alta Hi

unsigned int j;

i=0xFF;
k=0xFF;

j=(unsigned int) (i+k);   // suma Resultado j=0x1FE
j=(k<<8)+i;                    // Resultado j=0xFFFF

supongo que en la mayoria de compiladores ansi tiene que funcionar.

Salu2!
Título: RE: Suma de dos int8
Publicado por: pocher en 03 de Julio de 2004, 11:00:00
Con C de CCS eso no va a funcionar, ya que las especificaciones de tipo son:

int1 Defines a 1 bit number

int8 Defines an 8 bit number

int16 Defines a 16 bit number

int32 Defines a 32 bit number

char Defines a 8 bit character

float Defines a 32 bit floating point number

short By default the same as int1

Int By default the same as int8

long By default the same as int16

void Indicates no specific type