TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Maria33 en 07 de Julio de 2009, 15:01:41
-
Hola! estoy intentando realizar la operación módulo con el compilador C18 pero no sé por qué motivo no sale el resultado esperado.
Lo que hago es lo siguiente:
int Result;
int a;
BYTE b;
Result = a%b;
Gracias
-
Si lo haces así entonces:
0/0 = indeterminado.
Inicializa las variables para que la operación funcione.
-
las variables tiene su valor, pero no lo he puesto. La variable b pertenece a un byte de un array de bytes y a es un int.
-
¿Puede ser que para usar la operación módulo "a%b" tenga que ser uno de los valores a o b una constate?
-
¿Cuál es el ejemplo que no funciona entonces?
La operación módulo funciona para cualquier cosa mientras las variables tengan valores calculables.
-
Si pongo lo siguiente si funciona:
int result;
bool ;
result = 15887%4
if(result ==3)
{
enciendeLed1();
}
else
{
enciendeLed2();
}
En este caso se comprueba que la operación módulo funciona correctamente porque se enciende el Led1.
Pero si pongo lo siguiente no funciona:
int result;
BYTE a = 4;
int b = 15887;
result = ((unsigned char)b) % a;
if(result ==3)
{
enciendeLed1();
}
else
{
enciendeLed2();
}
En este caso se enciende el Led2.
-
El casting que haces destruye el int (16bits pasan a ser 8 bits):
15887 = 0x3E0F
haciendo el casting se truncan bits hasta quedar 8 bits (tamaño de unsigned char):
0x0F
Luego entonces... 0x0F % 0x04 = 0x03
pero por alguna razón no sale 0x03. Le di varias revisadas pero no encuentro el problema con el casting u otra cosa. ¿Qué valor queda en result después de la operación?
(http://img30.imageshack.us/img30/1622/datatypes.jpg)
Prueba con esta instrucción si lo anterior no ayuda...
result = (int) b % a;
-
int result;
BYTE a = 4;
int b = 15887;
result = ((unsigned char)b) % a;
if(result ==3)
{
enciendeLed1();
}
else
{
enciendeLed2();
}
En este caso se enciende el Led2.
prueba de cambiar la declaracion de a por int
-
Estas con C18???
BYTE es una declaracion de CCS mas no de C18 segun se.
saludos
-
Estas con C18???
BYTE es una declaracion de CCS mas no de C18 segun se.
saludos
MLO_ Seguramente tiene definido:
#define BYTE unsigned char
Sino el compilador indica error. Creo yo que, con lo indicado por migsantiago se tiene que solucionar.
-
int result;
BYTE a = 4;
int b = 15887;
result = ((unsigned char)b) % a;
if(result ==3)
{
enciendeLed1();
}
else
{
enciendeLed2();
}
En este caso se enciende el Led2.
prueba de cambiar la declaracion de a por int
opino lo mismo que che doppel