Hola neocommandos, he probado tu código y salvo algunos fallos a la hora de compilar funciona perfectamente, la forma de mostrar el reloj es tal y como tú preguntas, que ponga un cero delante del dígito si éste es menor de 10.
Te pasteo el código modificado. Lo único que no he comprobado es la precisión de la interrupción, pero lo que preguntas (la visualizacion del reloj) es como quieres que sea.
Codigo:
#include <16F877A.H> /* tipo de PIC */
#use delay( clock = 4000000 ) /* reloj de 4 MHz */
#include <lcd.c>
#fuses XT,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NODEBUG,NOLVP,NOCPD
#use fast_io(B)
//#include <Rutinas.h>
char cuenta_interrupciones=0;
char segundo=0;
char minuto=0;
char hora=0;
#int_rtcc
void interrupt(void)
{
cuenta_interrupciones++; // Incrementa la variable que cuenta las
// interrupciones
if(cuenta_interrupciones==250) // Si la cuenta ha llegado a 250 ha
// pasado 1 segundo
{
cuenta_interrupciones=0;
segundo++;
}
if(segundo>59)
{
segundo=0;
minuto++;
}
if (minuto>59)
{
minuto=0;
hora++;
}
if (hora>23)
hora=0;
set_rtcc(0x06); // interrupciones y recarga el timer
}
void main( void )
{
lcd_init();
setup_counters (RTCC_INTERNAL, RTCC_DIV_16); // Programacion TMR0
set_timer0(0x06); // Carga el valor del timer0
enable_interrupts(INT_RTCC); // Habilita interrupcion TMR0
enable_interrupts(GLOBAL); // Habilita las interrupciones
while(1)
{
lcd_gotoxy(5,1); // Posiciona el cursor del LCD en dicha posicion
printf(lcd_putc,"%02u",hora);
lcd_putc(":");
printf(lcd_putc,"%02u",minuto);
lcd_putc(":");
printf(lcd_putc,"%02u",segundo);
}
}
Saludos.