Autor Tema: Optimizacion en la configuracion del DS1307  (Leído 2460 veces)

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

Desconectado bycebamar

  • PIC10
  • *
  • Mensajes: 20
Optimizacion en la configuracion del DS1307
« en: 14 de Febrero de 2011, 14:49:24 »
Hola Foreros!

Recurro a Uds para consulta como implementan en sus programas el uso de la funcion void ds1307_set_date_time(byte day, byte mth, byte year, byte dow, byte hr, byte min, byte sec).
Es decir, como verifican que por ejemplo no se ingrese como dia válido 31 a Febrero (que tiene solo 28)?

Muchas gracias y un saludo 

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Optimizacion en la configuracion del DS1307
« Respuesta #1 en: 14 de Febrero de 2011, 16:38:15 »
- Si estamos en el mes 2 (febrero) y no es un año bisiesto, entonces si dia>28 ----> dia=1

- Si estamos en el mes 2 (febrero) y es un año bisiesto, entonces si dia>29 ----> dia=1

Desconectado bycebamar

  • PIC10
  • *
  • Mensajes: 20
Re: Optimizacion en la configuracion del DS1307
« Respuesta #2 en: 16 de Febrero de 2011, 00:15:01 »
Gracias por tu respuesta... Pero Como se si es año bisiesto... no?  :D  :D . Esa es la idea del hilo... La idea seria aprovechar de alguna manera la base de datos que tiene adentro el reloj (hasta el año 2100)

Para que entiendas mejor mi pregunta te planteo algunas cuestiones. Por ejemplo:

El reloj esta en 31/01/2011 ... Yo me pisiciono con el cursor sobre el numero 1 del mes y lo paso a 2 -> Se produce un error!!!!
« Última modificación: 16 de Febrero de 2011, 00:19:26 por bycebamar »

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: Optimizacion en la configuracion del DS1307
« Respuesta #3 en: 16 de Febrero de 2011, 04:40:06 »
Para averiguar si un año es bisiesto lo unico que tienes que hacer es poner en el google "año bisiesto" y te saldra el algoritmo para programar. A partir de ahí sacas la funcion:


Código: [Seleccionar]
void ano_bisiesto(int ano)
{
if ((ano%400)==0)
       bisiesto=1;
else if ((ano%100)==0)
       bisiesto=0;
else if ((ano%4)==0)
       bisiesto=1;
else
       bisiesto=0;
}