Autor Tema: cronometro regresivo  (Leído 2529 veces)

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

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 116
cronometro regresivo
« en: 01 de Agosto de 2019, 01:28:37 »
Su ayuda por favor para un cronometro de milisegundos y segundos  :mrgreen:

tengo este código en ccs c que funciona de manera que cuenta mS y Seg de manera ascendente:

Código: C++
  1. if(++mS>999){
  2. mS=0;
  3. if(++Sg>59)Sg=0;
  4. }

Ahora me gustaría saber cual es el homologo de esa rutina pero ahora de manera descendente. ¿ Alguna idea ?.
 ;-)


Desconectado AccioRw

  • PIC16
  • ***
  • Mensajes: 165
Re:cronometro regresivo
« Respuesta #1 en: 01 de Agosto de 2019, 05:02:16 »
Hola mariacontenis, puedes poner el resto del código  ?
Por lo que yo entiendo que estás haciendo te dejo puesto lo homólogo de lo que veo por si te vale, imagino debes inicializarlo en algun sitio un poco mas arriba o en otra función, así que te debe coincidir con la cifra de los comentarios que te dejo abajo o poner un "#define"  con lo que quieras para cada uno:

if(--ms == 0){
   ms = 1000;// aquí le pones los ms desde donde quieres que empiece en este caso 1000ms
if(--Sg == 0)Sg=50; // aquí le pones los segundos desde donde quieres que empiece en este caso 50s (en total irian 51s)
}

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:cronometro regresivo
« Respuesta #2 en: 01 de Agosto de 2019, 06:56:28 »
Citar
if(--ms == 0){
   ms = 1000;// aquí le pones los ms desde donde quieres que empiece en este caso 1000ms
if(--Sg == 0)Sg=50; // aquí le pones los segundos desde donde quieres que empiece en este caso 50s (en total irian 51s)

Eso va a requerir que para mostrarlo sea necesario mostrar mS-1 y Sg-1 , ya que nunca tendrias el segundero/milisegundero en 0 y los milisegundos en 1000 implican 1Sg mas.
Para complicarla menos podemos usar:

- Variable sin signo:

Código: C
  1. if(--mS>999){
  2. mS=999;
  3. if(--Sg>59)Sg=59;
  4. }

Aca aprovechamos el overflow... Por ejemplo para los segundos que seria una variable de 8 bits sin signo... al momento de que era 0, y se produce el decremento de unidad, ocurre un integer underflow, lo que termina con el valor de 255, por lo tanto la condicion sigue siendo la misma...  Lo mismo ocurre con mS.

- Variable con signo:

Código: C
  1. if(--mS<0){
  2. mS=999;
  3. if(--Sg<0)Sg=59;
  4. }

Desconectado mariacontenis

  • PIC16
  • ***
  • Mensajes: 116
Re:cronometro regresivo
« Respuesta #3 en: 01 de Agosto de 2019, 08:59:57 »
AccioRw

Esa es la parte de código donde la estoy implementando (con el timer0) para contar 1 ms, ya que así lo requiero. Solo que nunca había requerido el realizar un contador regresivo y estuve 2 hrs frente al computador y me realizaba saltos al llegar a ser cero.

Código: C++
  1. #int_timer0                                                                               // Interrupcion para 1 mS
  2. void timer0(void)
  3. {
  4. set_timer0(tmr0);
  5. if(++mS>999){
  6. mS=0;
  7. if(++Sg>59)Sg=0;
  8. }
  9. }


KILLERJC

Ahora entiendo la lógica de contador regresivo. gracias por su ayuda!!!. Buen programador ((:-))