Colapsar columna

Menu Usuario -

Hola, Visitante
avatar


Mas Activos -

nocturno
Mensajes: 1972
Meta
Mensajes: 276
djfreeman
Mensajes: 272
spiderman
Mensajes: 257
HJ.0x00
Mensajes: 213

Autor Tema: Botones de Inicio, Pausa y Reset en Cronometro con Pic16F877A  (Leído 153 veces)

Desconectado jm89

  • Nuevo fichaje
  • *
  • Mensajes: 1
Buen dia Compañeros,

Reciban un cordial saludo desde Colombia

Estoy iniciando en el mundo de los pic y hace rato estoy en el trabajo de realizar un cronometro de seis digitos (Min, Seg y Dec-Seg), con un Pic16F877A, ya pude desarrollar la idea pero estoy estancado en el control del cronometro ya que desde el momento de que recibe energia este empieza el conteo, y lo que necesito es poder iniciarlo con un sensor qrd1114 y detenerlo con otro qrd1114 y poderle dar reset para que inicie otra vez en 0's.

Adjunto el codigo, lo estoy desarrollando en en MikroC Pro for PIC 2013

Puertos C y D estan como salidas para los 7 Segmentos

Les Agradeceré eternamente su ayuda.


#define datos PORTC
void d1 ()   {
portd=0b00000001;
           }
           
void d2 ()   {
portd=0b00000010;
           }
           
           void d3 ()   {
portd=0b00000100;
           }
               void d4 ()   {
portd=0b00001000;
           }
                 void d5 ()   {
portd=0b00010000;
           }
           void d6 ()   {
portd=0b00100000;
           }

short numero[]={192,249,164,176,153,146,130,248,128,144
};
int i,minuto,minuto1,segundo,segundo1,milisegundo,milisegundo1;


void main() {



adcon1=6;

TRISC=0;
TRISD=0;


PORTC=0;
PORTD=0;


while(1)  {






for(minuto1=0;minuto1<=5;minuto1++){
for(minuto=0;minuto<=9;minuto++){

for(segundo1=0;segundo1<=5;segundo1++){
for(segundo=0;segundo<=9;segundo++){

for(milisegundo1=0;milisegundo1<=9;milisegundo1++){
for(milisegundo=0;milisegundo<=9;milisegundo++){


if(minuto1==5 & minuto==9){
minuto=0;
minuto1=0;
}
for(i=0;i<1;i++) {

d6();
datos=numero[milisegundo];
delay_ms(1);
d5();
datos=numero[milisegundo1];
delay_ms(1);

d4();
datos=numero[segundo];
delay_ms(1);
d3();
datos=numero[segundo1];
delay_ms(1);

d2();
datos=numero[minuto];
delay_ms(1);
d1();
datos=numero[minuto1];
delay_ms(1);
}
         }
         }
         }

        }
      }
          }
         }
       }

Desconectado nocturno

  • Administrator
  • MicroPIC Gurú
  • *****
  • Mensajes: 1972
    • MicroPIC
Re:Botones de Inicio, Pausa y Reset en Cronometro con Pic16F877A
« Respuesta #1 en: Junio 19, 2018, 07:35 »
Hola jm89.
Dos cosas:
1- en tu bucle no has considerado ninguna condición de arranque ni parada, ya que se trata de un bucle infinito que no dejará de ejecutarse si no le metes alguna condición de salida. Si mantienes esa estructura, deberías considerar poner algún IF dentro del bucle que lo mantenga estático mientras el estado de la entrada no se corresponda con la condición de arranque.
2- con este método que has usado el cronómetro nunca será exacto. Lo ideal es que utilices un TIMER del microcontrolador y una interrupción que se ejecute cada décima de segundo (o periodo más corto), y allí incrementes el reloj
Un saludo desde Sevilla, España