Autor Tema: Misterioso error en el compilador CCS  (Leído 1852 veces)

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

Desconectado Jaziel

  • PIC10
  • *
  • Mensajes: 1
Misterioso error en el compilador CCS
« en: 28 de Septiembre de 2012, 13:40:08 »
Hola amigos del foro, primero agradecer toda la ayuda que ofrecen aqui, es de mucha utilidad, Muchas Gracias a todos! =).

Les comento que llevo una clase llamada Interfaces de computadora en mi universidad y estamos trabajando con el PIC 16F883 y el compilador CCS, el maestro no esncargo un programa para leer un sensor de temperatura LM35 y mostrar la temperatura en grados celcius o fahrenheit, dependiendo del usuario, primero lo probamos con puros grados celcius y todo funcionaba bien pero al momento de poner la condicion para escoger entre celcius o fahrenheit dejo de mostrar la informacion y solo mostraba "0.0" despues de estarle moviendo al codigo durante toda la clase y que el maestro no nos firmara nuestra practica (¬¬ jejeje), al final mi compañero descubrio que agreagandole dos 'printf' antes de los printf donde mostramos la temperatura ya funcionaba  :shock:

Usamos la UART Tool del PicKit 2 para mostrar todo

En fin, si conocen la razon de esto les dejo el codigo:

Código: [Seleccionar]
#include "16F883.h"
#fuses NOMCLR, NOPUT, NOBROWNOUT, NOIESO, NOFCMEN
#device ADC=10
#use delay (internal=8,000,000) // MCU clock = 8 MHz
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7) // Preprocessor directive that includes RS232 libraries

void main()
{
   INT decision = 0;
   UNSIGNED INT16 value=0;
   WHILE (decision == 0)
   {
      printf ("Presione q\r\n") ;
      CHAR c = getchar () ;
      IF (c == 'q'){decision = 1; }
      ELSE
      {
         printf ("\r\nLa tecla presionada no es q, es: %c", c) ;
      }
   }
   decision = 0;
   WHILE (decision == 0)
   {         
         printf ("\r\nPresione c si quiere Celsius, o f para Farenheit") ;
         CHAR c = getchar () ;
         IF (c == 'c'){           
            decision=1;}
         ELSE{}
         IF (c == 'f'){           
            decision=2;
         }else{}
         IF (decision != 1 && decision!=2){
            printf ("\r\nNo presiono f ni c, intentalo de nuevo");}
         else{}
   }

   printf ("\r\nMuestreando:");     // Printf function included in RS232 library
   setup_adc_ports (sAN0);     //Cual voy a activar   
   setup_adc (ADC_CLOCK_INTERNAL);   // Built - in A / D setup function
   set_adc_channel (0);      // Built - in A / D setup function
   //unsigned int16 value;
   DO
   {
     float num=0.4882;
     delay_ms (1000);     // Built - in delay function   
     value=read_adc();
     // printf ("\r\nValue: %f", num);             // <------- Printf magico
     // printf ("\r\nValue: %5.1Lu", value);     // <------- Printf magico
     if(decision==1){
      float flotante = value*num;
      printf ("\r\nResultado: %5.1f %cC", flotante, 248);}
     else{
      float faren = value*1.8*num;
      printf ("\r\nResultado: %5.1f %cF", faren, 248);}
   } WHILE (TRUE);
}

Los marcados como printf magicos son los que hacen la magia xD, Gracias de antemano por su ayuda =).

Salu2  ;-)

Desconectado callecuatro1976

  • PIC12
  • **
  • Mensajes: 85
Re: Misterioso error en el compilador CCS
« Respuesta #1 en: 24 de Diciembre de 2014, 07:52:44 »
tenes el esquema en proteus

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Misterioso error en el compilador CCS
« Respuesta #2 en: 24 de Diciembre de 2014, 10:39:49 »
Me parece muy raro por que no tiene nada que ver que mandes 2 printf antes..., directamente no funcionaria al principio (el de celsius me refiero )

Lo que me llama la atencion es esta linea:

Citar
#use delay (internal=8,000,000)

La cual siempre vi escrita como:

Citar
#use delay (clock=8000000)

Es decir, sin comas y clock, no le veo sentido el "internal" por que no importa de donde viene el clock. Si no la frecuencia, y tampoco encontre nada con "internal" por internet.

Y por que en tus fuses no tenes configurado el oscilador que usas?

La otra para probar solamente por curiosidad mia xD:

Citar
    if(decision==1){
      float faren = value*1.8*num;
      printf ("\r\nResultado: %5.1f %cF", faren, 248);}      
     else{
      float flotante = value*num;
      printf ("\r\nResultado: %5.1f %cC", flotante, 248);}

« Última modificación: 24 de Diciembre de 2014, 10:43:32 por KILLERJC »


 

anything