Ich sehe hier ein paar Probleme:
Code:
Do
Config Int0 = Raising 'Int0 loest bei steigender Flanke aus
Config Int0 = Falling 'Int0 loest bei fallender Flanke aus
If Tcnt1 > X Then 'X = Anzahl der Ticks ab der der Zustand der LED geaendert werden soll
Led = 1
Else
Led = 0
Loop
Erstens: Config INT0 = Falling und Config INT0 = Rising nacheinander ist ziemlich sinnlos, weil der zweite Befel den ersten überschreibt. Es resultiert also ein Interrupt auf eine fallende Flanke.
Zweitens: TCNT1 ist ja der Zählerstand des Timers 1, der kontinuierlich hochzählt. Irgendwann wird er zwangsläufig größer werden als die Variable X, und dann schaltet sich die LED ein.
Wenn Du INT0 auf "Change" konfigurierst, löst jede Flanke einen Interrupt aus. Wenn Du am Anfang der ISR eine Abfrage des INT0-Pins machst, kannst Du unterscheiden, ob es eine steigende (PIN = 1) oder eine fallende (PIN = 0) Flanke war. Du bräuchtest dann nur noch ein geeignetes Vefahren, die Zeiten zwischen steigendrn und fallenden Flanken zu messen. Aber das ist auch kein Hexenwerk...
Ud in der ISR gibt´s auch ein paar Probleme:
"Enable Timer1" startet nicht den Timer, sondern aktiviert lediglich den Interrupt beim Überlauf des Timers. Zum Starten des Timers nimt man Start Timer1.
Und "If Int0 = Rising" geht auch nicht, das wird Bascom nicht kompilieren. Wenn, dann müsstest Du die niedrigsten beiden Bits im MCUCR-Register abfragen. Aber bei genauer Betrfachtung bauchst Du diese Abfrage gar nicht!
Lesezeichen