Można by tak: zegar 12 MHz i wtedy cykl maszyny trwa 1 us, timer T0 ustawiasz w tryb 2 (autoreload) wpisując do jego rejestrów TH0 i TL0 wartości takie by przerwanie od niego było co 10us (problem kroku załatwiony). Tworzysz licznik programowy w którym będziesz odliczał potrzebną ilość wcześniej ustalonych przerwań. Po przekręceniu licznika reakcja na wyjściach w sensie wytwarzanie impulsu. Dalsza modyfikacja - dwa liczniki, jeden dla stanu HI drugi dla LOW i masz powtarzalne impulsy o regulowanym wypełnieniu.
Tutaj fragment kodu dla ustawienia timera T0
init_timer0:
anl TMOD, #0F0H ;zeruj Timer 0
orl TMOD, #02h ;
mov TL0, #00h ;wartość ustawiana przez użytkownika
mov TH0, #00h ;j.w.
setb IE.1 ;będzie generowane przerwanie
setb TR0 ;TCON.4 start timer
ret
gdzieś w programie głównym musi być:
call init_timer0
i obsługa przerwania