Mit Timern lässt sich das auch lösen.
Einmal gestartet, läuft ein Timer immer bis zu seinem Grenzwert (bei 8 Bit also 255) und fängt dann wieder bei 0 an.

Code:
Config Timer0 =Timer, Prescale= 1/8/64/256/1024
Das bedeutet, Timer0 (der hat 8 Bit) wird bei jedem n-ten Prozessortakt um Eins erhöht, das bestimmst Du mit dem Wert bei Prescale.

Also, bei Prescale=1 läuft Timer0 alle 255 Takte einmal durch, bei 64 alle 255x64=16320 Takte, u.s.w.

Außerdem hängt die Durchlaufzeit auch noch vom Preload-Wert ab, denn wer sagt denn, dass Der Timer immer bei 0 starten muß.

Code:
Timer0=100
dann sind´s nur noch 155 Zyklen bis zum Überlauf...

Ferner kann jedem Timer eine eigene Interrupt-Service-Routine (ISR) zugeordnet werden, die bei Erreichen des Überlaufs aufgerufen wird:

Code:
On Timer0 Gosub Irgendwohin

Enable Interrupts

Start Timer0

Irgendwohin:
'Erhöhe z.B. eine Zählvariable
Return
Egal, wo sich das Hauptprogramm grade befindet, wird diese Routine beim Timer-Überlauf abgearbeitet und dann zur Aussprungstelle zurückgekehrt.

Schau mal in die Bascom-Hilfe, die Timer sind da sehr gut erklärt, mit vielen Beispielen.

Und folge unbedingt mal diesem Link und lade Dir Franks Berechnungstool herunter.

Damit ist es eine Kleinigkeit, sich einen Timer für eine bestimmte Frequenz zurechtzubiegen, und es liefert gleich ein fertiges Bascom-Codeschnipsel zum Einbinden ins Programm!

Ein tolles Tool, zumindest für uns Weichei-Bascom-Programmierer, wahre Genies rechnen das natürlich im Kopf aus...

Und noch ein Tipp, klick mal auf die blauen Wörter hier im Beitrag, diese Begriffe sind auf die Wissensdatenbank des Forums verknüpft.

Viele Grüße

Torsten