Hallo Sven,
Code:
'-------------------------------------------------------------
'Beispiel für die Verwendung der Capture-Unit als Rechteckgenerator
'-------------------------------------------------------------
$crystal = 8000000
$regfile = "m8515.dat"
' ## Configuration
' I/O
Config Pind.5 = Output
' Hardware
' Timer1 als Timer, Vorteiler=256, bei CompareA-Treffer PinD.5 toggeln
Config Timer1 = Timer , Prescale = 256 , Compare A = Toggle
' Interrupts
On Compare1a Timer_loeschen Nosave ' Wenn CompareA-Treffer, dann...
Enable Compare1a
Enable Interrupts
' ## Definitionen
Dim Wert As Word
' ## Initialisierung
Wert = 20000 'Timer1 zählt bis 20.000 und toggelt dann PinD.5
Compare1a = Wert 'Wert ins Compare-Register schreiben
' ## Hauptprogramm
Do
Loop
' ## Hauptprogramm ende
End
' ## Interrupts
Timer_loeschen: ' Wenn Wert erreicht, dann
Timer1 = 0 ' Timer1 löschen
Return
Der Weg den das vielgepriesene Tool geht, geht auch und ist bei niedrigen Frequenzen sogar besser. Bei hohen Frequenzen ist der Weg über Compare günstiger.
Zudem lassen sich, wenn man in der Interrupt Routine nicht Timer1=0 sondern Timer1 = Timer1 + Wert setzt, zwei unabhängige Rechtecksignale mit nur einem Timer erzeugen. Die Erzeugung des zweiten geht dann analog über Compare1B.
Gruß Werner
Lesezeichen