Autor Tema: El comparador "<" no me funciona  (Leído 1579 veces)

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

Desconectado carlosgs

  • PIC10
  • *
  • Mensajes: 2
El comparador "<" no me funciona
« en: 21 de Marzo de 2010, 10:24:38 »
Hola a todos, soy Carlos y soy nuevo en el foro ;)

Tengo un problema extraño con mi programa para un velocista, por fin he conseguido acotar un poco el problema y este es el resultado simplificado para comprobar el error:
Es con el comparador "<" (y tambien "<="), que no funciona bien.

Código: [Seleccionar]
   OUTPUT_LOW(ledPlaca);
   
   delay_ms(5000);
   
   numero = -94;
   
   if(numero < 0) OUTPUT_HIGH(ledPlaca); else OUTPUT_LOW(ledPlaca);//Hace OUTPUT_LOW(ledPlaca); (incorrecto)
   
   numero += 100;
   
   delay_ms(5000);
   
   if(numero > 0) OUTPUT_LOW(ledPlaca); else OUTPUT_HIGH(ledPlaca);//Hace OUTPUT_LOW(ledPlaca); (correcto)

Resultado: LED siempre apagado

Código: [Seleccionar]
   OUTPUT_LOW(ledPlaca);
   
   delay_ms(5000);
   
   numero = -94;
   
   if(numero > 0) OUTPUT_HIGH(ledPlaca); else OUTPUT_LOW(ledPlaca);//Hace OUTPUT_HIGH(ledPlaca); (incorrecto)
   
   numero += 100;
   
   delay_ms(5000);
   
   if(numero < 0) OUTPUT_LOW(ledPlaca); else OUTPUT_HIGH(ledPlaca);//Hace OUTPUT_HIGH(ledPlaca); (correcto)

Resultado:
LED 5 segundos apagado
LED 5 segundos encendido
LED sigue encendido indefinidamente

Que sistemas/programas uso:
- PIC 16F877 (fusibles NOWDT HS NOPUT NOPROTECT BROWNOUT LVP NOCPD NOWRT NODEBUG)
- Compilador CSS (Funcionando sobre wine, en ubuntu linux)
- Programador USBpicprog (por ICSP).

Antes no me habia dado problemas (lo mas probable es que no necesitase comparar numeros negativos, y no me diese el error).

Por ahora pienso que el problema debe estar en el compilador, voy a probar instalandolo en windows y comento que tal.

A ver si alguien puede ayudarme un poco, ya que es una faena no disponer de ese comparador.

Un saludo!

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: El comparador "<" no me funciona
« Respuesta #1 en: 21 de Marzo de 2010, 10:51:14 »
Supongo que la variable nuemro la tienes declarada como INT o LONG
El CCS usa por defecto para estos tipos de datos, números sin signo.
Mirando la ayuda del CCS:
Note: All types, except float, by default are unsigned; however, may be preceded by unsigned or signed.  Short and long may have the keyword INT following them  with no effect.  Also see #TYPE to change the default size.  

Si colocas:

Código: [Seleccionar]
#TYPE SIGNEDUsas números con signo.

Lo que debes tener cuidado es que al usar números con signo el rango de estos es menor.


Fijate que cuando lo compilas, en la siguiente línea

Código: [Seleccionar]
if(numero < 0)....
aparece un Warning:

....Condition always FALSE.


Los warning, para algo están,  :D.
Espero haber ayudado
« Última modificación: 21 de Marzo de 2010, 10:57:36 por pablomanieri »

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 902
Re: El comparador "<" no me funciona
« Respuesta #2 en: 21 de Marzo de 2010, 12:58:29 »
 

Desconectado carlosgs

  • PIC10
  • *
  • Mensajes: 2
Re: El comparador "<" no me funciona
« Respuesta #3 en: 21 de Marzo de 2010, 15:07:56 »
:-D gracias pablo, voy a probarlo!

Edito:
Wow me solucionaste el problema :-)
Muchas gracias

(si hubiese sabido esto hace una semana podria haber quedado bastante mejor en una competicion de velocistas xDDD)

Saludos!
« Última modificación: 21 de Marzo de 2010, 15:13:20 por carlosgs »