So wird der Timer zwar wohl richtig zählen, aber das Ergebnis wird noch nicht richtig ausgelesen. Als Ergebnis sollte hier mehr Timer0 + 256 * I dienen.

In der ISR von Timer0 sollte man auch nicht Timer0=0 setzen, sondern den sollte man weiterlaufen lassen.

Die Festlegung der gate Zeit durch timer1 könnte man noch etwas verbessern indem man einen Interrupts von timer1 zum anhalten der Messung benutzt. So wie es jetzt ist hat man als Unsicherheit einen eher unwahrscheinlichen Interrupts von timer0 und die Länge der Schleifen die auf den passenden Wert in Timer1 wartet. Mit dem Interrupts zum Stoppe fällt die Schleife als Unsicherheit weg. Den Fehler durch einen möglichen, aber seltenen Interrupt von timer0 kann man nicht so einfach verhindern. Dafür sollte sich auch eine Lösung finden, ist aber dann nicht mehr so einfach. Vermutlich wird der Unterschied aber kaum ins Gewicht fallen.