TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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
-
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)
}
-
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
-
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;
-
si
pocher , es la forma correcta , no entendia la pregunta .
-
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 
-
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!
-
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