TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: darck_khronos en 27 de Mayo de 2012, 00:56:12
-
Estoy realizando un pequeño clock, mas que por el tipo de receptor que tengo es necesario mandar unidades y decenas por separado via rs232 asi que se me ocurrio esto:
void clock()
{
if(dmin==6)
dmin=0;
else
{
if(umin==10)
{
umin=0;
dmin++;
}
else
{
if(dseg==6)
{
dseg=0;
umin++;
}
else
{
if(useg==10)
{
useg=0;
dseg++;
}
else
{
useg++;
}
}
}
}
}
lo realize asi pensando en usar menos variables o/u operaciones matematicas, ustedes que opinan
-
¿Eso se ejecuta una vez por segundo?
Si es así, creo que cuando se cumple la condición para incrementar decenas de segundo, minutos o decenas de minutos, no estás incrementando los segundos, por lo que se perderá un segundo con cada incremento de sus unidades mayores. ¿Me equivoco?
-
si el código funciona, no hay problemas....
-
void clock()
{
useg++;
if (useg >= 10) {
useg = 0;
dseg++;
}
if (dseg >= 6) {
dseg = 0;
umin++;
}
if (umin >= 10) {
umin = 0;
dmin++;
}
if (dmin >= 6) {
dmin = 0;
}
En estos casos es mejor simplificar el programa para evitar tiempo de depuración y de programación.
Como se va a ejecutar cada segundo, no es importante si tarda uno o dos microsegundos más.
Saludos.
-
También puedes aprovechar la similitud de los bloques para simplificar:
#define INC_CLOCK(var, max, nextvar) if (var>=max) { var = 0; nextvar++; }
void clock()
{
useg++;
INC_CLOCK(useg, 10, dseg);
INC_CLOCK(dseg, 6, umin);
INC_CLOCK(umin, 10, dmin);
INC_CLOCK(dmin, 6, hour);
}
Saludos.
-
realmente si se esta ejecutando cada segundo, ya que mediante el timer estoy mandando a llamar a la funcion, ahorita implemente otra forma un poco mas rapida, pero con la delimitante que estoy utilizando operaciones cosa que no queria.
void clock(void)
{
segundos++;
if (minutos==60)
minutos=0;
if (segundos==60)
{
segundos=0;
minutos++;
}
dmin=minutos/10;
umin=minutos%10;
dseg=segundos/10;
useg=segundos%10;
}
esto es para un cronometro en el cual hay que mandarle por 232 cada uno de los caracteres ya que asi fue diceñado y lo que se daño fue el control xD