Autor Tema: Duda respecto a código de Contador de 0 a 99.  (Leído 2317 veces)

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

Desconectado Skelton

  • PIC10
  • *
  • Mensajes: 12
Duda respecto a código de Contador de 0 a 99.
« en: 23 de Octubre de 2019, 14:00:35 »
Saludos a todos las personas presentes en el foro.

Estoy realizando un contador de 0 a 99 con las siguientes características: En principio tengo que conectar un dispswitch de 7 a todo el puerto D para establecer una combinación de números binarios y estos aparezcan como decimal en dos display 7 segmentos, desde ese valor que agrego inicia el contador entre 0 y 99.
Luego de digitar dicho numero Debe tener dos modos de accionar (Manual y automatico) mediante un dipswitch de 2, cuando ejecuto el modo manual con un pulsador que va a ir a el puerto RB0 cada vez que yo pulse el valor del contador va a incrementar de 1 en 1 con cada pulsación. En el caso contrario si ejecuto el modo automatico el contador empezara a incrementar de forma autonoma. Cabe resaltar que en los dos casos cuando el contador llegue a 99 debe reiniciarse en 0 y en el puerto B utilizo RB0 como entrada y RB1,RB2,RB3,RB4,RB5,RB6,RB7 como salida a los display 7 segmentos que los tengo multiplexados.

Lo que llevo adelantado hasta ahora es el contador de forma automatica, no eh podido agregar los dos modos los cuales en mi simulacion los colocare en el puerto RA0 Y RA1 (Como entradas. Y el dispswitch de 7 en mi simulacion lo coloque en el puerto D (Todo como entrada)

Codigo en ccs:
Código: C
  1. #INCLUDE <16F877A.h>
  2. #USE DELAY(CLOCK=4M)
  3. #FUSES XT,NOPROTECT,NOWDT,NOBROWNOUT,PUT,NOLVP
  4. Byte CONST display[10]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
  5. #BYTE PORTB= 6
  6. #BYTE PORTC= 7
  7. #DEFINE TUNI PORTC,0 //Definición de variables
  8. #DEFINE TDEC PORTC,1 //Definición de variables
  9.  
  10. INT CONT;   //Declarar la variable CONT como
  11.             //un entero, es decir de 8 bits
  12. LONG CONTRET;  //Declarar la variable CONTRET
  13.                //como long, es decir de 16 bits
  14.                
  15.                
  16. VOID MOSTRAR( ) //Rutina mostrar
  17. {
  18.    INT UNI,DEC;   //Declarar las variables UNI, DEC
  19.                   //como un entero, es decir de 8bits
  20.    DEC=CONT/10;
  21.    UNI=CONT%10;
  22.    PORTB=(DISPLAY[UNI]);   //Muestra lo que hay en unidades
  23.                            //en el display
  24.    BIT_SET (TUNI);         //Enciende el display de unidades
  25.    DELAY_MS(1);            //Retardo de 1 milisegundos
  26.    BIT_CLEAR(TUNI);        //Apaga el display de unidades
  27.    PORTB=(DISPLAY[DEC]);   //Muestra lo que hay en unidades
  28.                            //en el display
  29.    BIT_SET (TDEC);         //Enciende el display de decenas
  30.    DELAY_MS(1);            //Retardo de 1 milisegundos
  31.    BIT_CLEAR(TDEC);        //Apaga el display de decenas
  32.    
  33. }
  34.  
  35.  
  36. VOID RET1SEG() //Rutina RET1SEG
  37. {
  38.    CONTRET=500; //Cargue con 500 la variable CONTRET
  39.    WHILE (CONTRET>0) //Mientras que la variable CONTRET sea mayor que cero
  40.    {
  41.       MOSTRAR();        //Llamar la rutina MOSTRAR
  42.       CONTRET--;        // Decremente la variable CONTRET
  43.    }
  44. }
  45.  
  46. void MAIN()
  47. {
  48.    SET_TRIS_B(0b00000001); //El puerto B esta configurado como salida
  49.    SET_TRIS_C(0); // El puerto C esta configurado como salida
  50.    CONT=0;  //la variable CONT se inicializa con cero
  51.  
  52.    WHILE(TRUE) //Haga por siempre
  53.    {
  54.       CONT=0;
  55.       WHILE(CONT<100) //mientras la variable CONT es menor que 100
  56.       {
  57.          RET1SEG( ); //Llama la rutina RET1SEG
  58.          CONT++; //Incrementa la variable CONT
  59.       }
  60.      
  61.    }
  62. }

Simulación en proteus:


Dejo el link si quieren ampliar: https://www15.zippyshare.com/v/uDJVjqkz/file.html

Cabe resaltar que agradecería muchísimo la ayuda que me puedan brindar en cuanto a lógica del código y demás!. Estoy en mis inicios.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda respecto a código de Contador de 0 a 99.
« Respuesta #1 en: 27 de Octubre de 2019, 09:48:01 »
Mi recomendación seria usar un temporizador para contar los segundos, especialmente uno de 16 bits.

Si queres automatico o manual simplemente activas o desactivas el temporizador.
Cuando este desactivado lees el pin B0 que te aumenta, sino no.

Lo demas esta bien.