Autor Tema: AYUDA CONTADOR ASENDENTE Y DESENDENTE  (Leído 2411 veces)

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

Desconectado PICX

  • PIC10
  • *
  • Mensajes: 20
AYUDA CONTADOR ASENDENTE Y DESENDENTE
« en: 03 de Agosto de 2006, 03:04:47 »
hola genios del C de todo corazon mis respetos para ustedes.

me encuentro en estos momentos estudiando c ,intentando hacer un programita sencillo,
es un cantador asendente y desendente ,llega a 9 y se devuelve y lo tendria que hacer el un
bucle infinito.
lo que he logrado hacer hasta el momento es que cuente de 0 a 9 , se devuelve a 0 pero no vuelve a comenzar y no encuentro el error o nose que me falta 

#include <16f648a.h>            //pic a utilizar
#fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
#use delay (clock=4000000)         //Fosc=4Mhz
#use standard_io(B)

void desendente0_9()
{
   int j;
  signed char i=9;                    //contador para tabla 7 seg(apunta al digito 9 de tab7seg)
   int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};   
   i=9;

  for(j=0;j<10;j++){                        //bucle...
      output_b(tab7seg[ i ]);      //muestra por portb digito 7 segmentos
      delay_ms(500);
      i--;                  //decremento contador para visualizar siguiente digito
      if(i<1)               //¿ya se ha mostrado el digito 0?
      {
       i==0 ;
      }
      }
}


void main()
{
   int j;
   signed char i=0;                                     //contador para tabla 7 seg
   int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};   

   set_tris_b(0x00);            //portb como salida
   disable_interrupts(GLOBAL);      // interrupciones desactivadas
   i=0;
   
  for(j=0;j<10;j++){                         //bucle...
      output_b(tab7seg[ i ]);      //muestra por portb digito 7 segmentos
      delay_ms(500);
      i++;                  //incremento contador para visualizar siguiente digito
      if(i>9)                  //¿ya se ha mostrado el digito 9?
      {
   
      desendente0_9();
         }
      }
   }
   
si no es mucha molestia me podrian explicar porque algunos programas comienzan con
void main(main) y otros con void main() :-/ :mrgreen: :-)


Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: AYUDA CONTADOR ASENDENTE Y DESENDENTE
« Respuesta #1 en: 03 de Agosto de 2006, 04:42:25 »
La forma en la que está realizando tu programa no es la más "elegante" pero es muy lógico si estás empezando. Con el paso del tiempo y tu aprendizaje comprobarás cómo hay maneras de hacerlo más ordenadas.

No obstante, y para corregir tu programita, creo que con cambiar el if y añadir un j=0 después de llamar a la rutina "Descendente" debería ser suficiente.

Código: C
  1. #include <16f648a.h>            //pic a utilizar
  2. #fuses XT,NOWDT,NOPROTECT,PUT,NOLVP      //ordenes para el programador
  3. #use delay (clock=4000000)         //Fosc=4Mhz
  4. #use standard_io(B)
  5.  
  6. void desendente0_9()
  7. {
  8.    int j;
  9.   signed char i=9;                    //contador para tabla 7 seg(apunta al digito 9 de tab7seg)
  10.    int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};  
  11.    i=9;
  12.  
  13.   for(j=0;j<10;j++){                        //bucle...
  14.       output_b(tab7seg[ i ]);      //muestra por portb digito 7 segmentos
  15.       delay_ms(500);
  16.       i--;                  //decremento contador para visualizar siguiente digito
  17.       if(i<1)               //¿ya se ha mostrado el digito 0?
  18.       {
  19.        i==0 ;
  20.       }
  21.       }
  22. }
  23.  
  24.  
  25. void main()
  26. {
  27.    int j;
  28.    signed char i=0;                                     //contador para tabla 7 seg
  29.    int tab7seg[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x67};  
  30.  
  31.    set_tris_b(0x00);            //portb como salida
  32.    disable_interrupts(GLOBAL);      // interrupciones desactivadas
  33.    i=0;
  34.    
  35.   for(j=0;j<10;j++){                         //bucle...
  36.       output_b(tab7seg[ i ]);      //muestra por portb digito 7 segmentos
  37.       delay_ms(500);
  38.       i++;                  //incremento contador para visualizar siguiente digito
  39.       if(i==9)                  //¿ya se ha mostrado el digito 9?
  40.       {
  41.    
  42.       desendente0_9();
  43.       j=0;
  44.          }
  45.       }
  46.    }

Desconectado PICX

  • PIC10
  • *
  • Mensajes: 20
Re: AYUDA CONTADOR ASENDENTE Y DESENDENTE
« Respuesta #2 en: 03 de Agosto de 2006, 13:42:14 »
nocturno con los cambios que me indicaste sucede lo siguiente :
cuenta de 0 - 9 se devuelve correctamente 9-0 en este momento aparece un 9 y empieza
a contar hasta 5 ahi se que da el programa  :(

gracias por tu atencion  :-/

Desconectado PICX

  • PIC10
  • *
  • Mensajes: 20
Re: AYUDA CONTADOR ASENDENTE Y DESENDENTE
« Respuesta #3 en: 03 de Agosto de 2006, 14:07:59 »
ya pude solucionar el problema  despues de que retornaba de la funcion desendente i=queda
cargado con 9 por esto se presentaba un error.

la solucion era despues de colocar desendente0_9();
                                                   j=0;
                                                  i=0 ;      
se debia a volver a inicializar i=0     
                                                   

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
Re: AYUDA CONTADOR ASENDENTE Y DESENDENTE
« Respuesta #4 en: 03 de Agosto de 2006, 14:33:20 »
En el post de Ejemplitos en C para 16F648A, tienes bastantes programas/ejemplos de contadores, uno similar es el numero 15.


Suerte!!! :wink:
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte


 

anything