Soy nuevo en la programación de sistemas embebidos. Estoy trabajando en el reloj usando el temporizador 8051 y la interrupción. El retraso es perfectamente de 1 s, pero cuando ejecuto mi reloj con el reloj de la computadora, pierdo 3-5 s en 10 minutos. Intento muchos valores de interrupción pero no tengo éxito. Por favor, ayuda ...
retraso ();
void delay(int a)
{
for (i=0;i<a;i++){
TH1 = 0XA5;
TL1 = 0XFE;
TR1 = 1;
while(TF1==0);
TR1 = 0;
TF1 = 0;
}
}
interrumpir;
void timer(void) interrupt 1 //interrupt no. 1 for Timer 0
{
TH0 = 0xF6;
TL0 = 0x36;
P2=0xFF;
dig_1 = dig_2 = dig_3 = dig_4 =dig_5 = dig_6 =0;
dig++;
dig=dig%6;
switch(dig)
{
case 0:
P2=digit[sec1];
dig_1 = 1;
break;
case 1:
P2= digit[sec2];
dig_2 = 1;
break;
case 2:
P2=digit[min1];
dig_3 = 1;
break;
case 3:
P2= digit[min2];
dig_4 = 1;
break;
case 4:
P2=digit[hr1];
dig_5 = 1;
break;
case 5:
P2= digit[hr2];
dig_6 = 1;
break;
}
}
main ();
{
j=0;
TMOD = 0x11; // mode1 of Timer0
//2720us
TH0 = 0xF6;
TL0 = 0x36;
ET0=1; // enable timer0 interrupt
EA=1; // enable interrupts
TR0 = 1; //start timer
while(1) // Forward counting
{
hr1=hr2=min2=min1=sec2=sec1=0;
for(hr2=0;hr2<3;hr2++){
if(hr2 == 0 || hr2 ==1){
l = 10;
}
if(hr2 == 2){
l = 4;
}
for(hr1=0;hr1<l;hr1++){
for(min2=0;min2<6;min2++){
for(min1=0;min1<10;min1++){
for(sec2=0;sec2<6;sec2++){
for(sec1=0;sec1<10;sec1++){
delay(40);
if(ctrl_1 ==0){
setting();
}
}
}
}
}
}
}
}
}