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

Temas similares

15/06/2014 #1


Problema con ciclo for (ccs- pic C compiler) pic 18f4550
Buenos días. Tengo un problema con mi ciclo for en un programa que estoy haciendo.
Mi proyecto es un diseñar un reloj con el pic18f4550 y mostrarlo en un lcd.
He usado ciclos for para llevar la cuenta de los segundos, los minutos y las horas con sus temporizadores.
El programa trabaja bien, se respetan los tiempos y todo funciona perfectamente.
Mi problema es que cuando el segundero termina un ciclo y debe volver a cero, no lo hace, sino que comienza a mostrar una serie de números y al llevar 10 números vuelve a la normalidad.
Para que lo vean más gráficamente es así:

segundero= 57, 58, 59, 09, 19, 29, 39, 49, 59, 69, 79, 89, 99, 10, 11... Y luego funciona correctamente hasta que vuelve a terminar el ciclo, es decir, hasta que llega a 59 y vuelve con el mismo error.
He probado con no mostrar el valor que el ciclo for aumenta, sino otra variable distinta y me tiene el mismo problema.
Espero alguno de ustedes pueda ayudarme.
Abajo les anexo la parte del código a ver que me recomiendan.
Código:
for (hora=0;hora<=12;hora++)// ciclo para la hora
   {  lcd_gotoxy(4,3);
     printf(LCD_PUTC,"%i",h); 
     h++;
      for (minu=0;minu<=59;minu++) // ciclo para los minutos
         {
           lcd_gotoxy(7,3);
           printf(LCD_PUTC,"%i",m); 
              m++;
               for (segu=0; segu<60; segu++)  // ciclo para los segundos
               {for (i=0;i<=1;i++)
                   {
                      bit_clear(pir1.0);
                     set_timer1(0xBDC);
            
                     while(!PIR1);
     
                   }
                  lcd_gotoxy(10,3);
                   printf(LCD_PUTC,"%i",s);
                  s++;
                }
               s=0;          
           
         }
    m=0;
    
   }
h=0;
El programa compila perfectamente, y la simulación es en proteus.
15/06/2014 #2

Avatar de TRILO-BYTE

Está medio raro.

Yo haría una interrupción para un segundo, obviamente la debes calcular.

Código:
#int_RTCC 
void clock_isr() 
{
seg++;
set_timer0(numero); 
}

void main()
{

//configura tu interrupcion
while(1)
{
if(seg>=60)
{
seg=0;
min++;
if(min>=60)
{
min=0;
hora++;
}
}

//aca imprimes todo

}//while

}//void
16/06/2014 #3

Avatar de JoaquinFerrero

El problema está en los printf... cuando sacas cantidades que son menores de diez, lo hacen con sólo un dígito: 0, 1, 2, 3...

Como los estás colocando en posiciones fijas, con lcd_gotoxy(), después de pintar '59', al querer pintar el valor de '0' (un dígito), sólo sobreescribe el primer dígito (el '5'). Por eso vemos un '09'. Y luego vemos un '19', y así.

La solución es hacer que los printf siempre escriban dos dígitos:
Código PHP:
for (hora 0hora <= 12hora++) {        // ciclo para la hora
    
lcd_gotoxy(4,3);
    
printf(LCD_PUTC,"%02i",hora); 

    for (
minu 0minu 60minu++) {        // ciclo para los minutos
        
lcd_gotoxy(7,3);
        
printf(LCD_PUTC,"%02i",minu); 

        for (
segu 0segu 60segu++) {     // ciclo para los segundos
            
for (02i++) {
                
bit_clear(pir1.0);
                
set_timer1(0xBDC);
                while(!
PIR1);
            }
            
lcd_gotoxy(10,3);
            
printf(LCD_PUTC,"%02i",segu);
        }
    }

La solución que te da Trilo-byte es mucho mejor. Esta es mi versión:
Código PHP:
hora minuto segundo 0;
while(
1) {
    
lcd_gotoxy(4,3);
    
printf(LCD_PUTC,"%02d:%02d:%02d"horaminutosegundo);

    for (
i=02i++) {
        
bit_clear(pir1.0);
        
set_timer1(0xBDC);
        while(!
PIR1);
    }

    
segundo = ++segundo 60;      // incrementamos segundo 00 -> 59
    
if (== segundo) {
        
minuto = ++minuto 60;    // incrementamos minuto 00 -> 59
        
if (== minuto) {
            
hora = ++hora 24;    // incrementamos hora 00 -> 23
        
}
    }

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.