TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Alejandro en 25 de Marzo de 2011, 19:47:00
-
Hola, tengo el sgte codigo en ccs, cuando lo pruebo en el Proteus funciona perfectamente, puedo ver los que escribe el el hyperterminal de Proteus, pero cuando lo pruebo en el micro solo puedo recibir en el hyperterminal de la PC puro 0.0000, alguien me podria decir cual es mi error!!!
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOSTVREN
#use delay(clock=20000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, ERRORS)// RS232 Estándar
#use standard_io(b)
#use standard_io(d)
#include <stdlib.h>
#include <input.c>
int32 pulsos_LH ;
float Mostrar;
int32 Indice;
#INT_TIMER0
void Tiempo_Demo() {
set_timer0(22464);
Indice++;
pulsos_LH = 56;
Mostrar = (pulsos_LH*3600*0.036)/((Indice)*2.25);
printf("Consumo = %8.4f L/H\r\n",Mostrar);
}
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
set_timer0(22464);
while (TRUE);
}Consumo = 0.0000 L/H
Consumo = 0.0000 L/H
Consumo = 0.0000 L/H
Consumo = 0.0000 L/H
Consumo = 0.0000 L/H
Consumo = 0.0000 L/H
Consumo = 0.0000 L/H
-
No podría decirte porque en Proteus funciona y porque en el micro real no.
Si puedo aconsejarte que tanto la asignación del valor a la variable "Mostrar" como el "printf...." conviene hacerlos fuera de la rutina de interrupción, para que la misma dure el menor tiempo posible.
-
Si puedo aconsejarte que tanto la asignación del valor a la variable "Mostrar" como el "printf...." conviene hacerlos fuera de la rutina de interrupción
Al inicio estaba como tu sugieres pero igual tenia el mismo resultado!!!.
#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,NOSTVREN
#use delay(clock=20000000)
#use rs232(baud=19200, xmit=PIN_C6, rcv=PIN_C7, ERRORS)// RS232 Estándar
#use standard_io(b)
#use standard_io(d)
#include <stdlib.h>
#include <input.c>
int32 pulsos_LH ;
float Mostrar;
int32 Indice;
#INT_TIMER0
void Tiempo_Demo() {
set_timer0(22464);
Indice++;
}
void main(){
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
set_timer0(22464);
pulsos_LH = 56;
while (TRUE){
Mostrar = (pulsos_LH*3600*0.036)/((Indice)*2.25);
printf("Consumo = %8.4f L/H\r\n",Mostrar);
}
}
-
Hola Alejandro, aparte del consejo de AngelGris, de momento sería recomendarte que inicialices a Indice que es una variable de 32 bits ya que en el PIC real podría estar arrancando con un valor muy alto.
Saludos!
-
Hola bmb ,
Si pero de todos modos se imprimiria algun valor, el problema es que solo obtengo puros ceros!!!!
-
Hola Alejandro, yo haría el intento solo por salir de dudas. Supongamos que al iniciar Indice entra con un valor de 350000000.
Mostrar = (pulsos_LH*3600*0.036)/((Indice)*2.25);
Mostrar = (56*3600*0.036/(350000000*2.25))
Mostrar = (7257.6 / 787500000)
Mostrar = 0.000009216
Como tienes a printf con el formato %8.4f entonces solo vas a ver:
Consumo = 0.0000 L/H
Saludos!