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
Usamos la UART Tool del PicKit 2 para mostrar todo
En fin, si conocen la razon de esto les dejo el codigo:
#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