Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

25/01/2015 #1


¿Por qué arroja números basura un contador con PIC16F877?
Bueno, el error es que en la sección de horas, las convierto a segundos y suma genial, hasta que llega a 18 horas me arroja basura.
Les muestro el código para ver si encuentran algún error.
Código PHP:
#include <16f877.h>

#fuses HS
#fuses NOWDT
#fuses NOPROTECT
#fuses NODEBUG
#fuses NOLVP
#byte Puerto_A=05
#byte Puerto_B=06
#byte Puerto_C=07
#byte Puerto_D=8
#byte Puerto_E=9
#Use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_c6,rcv=PIN_c7)
#include <lcd.c>

////****variables globales****/////
unsigned long int h_1;
long int n,h,m,i,s,suma;
long int m_1;


///***************************///



#INT_RB
conteo_1()

{
delay_ms (10);



if (
bit_test (Puerto_B,5)) //Peticion de Hora
{
lcd_gotoxy(2,1);
printf (lcd_putc,"H:%lu",h);


h_1 = ((h*3600));
h=h+1;
// lcd_gotoxy(2,2);
// printf (lcd_putc,"t:%lu",h_1);


}

if (
bit_test (Puerto_B,6)) //Peticion de Minutos
{
lcd_gotoxy(7,1);
printf (lcd_putc,"M:%lu",m);

m_1 = (m*60);
m=m+1;
}

if (
bit_test (Puerto_B,7)) //Peticion de Segundo
{
lcd_gotoxy(12,1);
printf (lcd_putc,"S:%lu",s);
s=s+1;

}

if(
bit_test(Puerto_B,4))
{
//Puerto_C=0b00010000;
//delay_ms(2000);
//Puerto_C=0b00000000;
//delay_ms(2000);
lcd_gotoxy(1,2);
printf (lcd_putc,"%lu",n);
+1;
}
// Suma //
suma h_1 m_1 s;
lcd_gotoxy(2,2);
printf (lcd_putc,"Total:%lu",suma);

if (
suma)
{
lcd_putc("\f");
lcd_gotoxy(2,2);
printf (lcd_putc,"Stop");


}
//mostar en pantalla lcd
}






main()
{
n=0,m=0,h=0,s=0;

Set_Tris_A(0b00000000);
Set_Tris_B(0b11111111);
Set_Tris_C(0b10000000);
Set_tris_D(0b00000000);
Set_tris_E(0b00000000);

lcd_init();
//lcd_putc ("\f");


enable_interrupts(INT_RB);
enable_interrupts(Global);




lcd_gotoxy (i,1);
printf (lcd_putc,"Proyecto ");
lcd_gotoxy (i,2);
printf (lcd_putc,"Electronica");
delay_ms (300);

for (
i=0;i<20;i++)
{
lcd_gotoxy (i,1);
printf (lcd_putc,"Proyecto ");
lcd_gotoxy (i,2);
printf (lcd_putc,"Electronica");
delay_ms (200);
}
printf (lcd_putc,"Iniciando.");
for (
i=11;i<20;i++)
{
lcd_gotoxy (1,1);
printf (lcd_putc," Iniciando.");
lcd_gotoxy (i,1);
printf (lcd_putc,".");
delay_ms(200);
}
lcd_putc("\f");
lcd_gotoxy(2,1);
printf (lcd_putc,"H:%lu",h);
lcd_gotoxy(7,1);
printf (lcd_putc,"M:%lu",m);
lcd_gotoxy (12,1);
printf (lcd_putc,"S:%lu",s);



For(;
{



//printf ("total :");

/*
delay_ms (150);

if (bit_test (Puerto_B,0)) //peticion de hora
{
lcd_gotoxy(2,1);
printf (lcd_putc,"H:%lu",h);
h=h+1;

}

if (bit_test (Puerto_B,2)) //Peticion de Minutos
{
lcd_gotoxy(11,1);
printf (lcd_putc,"M:%lu",m);
m=m+1;

}
if (bit_test (Puerto_B,5)) //Peticion de Segundos
{
lcd_gotoxy(6,1);
printf (lcd_putc,"S:%lu",s);
s=s+1;

} */






}


25/01/2015 #2

Avatar de JoaquinFerrero

Lo del fallo creo que es porque 18 * 3600 = 64 800, así que en 736 segundos más, desbordará el tamaño de 16 bits.
26/01/2015 #3

Avatar de Nuyel

JoaquinFerrero dijo: Ver Mensaje
Lo del fallo creo que es porque 18 * 3600 = 64 800, así que en 736 segundos más, desbordará el tamaño de 16 bits.
A eso ¿Cuál es el tamaño del long int?

Por que además, estas sumando un unsigned long int en un long int (con signo) eso se traduce en que a uno le sobra un bit, que en caso de tenerlo presente en el que emplea signo se vuelven negativos, si el long int es de 16bits entonces su valor positivo máximo será de 32767 para la que tiene signo mientras que la unsigned llegaría a 65535, naturalmente sumar esos valores se volverá caótico si no los controlas.
27/01/2015 #4

Avatar de TRILO-BYTE

es que CCS no es muy estandar

esta int16 e int32 y sus respectivos unsigned
lo que se diferencia es en usar el printf y el atoi y en modo rs232 no imprimen jaja

solo hay que tener en cuenta eso y no meszclar int16 e int o int32 con int pues generara muchos problemas
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.