Hi,
eigentlich ist es überhaupt nicht kompliziert 
Ich versuchs einfach nochmal: ein Timer wird so eingestellt, dass er in bestimmten Zeitabständen in ein Unterprogramm reinspringt, wo dann die LEDs angesteuert werden. Die Initialisierung des Timers ist die Geschichte mit
Code:
Config Timer0 = Timer , Prescale = 1
On Timer0 Isr
Enable Timer0
Hier sagen wir ihm also, er soll nach einer gewissen Zeit (die hier eher nebensächlich ist, zumindest fürs Verständnis) zu der Stelle springen, die da heißt: Isr
Das ist eher im unteren Codeabschnitt.
Sagen wir, der Prozessor springt jetzt Hausnummer 1000Mal pro Sekunde in dieses Unterprogramm, also mit 1kHz. Bei jedem Durchlauf der Routine wird die Variable "T" um 1 erhöht. Da thunder87 256 Stufen zu viel waren, hab ich es hier auf 31 Stufen beschränkt. Erreicht die Variable also den Wert 31, wird sie wieder auf 0 zurückgesetzt und weiter fröhlich erhöht.
Eine LED kann also maximal 31 "Zeiteinheiten" eingeschaltet sein. In meinem Beispiel geben die Wert(x)-Zahlen an, wie lange die LED AUSgeschaltet ist, man könnte es aber genausogut umgekehrt machen. Angenommen, der Wert, den wir haben wollen, ist 15, also ca. die Hälfte der Zeit. Jetzt kommt der Prozessor in die Unterroutine, die Zählvariable ist 0. Dank
Code:
If T < Wert(1) Then Portc.0 = 0
ist die LED nun so lange ausgeschaltet, bis T den Wert von Wert(1) erreicht hat, in unserem Fall eben 15. Die restliche Zeit, also von 15-31, ist die LED nun eingeschaltet, danach wird die Variable wieder auf 0 gesetzt und das Spiel beginnt von neuem.
Da diese Routine nun sehr oft in der Sekunde ausgeführt wird, merken wir das ständige Blinken der LED nicht - für das menschliche Auge erscheint die Helligkeit "gedimmt".
Viele Grüße
Lesezeichen