Hola a todos:
Acabo de conseguie el cristal de 4,096 y sigue atrasando el reloj estoy usando con el cristal capacitores de 22p puede ser esto o el codigo.
Creo que el codigo esta bien
20 interrupciones
Recarga 56
Preescalar 256
No se que es lo que esta mal?
Adjunto el codigo para ver que esta mal.
Saludos.
Pablo
#include <16F84A.h>
#use delay (clock=4096000)
#fuses XT,NOWDT
byte CONST Display1[] = {0b00010000,0b00010001,0b00010010,0b00010011,0b00010100,0b00010101,0b00010110,0b00010111,0b00011000,0b00011001};
byte CONST Display2[] = {0b00100000,0b00100001,0b00100010,0b00100011,0b00100100,0b00100101,0b00100110,0b00100111,0b00101000,0b00101001};
byte CONST Display3[] = {0b01000000,0b01000001,0b01000010,0b01000011,0b01000100,0b01000101,0b01000110,0b01000111,0b01001000,0b01001001};
byte CONST Display4[] = {0b10000000,0b10000001,0b10000010,0b10000011,0b10000100,0b10000101,0b10000110,0b10000111,0b10001000,0b10001001};
byte segundos1; // A running seconds counter
byte segundos2; // A running seconds counter
byte minutos1; // A running seconds counter
byte minutos2; // A running seconds counter
byte int_count; // Number of interrupts left before a second has elapsed
#int_rtcc // This function is called every time
clock_isr() { // the RTCC (timer0) overflows (255->0).
if(int_count++==20) { // per milisecond.
int_count=0;
segundos1++;
if(segundos1 == 10) {
segundos1 = 0;
segundos2++;
}
if(segundos2 == 6) {
segundos2 = 0;
minutos1++;
}
if(minutos1 == 10) {
minutos1 = 0;
minutos2++;
}
}
}
void main(void) {
segundos1 = 0;
segundos2 = 0;
minutos1 = 0;
minutos2 = 0;
int_count=0;
set_timer0(56);
setup_counters( RTCC_INTERNAL, RTCC_DIV_256);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
// set_tris_b(0x0);
for(;

{
output_b(Display1[segundos1]);
delay_ms(3);
output_b(Display2[segundos2]);
delay_ms(3);
output_b(Display3[minutos1]);
delay_ms(3);
output_b(Display4[minutos2]);
delay_ms(3);
}
}