
#include <8052.h>

static unsigned char ms_tenth_countdown;

// dynamically setup table.
// Indexed top down.
// setup this table glitchlessly (IRQ save).
// (located absolutely at the start of a 256 byte block)
unsigned char __xdata __at(0x0000) table_P2_over_time[200 + 1];

void Timer0_ISR (void) interrupt 1 {

    // assuming P2 is only used for servos.
    P2 = table_P2_over_time [ ms_tenth_countdown ];

    if (!--ms_tenth_countdown)
        ms_tenth_countdown = 200;

    TF0 = 0;
}

void main(void){}
