Hola mi reloj funciona pero me parece muy engorroso el código :? aceptaria sugerencias de como simplificarlo lo más posible ademas el valor del segundo no es preciso en la realidad aunque en el proteus me anda perfecto,lo que si no tengo conectados los condensadores de 22 pF¿será eso?Nos vemos :)
#include <16f877a.h>
#use delay(clock=4000000)
#fuses XT,PUT,NOPROTECT,NOWDT,NOLVP
#byte portd=8
#include <flex_lcd.c>
const INT16 SEGUNDOS_EN_UNA_HORA=3600;
const int SEGUNDOS_EN_UN_MINUTO=60;
const int SEGUNDOS_EN_SEGUNDOS=1;
int Horas,Minutos,Segundos;
volatile INT32 TimerTicks;
TimerInterruptHandler( void )
{
TimerTicks++;
}
INT32 GetTimerTicks( void ) //No la voy a usar por ahora!!
{
volatile INT32 ReadTicks;
ReadTicks = TimerTicks;
while ( ReadTicks != TimerTicks )
{
ReadTicks = TimerTicks;
}
return( ReadTicks );
}
void MOMENTO_ACTUAL( byte *Horas, byte *Minutos, byte *Segundos)
{
INT32 MomentoActual;
MomentoActual = GetTimerTicks(); //Esta es la función que devuelve los segundos
//*Dias = MomentoActual / SEGUNDOS_EN_UN_DIA; //Calcula los dias.
//MomentoActual %= SEGUNDOS_EN_UN_DIA; //
*Horas = MomentoActual / SEGUNDOS_EN_UNA_HORA;
MomentoActual %= SEGUNDOS_EN_UNA_HORA;
*Minutos = MomentoActual / SEGUNDOS_EN_UN_MINUTO;
MomentoActual %= SEGUNDOS_EN_UN_MINUTO;
*Segundos = MomentoActual / SEGUNDOS_EN_SEGUNDOS;
MomentoActual %= SEGUNDOS_EN_SEGUNDOS;
}
main()
{
lcd_init();
set_tris_d(0x00);
while(1)
{
lcd_gotoxy(1,1);
printf(lcd_putc,"%02d:%02d:%02d",Horas,Minutos,Segundos);
delay_ms(1000);
TimerInterruptHandler();
MOMENTO_ACTUAL(&Horas,&Minutos,&Segundos);
}
}