This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

high precision timer using AT89S8252

I am trying to implement a high precision timer using AT89S8252 using the following
code:

void configureTimer0(void)
{
EA = 0;
TMOD &= 0xf0;
TMOD |= 0x01;
ET0 =1;
TH0 = TH_VAL
TL0 = TL_VAL
TR0= 1;
EA = 1;
}

// timer 0 interrupt handle
void timer0 (void) interrupt 1
{
TH0 = TH_VAL;
TL0 = TL_VAL;
P2_1 = !P2_1;
switch(val)
{
case 1: // code
break;
case 2: // code
break;
}
}

void main(void)
{
configureTimer0();
while(1);
}

The problem occurs when I try to insert any code inside the Timer 0 interrupt handle, such as a blinking LED ar a simple switch
statement. The code inside interrupt handle was as simple as possible.
In order to keep a constant rate, I have to use a digital osciloscope to adjust TH_VAL and TL_VAL.

Is there any other way to implement this ? Do I have to constantly calibrate TH_VAL and TL_VAL after inserting any piece of code inside the timer interrupt handle ?


Best regards,

Andre

Parents
  • If you set TH, TL and TR (not shown i yoyr code above) at the very start of the ISR and your //code is faster than the timer time the time should be the same regardless of your code. If //code takes longer tham the timer time you are screwed whatever you do.

    Erik

Reply
  • If you set TH, TL and TR (not shown i yoyr code above) at the very start of the ISR and your //code is faster than the timer time the time should be the same regardless of your code. If //code takes longer tham the timer time you are screwed whatever you do.

    Erik

Children
No data