The BIOS timer tick normally counts 65536 cycles of the 1193182 Hz PIT clock. The long-term accuracy of the timer in DOS should be good. The problem is trying to time short periods against a timer with a 54.9…ms resolution. You can improve the situation somewhat by synchronizing with the timer tick before you start timing your event. This should eliminate half of the ~110ms uncertainty.
One possible solution, easy to use but with poor long-term accuracy, is here:
To expand on the “uncertainty”:
Timing an interval requires 2 calls to the timer function, and because each call could occur at any point in the timer cycle the uncertainty for each call is equal to the timer period, ~55ms, so the uncertainty for the timed interval is ~110ms. By synchronizing with the timer at the start of the timed interval, so you know that you are at the start of a timer period, the uncertainty in the timed interval is the uncertainty for the second call to the timer function. You can synchronize with the timer using something like this:
The high-resolution timer at the link above has a negligible uncertainty, but a significant error that in my tests was much smaller than even the ~55ms uncertainty for the timer function.