Hallo

Bei 33 KHZ beträgt die Zykluszeit 1 / f = 1 / 33000 = 30,3 us. Bei einem 50% Duty-Cycle muß du das Signal 15,15 us einschalten und 15,15 us ausschalten.

Dein Timer 0 kann sich bei 10 MHz alle 100 ns um eins erhöhen. Also in 15,15 us ungefähr 151 mal.

Dein Timer erzeugt beim erreichen von 255 auf 256 einen Overflow Interrupt. Wenn du deinen Timer jetzt mit 255 - 151 = 104 vorlädst, erreichst du alle 15,15 us einen Interrupt..

Also


Config Timer0 = Timer , Prescale = 1

'Define the ISR handler
On Ovf0 Tim0_isr

Enable Timer0 ' enable the timer interrupt
Enable Interrupts 'allow interrupts to occur
Do
'your program goes here
Loop

'the following code is executed when the timer rolls over
Tim0_isr:
Tcnt0 = 104
Toggle PORTB.1
Return

Müsste so stimmen, habe ich aber nicht getestet.

MFG
Dieter